@acorex-platform/framework-client 0.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/README.md +7 -0
  2. package/auth/README.md +3 -0
  3. package/common/README.md +3 -0
  4. package/core/README.md +4 -0
  5. package/fesm2022/acorex-platform-framework-client-auth.mjs +1383 -0
  6. package/fesm2022/acorex-platform-framework-client-auth.mjs.map +1 -0
  7. package/fesm2022/acorex-platform-framework-client-common-common-settings.provider-CbzOYCnI.mjs +190 -0
  8. package/fesm2022/acorex-platform-framework-client-common-common-settings.provider-CbzOYCnI.mjs.map +1 -0
  9. package/fesm2022/acorex-platform-framework-client-common.mjs +9467 -0
  10. package/fesm2022/acorex-platform-framework-client-common.mjs.map +1 -0
  11. package/fesm2022/acorex-platform-framework-client-core.mjs +4655 -0
  12. package/fesm2022/acorex-platform-framework-client-core.mjs.map +1 -0
  13. package/fesm2022/acorex-platform-framework-client-domain.mjs +3189 -0
  14. package/fesm2022/acorex-platform-framework-client-domain.mjs.map +1 -0
  15. package/fesm2022/acorex-platform-framework-client-layout-builder.mjs +3439 -0
  16. package/fesm2022/acorex-platform-framework-client-layout-builder.mjs.map +1 -0
  17. package/fesm2022/acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-CWVU3wXL.mjs +134 -0
  18. package/fesm2022/acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-CWVU3wXL.mjs.map +1 -0
  19. package/fesm2022/acorex-platform-framework-client-layout-components.mjs +9777 -0
  20. package/fesm2022/acorex-platform-framework-client-layout-components.mjs.map +1 -0
  21. package/fesm2022/acorex-platform-framework-client-layout-designer.mjs +2799 -0
  22. package/fesm2022/acorex-platform-framework-client-layout-designer.mjs.map +1 -0
  23. package/fesm2022/acorex-platform-framework-client-layout-entity-attachments-page.component-CxBxxpmA.mjs +376 -0
  24. package/fesm2022/acorex-platform-framework-client-layout-entity-attachments-page.component-CxBxxpmA.mjs.map +1 -0
  25. package/fesm2022/acorex-platform-framework-client-layout-entity-file-list-popup.component-l0JAHKIH.mjs +100 -0
  26. package/fesm2022/acorex-platform-framework-client-layout-entity-file-list-popup.component-l0JAHKIH.mjs.map +1 -0
  27. package/fesm2022/acorex-platform-framework-client-layout-entity.mjs +26299 -0
  28. package/fesm2022/acorex-platform-framework-client-layout-entity.mjs.map +1 -0
  29. package/fesm2022/acorex-platform-framework-client-layout-views.mjs +2960 -0
  30. package/fesm2022/acorex-platform-framework-client-layout-views.mjs.map +1 -0
  31. package/fesm2022/acorex-platform-framework-client-layout-widget-core.mjs +4711 -0
  32. package/fesm2022/acorex-platform-framework-client-layout-widget-core.mjs.map +1 -0
  33. package/fesm2022/acorex-platform-framework-client-layout-widgets-button-widget-designer.component-CpkWwygb.mjs +72 -0
  34. package/fesm2022/acorex-platform-framework-client-layout-widgets-button-widget-designer.component-CpkWwygb.mjs.map +1 -0
  35. package/fesm2022/acorex-platform-framework-client-layout-widgets-image-preview.popup-C_EPAvCU.mjs +29 -0
  36. package/fesm2022/acorex-platform-framework-client-layout-widgets-image-preview.popup-C_EPAvCU.mjs.map +1 -0
  37. package/fesm2022/acorex-platform-framework-client-layout-widgets-page-widget-designer.component-CmtTq2Mt.mjs +172 -0
  38. package/fesm2022/acorex-platform-framework-client-layout-widgets-page-widget-designer.component-CmtTq2Mt.mjs.map +1 -0
  39. package/fesm2022/acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-DSx0E3NV.mjs +513 -0
  40. package/fesm2022/acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-DSx0E3NV.mjs.map +1 -0
  41. package/fesm2022/acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-DdfcGV1C.mjs +274 -0
  42. package/fesm2022/acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-DdfcGV1C.mjs.map +1 -0
  43. package/fesm2022/acorex-platform-framework-client-layout-widgets-tabular-data-view-popup.component-CntopmDS.mjs +64 -0
  44. package/fesm2022/acorex-platform-framework-client-layout-widgets-tabular-data-view-popup.component-CntopmDS.mjs.map +1 -0
  45. package/fesm2022/acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-B5kSWxGk.mjs +34 -0
  46. package/fesm2022/acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-B5kSWxGk.mjs.map +1 -0
  47. package/fesm2022/acorex-platform-framework-client-layout-widgets.mjs +28553 -0
  48. package/fesm2022/acorex-platform-framework-client-layout-widgets.mjs.map +1 -0
  49. package/fesm2022/acorex-platform-framework-client-native.mjs +155 -0
  50. package/fesm2022/acorex-platform-framework-client-native.mjs.map +1 -0
  51. package/fesm2022/acorex-platform-framework-client-runtime.mjs +911 -0
  52. package/fesm2022/acorex-platform-framework-client-runtime.mjs.map +1 -0
  53. package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-create-view.component-DnTHwsDJ.mjs +160 -0
  54. package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-create-view.component-DnTHwsDJ.mjs.map +1 -0
  55. package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-modify-view.component-BpR9g6QS.mjs +121 -0
  56. package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-modify-view.component-BpR9g6QS.mjs.map +1 -0
  57. package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-single-view.component-D1a7UI71.mjs +236 -0
  58. package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-single-view.component-D1a7UI71.mjs.map +1 -0
  59. package/fesm2022/acorex-platform-framework-client-themes-default-error-401.component-D--_MIar.mjs +48 -0
  60. package/fesm2022/acorex-platform-framework-client-themes-default-error-401.component-D--_MIar.mjs.map +1 -0
  61. package/fesm2022/acorex-platform-framework-client-themes-default-error-404.component-Byyqk8pH.mjs +42 -0
  62. package/fesm2022/acorex-platform-framework-client-themes-default-error-404.component-Byyqk8pH.mjs.map +1 -0
  63. package/fesm2022/acorex-platform-framework-client-themes-default-error-offline.component-DR6G8gPC.mjs +19 -0
  64. package/fesm2022/acorex-platform-framework-client-themes-default-error-offline.component-DR6G8gPC.mjs.map +1 -0
  65. package/fesm2022/acorex-platform-framework-client-themes-default.mjs +4160 -0
  66. package/fesm2022/acorex-platform-framework-client-themes-default.mjs.map +1 -0
  67. package/fesm2022/acorex-platform-framework-client-themes-shared-icon-chooser-column.component-CXSGiTCK.mjs +55 -0
  68. package/fesm2022/acorex-platform-framework-client-themes-shared-icon-chooser-column.component-CXSGiTCK.mjs.map +1 -0
  69. package/fesm2022/acorex-platform-framework-client-themes-shared-icon-chooser-view.component-BY5clQ1J.mjs +57 -0
  70. package/fesm2022/acorex-platform-framework-client-themes-shared-icon-chooser-view.component-BY5clQ1J.mjs.map +1 -0
  71. package/fesm2022/acorex-platform-framework-client-themes-shared-settings.provider-DEL2YOTP.mjs +234 -0
  72. package/fesm2022/acorex-platform-framework-client-themes-shared-settings.provider-DEL2YOTP.mjs.map +1 -0
  73. package/fesm2022/acorex-platform-framework-client-themes-shared-theme-color-chooser-column.component-BXl8u4Yp.mjs +94 -0
  74. package/fesm2022/acorex-platform-framework-client-themes-shared-theme-color-chooser-column.component-BXl8u4Yp.mjs.map +1 -0
  75. package/fesm2022/acorex-platform-framework-client-themes-shared-theme-color-chooser-view.component-i2sOOkVj.mjs +86 -0
  76. package/fesm2022/acorex-platform-framework-client-themes-shared-theme-color-chooser-view.component-i2sOOkVj.mjs.map +1 -0
  77. package/fesm2022/acorex-platform-framework-client-themes-shared.mjs +2375 -0
  78. package/fesm2022/acorex-platform-framework-client-themes-shared.mjs.map +1 -0
  79. package/fesm2022/acorex-platform-framework-client-workflow.mjs +2836 -0
  80. package/fesm2022/acorex-platform-framework-client-workflow.mjs.map +1 -0
  81. package/fesm2022/acorex-platform-framework-client.mjs +6 -0
  82. package/fesm2022/acorex-platform-framework-client.mjs.map +1 -0
  83. package/layout/builder/README.md +1578 -0
  84. package/layout/components/README.md +3 -0
  85. package/layout/designer/README.md +4 -0
  86. package/layout/entity/README.md +4 -0
  87. package/layout/views/README.md +3 -0
  88. package/layout/widget-core/README.md +4 -0
  89. package/layout/widgets/README.md +3 -0
  90. package/native/README.md +4 -0
  91. package/package.json +98 -0
  92. package/runtime/README.md +3 -0
  93. package/themes/default/README.md +3 -0
  94. package/themes/shared/README.md +3 -0
  95. package/types/acorex-platform-framework-client-auth.d.ts +690 -0
  96. package/types/acorex-platform-framework-client-common.d.ts +3287 -0
  97. package/types/acorex-platform-framework-client-core.d.ts +1849 -0
  98. package/types/acorex-platform-framework-client-domain.d.ts +1968 -0
  99. package/types/acorex-platform-framework-client-layout-builder.d.ts +1058 -0
  100. package/types/acorex-platform-framework-client-layout-components.d.ts +3362 -0
  101. package/types/acorex-platform-framework-client-layout-designer.d.ts +501 -0
  102. package/types/acorex-platform-framework-client-layout-entity.d.ts +4374 -0
  103. package/types/acorex-platform-framework-client-layout-views.d.ts +975 -0
  104. package/types/acorex-platform-framework-client-layout-widget-core.d.ts +1080 -0
  105. package/types/acorex-platform-framework-client-layout-widgets.d.ts +5263 -0
  106. package/types/acorex-platform-framework-client-native.d.ts +28 -0
  107. package/types/acorex-platform-framework-client-runtime.d.ts +301 -0
  108. package/types/acorex-platform-framework-client-themes-default.d.ts +889 -0
  109. package/types/acorex-platform-framework-client-themes-shared.d.ts +202 -0
  110. package/types/acorex-platform-framework-client-workflow.d.ts +1345 -0
  111. package/types/acorex-platform-framework-client.d.ts +2 -0
  112. package/workflow/README.md +4 -0
@@ -0,0 +1,1058 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { OnInit, EventEmitter } from '@angular/core';
3
+ import * as i1 from '@angular/common';
4
+ import { AXPActionMenuItem, AXPMultiLanguageString, AXPMetaData, AXPWidgetNode, AXPGridLayoutOptions, AXPWidgetRenderMode, AXPExpression, AXPValidationRules, AXPOptionsData, AXPContextChangeEvent, AXPExecuteCommandResult } from '@acorex-platform/framework-shared/core';
5
+ import { AXFormComponent } from '@acorex/components/form';
6
+ import { AXValidationSummary } from '@acorex/core/validation';
7
+ import { AXPWidgetContainerComponent, AXPWidgetCoreElementAction } from '@acorex-platform/framework-client/layout/widget-core';
8
+ import { AXDataSource, AXComponentClosing } from '@acorex/cdk/common';
9
+ import { AXPopupSizeType } from '@acorex/components/popup';
10
+ import { AXStepWizardLook } from '@acorex/components/step-wizard';
11
+ import { AXPDialogActionOptions } from '@acorex-platform/framework-client/core';
12
+ export { AXPDialogActionOptions, AXPDialogActionShortcut, DEFAULT_CANCEL_DIALOG_ACTION_SHORTCUTS, DEFAULT_SUBMIT_DIALOG_ACTION_SHORTCUTS } from '@acorex-platform/framework-client/core';
13
+ import { AXBasePageComponent } from '@acorex/components/page';
14
+ import { AXPCommand } from '@acorex-platform/framework-shared/runtime';
15
+
16
+ /**
17
+ * Extended widget node properties (excluding type, path, name, options, children)
18
+ * These properties can be passed as a third parameter to customWidget method
19
+ */
20
+ type AXPWidgetNodeExtendedProperties = Omit<AXPWidgetNode, 'type' | 'path' | 'name' | 'options'>;
21
+ /**
22
+ * Form appearance and density styling (using fieldset widget look)
23
+ */
24
+ type AXPDynamicFormLook = 'fieldset' | 'card' | 'group' | 'container';
25
+ /**
26
+ * Form rendering mode
27
+ */
28
+ type AXPDynamicFormMode = 'view' | 'edit';
29
+ /**
30
+ * Form layout direction and flow
31
+ */
32
+ type AXPDynamicFormDirection = 'vertical' | 'horizontal' | 'grid';
33
+ interface AXPDynamicFormFieldDefinition {
34
+ path: string;
35
+ title?: AXPMultiLanguageString;
36
+ badge?: string;
37
+ description?: AXPMultiLanguageString;
38
+ widget: AXPWidgetNode;
39
+ /**
40
+ * Optional per-field rendering mode. Takes precedence over section and form modes.
41
+ */
42
+ mode?: AXPDynamicFormMode;
43
+ layout?: AXPGridLayoutOptions;
44
+ }
45
+ interface AXPDynamicFormGroupDefinition {
46
+ name: string;
47
+ title?: AXPMultiLanguageString;
48
+ description?: AXPMultiLanguageString;
49
+ parameters: AXPDynamicFormFieldDefinition[];
50
+ /**
51
+ * Optional per-section rendering mode. Takes precedence over form mode and is overridden by field mode.
52
+ */
53
+ mode?: AXPDynamicFormMode;
54
+ /**
55
+ * Visual appearance of the group (fieldset, card, group, container)
56
+ */
57
+ look?: 'fieldset' | 'card' | 'group' | 'container';
58
+ }
59
+ interface AXPDynamicFormDefinition {
60
+ groups: AXPDynamicFormGroupDefinition[];
61
+ /**
62
+ * Optional form-level rendering mode
63
+ */
64
+ mode?: AXPDynamicFormMode;
65
+ }
66
+ interface AXPDialogRef {
67
+ /**
68
+ * Manually close the dialog (optional - dialog closes automatically after user interaction)
69
+ */
70
+ close(result?: any): void;
71
+ /**
72
+ * Get the form data from the dialog
73
+ */
74
+ context(): any;
75
+ /**
76
+ * Get the action that was clicked by the user
77
+ */
78
+ action(): string | undefined;
79
+ /**
80
+ * Set the loading state of the dialog
81
+ */
82
+ setLoading(loading: boolean): void;
83
+ /**
84
+ * Deep-merge partial values into the dialog layout context (e.g. after create returns an id).
85
+ */
86
+ patchContext?(partial: Record<string, unknown>): void;
87
+ /**
88
+ * Invoke a registered widget's public `api()` method (e.g. step-wizard `next`).
89
+ */
90
+ invokeWidget?(widgetName: string, method: string, options?: {
91
+ setLoading?: (loading: boolean) => void;
92
+ close?: (result?: any) => void;
93
+ }): Promise<void>;
94
+ }
95
+ /** Fallback {@link AXPDialogRef} when the popup is dismissed without a footer action (e.g. header close). */
96
+ declare function createDismissedDialogRef(context?: () => unknown): AXPDialogRef;
97
+ interface LayoutWidgetOptions {
98
+ name?: string;
99
+ }
100
+ interface ValueWidgetOptions extends LayoutWidgetOptions {
101
+ path: string;
102
+ defaultValue?: any;
103
+ validations?: AXPValidationRules;
104
+ }
105
+ interface TextBoxOptions extends ValueWidgetOptions {
106
+ placeholder?: AXPMultiLanguageString;
107
+ maxLength?: number;
108
+ minLength?: number;
109
+ prefix?: string;
110
+ suffix?: string;
111
+ clearButton?: boolean;
112
+ }
113
+ interface NumberBoxOptions extends ValueWidgetOptions {
114
+ min?: number;
115
+ max?: number;
116
+ step?: number;
117
+ placeholder?: AXPMultiLanguageString;
118
+ format?: string;
119
+ }
120
+ interface SelectBoxOptions extends ValueWidgetOptions {
121
+ dataSource: any[] | (() => any[]) | (() => Promise<any[]>) | AXDataSource<any>;
122
+ valueField?: string;
123
+ textField?: string;
124
+ placeholder?: AXPMultiLanguageString;
125
+ multiple?: boolean;
126
+ searchable?: boolean;
127
+ clearButton?: boolean;
128
+ allowSearch?: boolean;
129
+ }
130
+ interface DateTimeBoxOptions extends ValueWidgetOptions {
131
+ type?: 'date' | 'time' | 'datetime';
132
+ format?: string;
133
+ min?: Date | string;
134
+ max?: Date | string;
135
+ placeholder?: AXPMultiLanguageString;
136
+ clearButton?: boolean;
137
+ }
138
+ interface ToggleSwitchOptions extends ValueWidgetOptions {
139
+ label?: string;
140
+ trueText?: string;
141
+ falseText?: string;
142
+ }
143
+ interface LargeTextBoxOptions extends ValueWidgetOptions {
144
+ rows?: number;
145
+ maxLength?: number;
146
+ minLength?: number;
147
+ placeholder?: AXPMultiLanguageString;
148
+ resizable?: boolean;
149
+ }
150
+ interface ColorBoxOptions extends ValueWidgetOptions {
151
+ format?: 'hex' | 'rgb' | 'hsl';
152
+ showAlpha?: boolean;
153
+ showPalette?: boolean;
154
+ }
155
+ interface AXPFlexContainerOptions extends LayoutWidgetOptions {
156
+ flexDirection?: 'row' | 'column' | 'row-reverse' | 'column-reverse';
157
+ flexWrap?: 'nowrap' | 'wrap' | 'wrap-reverse';
158
+ justifyContent?: 'flex-start' | 'flex-end' | 'center' | 'space-between' | 'space-around' | 'space-evenly';
159
+ alignItems?: 'flex-start' | 'flex-end' | 'center' | 'baseline' | 'stretch';
160
+ gap?: string;
161
+ spacing?: {
162
+ padding?: string;
163
+ margin?: string;
164
+ };
165
+ border?: {
166
+ radius?: string;
167
+ width?: string;
168
+ color?: string;
169
+ style?: string;
170
+ };
171
+ backgroundColor?: string;
172
+ direction?: string;
173
+ overflow?: string;
174
+ overflowX?: string;
175
+ overflowY?: string;
176
+ width?: string;
177
+ minWidth?: string;
178
+ maxWidth?: string;
179
+ height?: string;
180
+ minHeight?: string;
181
+ maxHeight?: string;
182
+ }
183
+ interface AXPGridContainerOptions extends LayoutWidgetOptions {
184
+ grid?: {
185
+ default?: {
186
+ columns?: number;
187
+ rows?: number;
188
+ gap?: string;
189
+ justifyItems?: string;
190
+ alignItems?: string;
191
+ autoFlow?: string;
192
+ };
193
+ };
194
+ spacing?: {
195
+ padding?: string;
196
+ margin?: string;
197
+ };
198
+ border?: {
199
+ radius?: string;
200
+ width?: string;
201
+ color?: string;
202
+ style?: string;
203
+ };
204
+ backgroundColor?: string;
205
+ direction?: string;
206
+ overflow?: string;
207
+ overflowX?: string;
208
+ overflowY?: string;
209
+ width?: string;
210
+ minWidth?: string;
211
+ maxWidth?: string;
212
+ height?: string;
213
+ minHeight?: string;
214
+ maxHeight?: string;
215
+ }
216
+ interface AXPPanelContainerOptions extends LayoutWidgetOptions {
217
+ caption?: string;
218
+ icon?: string;
219
+ look?: 'solid' | 'fill' | 'outline' | 'flat' | 'none';
220
+ disabled?: boolean;
221
+ showHeader?: boolean;
222
+ collapsed?: boolean;
223
+ }
224
+ interface AXPPageContainerOptions extends LayoutWidgetOptions {
225
+ backgroundColor?: string;
226
+ theme?: {
227
+ id: string;
228
+ };
229
+ hasHeader?: boolean;
230
+ hasFooter?: boolean;
231
+ direction?: string;
232
+ }
233
+ interface AXPTabsetContainerOptions extends LayoutWidgetOptions {
234
+ look?: 'with-line' | 'with-line-color' | 'pills' | 'pills-color';
235
+ orientation?: 'vertical' | 'horizontal';
236
+ activeIndex?: number;
237
+ }
238
+ interface AXPFieldsetContainerOptions extends LayoutWidgetOptions {
239
+ title?: string;
240
+ description?: string;
241
+ icon?: string;
242
+ collapsible?: boolean;
243
+ isOpen?: boolean;
244
+ look?: 'fieldset' | 'card' | 'group' | 'container';
245
+ disabled?: boolean;
246
+ showTitle?: boolean;
247
+ showHeader?: boolean;
248
+ cols?: number;
249
+ }
250
+ /** How optional `hint` text is rendered in `form-field` layout widgets. */
251
+ type AXPFormFieldHintDisplayMode = 'icon' | 'note';
252
+ interface AXPFormFieldOptions extends LayoutWidgetOptions {
253
+ label?: string;
254
+ showLabel?: boolean;
255
+ /** Translated/helper copy; pairing with {@link hintDisplayMode}. */
256
+ hint?: AXPMultiLanguageString;
257
+ hintDisplayMode?: AXPFormFieldHintDisplayMode;
258
+ }
259
+ interface AXPDialogCloseConfirmationOptions {
260
+ /** When false, dirty-close confirmation is disabled even if the builder flag is set. */
261
+ enabled?: boolean;
262
+ title?: AXPMultiLanguageString;
263
+ message?: AXPMultiLanguageString;
264
+ /** Custom dirty check; defaults to user-origin context paths plus composite widget `api().isDirty()`. */
265
+ isDirty?: (context: Record<string, unknown>, baseline: Record<string, unknown>) => boolean;
266
+ }
267
+ interface AXPDialogContainerOptions extends LayoutWidgetOptions {
268
+ title?: string;
269
+ message?: string;
270
+ size?: AXPopupSizeType;
271
+ closeButton?: boolean;
272
+ context?: any;
273
+ metadata?: AXPMetaData;
274
+ /**
275
+ * When enabled, prompts before dismiss (cancel, Esc, header close) if dialog context is dirty.
276
+ * Set via {@link IDialogBuilder.confirmCloseWhenDirty}.
277
+ */
278
+ confirmCloseWhenDirty?: boolean | AXPDialogCloseConfirmationOptions;
279
+ /**
280
+ * When set, invoked on footer action with {@link AXPDialogRef}.
281
+ * Set via {@link IDialogBuilder.onAction}.
282
+ */
283
+ onAction?: (dialogRef: AXPDialogRef) => unknown | Promise<unknown>;
284
+ }
285
+ /**
286
+ * Popup payload for `AXPDialogRendererComponent` (`data.config`) and the `layout-builder.dialog.config` hook.
287
+ */
288
+ interface AXPLayoutBuilderDialogConfig {
289
+ title: string;
290
+ context: Record<string, unknown>;
291
+ definition: AXPWidgetNode;
292
+ metadata?: AXPMetaData;
293
+ actions: NonNullable<DialogBuilderState['actions']>;
294
+ onAction?: (dialogRef: AXPDialogRef) => unknown | Promise<unknown>;
295
+ confirmCloseWhenDirty?: AXPDialogCloseConfirmationOptions;
296
+ }
297
+ interface RichTextOptions extends ValueWidgetOptions {
298
+ placeholder?: AXPMultiLanguageString;
299
+ toolbar?: string[];
300
+ readonly?: boolean;
301
+ /** Max height (px) for scrollable full preview when `showFullContent` is true. */
302
+ height?: number;
303
+ /** When true, view mode renders full HTML in a scrollable area instead of a truncated snippet. */
304
+ showFullContent?: boolean;
305
+ }
306
+ interface PasswordBoxOptions extends ValueWidgetOptions {
307
+ placeholder?: AXPMultiLanguageString;
308
+ revealToggle?: boolean;
309
+ maxLength?: number;
310
+ }
311
+ interface LookupBoxOptions extends ValueWidgetOptions {
312
+ dataSource?: any[] | (() => any[]) | (() => Promise<any[]>);
313
+ valueField?: string;
314
+ textField?: string;
315
+ searchable?: boolean;
316
+ entity?: string;
317
+ look?: string;
318
+ columns?: any[];
319
+ expose?: any[];
320
+ multiple?: boolean;
321
+ allowClear?: boolean;
322
+ }
323
+ interface SelectionListOptions extends ValueWidgetOptions {
324
+ dataSource: any[] | (() => any[]) | (() => Promise<any[]>) | AXDataSource<any>;
325
+ valueField?: string;
326
+ textField?: string;
327
+ multiple?: boolean;
328
+ searchable?: boolean;
329
+ placeholder?: AXPMultiLanguageString;
330
+ }
331
+ interface AXPListWidgetColumn {
332
+ name: string;
333
+ title?: string;
334
+ visible?: boolean;
335
+ width?: string;
336
+ widget?: {
337
+ type: string;
338
+ path?: string;
339
+ options?: any;
340
+ };
341
+ }
342
+ interface AXPListWidgetRowCommand {
343
+ title?: string;
344
+ icon?: string;
345
+ color?: string;
346
+ disabled?: boolean | string;
347
+ hidden?: boolean | string;
348
+ command?: any;
349
+ }
350
+ interface AXPListWidgetOptions extends LayoutWidgetOptions {
351
+ dataSource?: any[] | AXDataSource;
352
+ columns?: AXPListWidgetColumn[];
353
+ onRowClick?: (row: any) => void;
354
+ onRowDoubleClick?: (row: any) => void;
355
+ onSelectionChange?: (selectedRows: any[]) => void;
356
+ onRowCommand?: (command: any, selectedRows: any[]) => void;
357
+ paging?: boolean;
358
+ showHeader?: boolean;
359
+ showFooter?: boolean;
360
+ fixHeader?: boolean;
361
+ fixFooter?: boolean;
362
+ fetchDataMode?: 'auto' | 'manual';
363
+ parentField?: string;
364
+ minHeight?: string | number;
365
+ showIndex?: boolean;
366
+ allowSelection?: boolean;
367
+ primaryCommands?: any[];
368
+ secondaryCommands?: AXPListWidgetRowCommand[];
369
+ loading?: {
370
+ enabled?: boolean;
371
+ animation?: boolean;
372
+ };
373
+ }
374
+ interface AXPWizardActionDefinition {
375
+ title?: string;
376
+ icon?: string;
377
+ color?: string;
378
+ }
379
+ interface AXPWizardActions {
380
+ previous?: AXPWizardActionDefinition;
381
+ next?: AXPWizardActionDefinition;
382
+ submit?: AXPWizardActionDefinition;
383
+ }
384
+ interface AXPStepDefinition {
385
+ id: string;
386
+ title: string;
387
+ description?: string;
388
+ icon?: string;
389
+ skippable?: boolean;
390
+ content: AXPWidgetNode;
391
+ actions?: AXPActionMenuItem[];
392
+ }
393
+ interface AXPStepWizardGuardPayload {
394
+ step: AXPStepDefinition;
395
+ index: number;
396
+ total: number;
397
+ isFirst: boolean;
398
+ isLast: boolean;
399
+ context: any;
400
+ stepContext?: any;
401
+ dialogContext?: any;
402
+ }
403
+ interface AXPStepWizardStatus {
404
+ currentStep: AXPStepDefinition;
405
+ index: number;
406
+ total: number;
407
+ isFirst: boolean;
408
+ isLast: boolean;
409
+ }
410
+ interface AXPStepWizardDefinition {
411
+ steps: AXPStepDefinition[];
412
+ linear?: boolean;
413
+ direction?: 'horizontal' | 'vertical';
414
+ look?: string;
415
+ showActions?: boolean;
416
+ actions?: AXPWizardActions;
417
+ guards?: {
418
+ next?: (payload: AXPStepWizardGuardPayload) => boolean | Promise<boolean>;
419
+ prev?: (payload: AXPStepWizardGuardPayload) => boolean | Promise<boolean>;
420
+ };
421
+ events?: {
422
+ onStepChanged?: (status: AXPStepWizardStatus) => void;
423
+ onComplete?: (status: AXPStepWizardStatus) => void;
424
+ };
425
+ }
426
+ interface AXPStepWizardContainerOptions extends LayoutWidgetOptions {
427
+ definition?: AXPStepWizardDefinition;
428
+ }
429
+ interface InheritanceContext {
430
+ mode?: AXPWidgetRenderMode;
431
+ disabled?: boolean | string;
432
+ readonly?: boolean | string;
433
+ direction?: 'rtl' | 'ltr';
434
+ visible?: boolean | string;
435
+ defaultValue?: any;
436
+ }
437
+ interface InheritedProperties {
438
+ mode: AXPWidgetRenderMode;
439
+ disabled: boolean | string | undefined;
440
+ readonly: boolean | string | undefined;
441
+ direction: 'rtl' | 'ltr' | undefined;
442
+ visible: boolean | string | undefined;
443
+ }
444
+ interface AXPWidgetConfiguration {
445
+ type: string;
446
+ options?: AXPOptionsData;
447
+ }
448
+ type LayoutBuilderState = AXPWidgetNode;
449
+ type WidgetBuilderState = AXPWidgetNode & {
450
+ layout?: AXPGridLayoutOptions;
451
+ };
452
+ type FormFieldBuilderState = AXPWidgetNode & {
453
+ layout?: AXPGridLayoutOptions;
454
+ };
455
+ /** Dialog footer action item; extends menu actions with placement. */
456
+ type AXPDialogActionMenuItem = AXPActionMenuItem & {
457
+ position?: 'prefix' | 'suffix';
458
+ };
459
+ type DialogBuilderState = AXPWidgetNode & {
460
+ layout?: AXPGridLayoutOptions;
461
+ dialogOptions?: AXPDialogContainerOptions;
462
+ actions?: {
463
+ footer?: {
464
+ prefix?: AXPDialogActionMenuItem[];
465
+ suffix?: AXPDialogActionMenuItem[];
466
+ };
467
+ };
468
+ };
469
+ interface IActionBuilder {
470
+ cancel(text?: string, options?: AXPDialogActionOptions): IActionBuilder;
471
+ submit(text?: string, options?: AXPDialogActionOptions): IActionBuilder;
472
+ custom(action: AXPDialogActionMenuItem, options?: AXPDialogActionOptions): IActionBuilder;
473
+ }
474
+ interface ILayoutBuilder {
475
+ grid(delegate: (container: IGridContainerBuilder) => void): ILayoutBuilder;
476
+ flex(delegate: (container: IFlexContainerBuilder) => void): ILayoutBuilder;
477
+ panel(delegate: (container: IPanelContainerBuilder) => void): ILayoutBuilder;
478
+ page(delegate: (container: IPageContainerBuilder) => void): ILayoutBuilder;
479
+ tabset(delegate: (container: ITabsetContainerBuilder) => void): ILayoutBuilder;
480
+ fieldset(delegate: (container: IFieldsetContainerBuilder) => void): ILayoutBuilder;
481
+ dialog<T = AXPDialogRef>(delegate: (container: IDialogBuilder<T>) => void): IDialogBuilder<T>;
482
+ stepWizard(delegate: (wizard: IStepWizardBuilder) => void): ILayoutBuilder;
483
+ build(): AXPWidgetNode;
484
+ toJson(options?: {
485
+ removeMeta?: boolean;
486
+ removeFunctions?: boolean;
487
+ pretty?: boolean;
488
+ }): string;
489
+ }
490
+ interface IWidgetBuilder {
491
+ name(name: string): IWidgetBuilder;
492
+ path(path: string): IWidgetBuilder;
493
+ type(type: string): IWidgetBuilder;
494
+ options(options: AXPOptionsData): IWidgetBuilder;
495
+ layout(config: Partial<AXPGridLayoutOptions>): IWidgetBuilder;
496
+ layout(colSpan: number): IWidgetBuilder;
497
+ mode(mode: AXPWidgetRenderMode): IWidgetBuilder;
498
+ visible(condition: boolean | string): IWidgetBuilder;
499
+ disabled(condition: boolean | string): IWidgetBuilder;
500
+ readonly(condition: boolean | string): IWidgetBuilder;
501
+ defaultValue(defaultValue: any): IWidgetBuilder;
502
+ direction(direction: 'rtl' | 'ltr'): IWidgetBuilder;
503
+ withInheritanceContext(context: InheritanceContext): IWidgetBuilder;
504
+ getInheritanceContext(): InheritanceContext;
505
+ build(): AXPWidgetNode;
506
+ }
507
+ interface IBaseContainerBuilder<TContainer = any> {
508
+ name(name: string): TContainer;
509
+ path(path: string): TContainer;
510
+ mode(mode: AXPWidgetRenderMode): TContainer;
511
+ visible(condition: boolean | AXPExpression): TContainer;
512
+ disabled(condition: boolean | AXPExpression): TContainer;
513
+ readonly(condition: boolean | AXPExpression): TContainer;
514
+ direction(direction: 'rtl' | 'ltr'): TContainer;
515
+ withInheritanceContext(context: InheritanceContext): TContainer;
516
+ getInheritanceContext(): InheritanceContext;
517
+ build(): AXPWidgetNode;
518
+ }
519
+ interface ILayoutContainerBuilder<TContainer = any> {
520
+ layout(config: Partial<AXPGridLayoutOptions>): TContainer;
521
+ layout(colSpan: number): TContainer;
522
+ }
523
+ interface IChildContainerBuilder<TContainer = any> {
524
+ grid(delegate: (container: IGridContainerBuilder) => void): TContainer;
525
+ flex(delegate: (container: IFlexContainerBuilder) => void): TContainer;
526
+ panel(delegate: (container: IPanelContainerBuilder) => void): TContainer;
527
+ page(delegate: (container: IPageContainerBuilder) => void): TContainer;
528
+ tabset(delegate: (container: ITabsetContainerBuilder) => void): TContainer;
529
+ fieldset(delegate: (container: IFieldsetContainerBuilder) => void): TContainer;
530
+ formField(label: string, delegate?: (field: IFormFieldBuilder) => void): TContainer;
531
+ stepWizard(delegate: (wizard: IStepWizardBuilder) => void): TContainer;
532
+ dynamicForm(definition: AXPDynamicFormDefinition): TContainer;
533
+ }
534
+ interface IWidgetContainerBuilder<TContainer = any> {
535
+ textBox(options?: TextBoxOptions): TContainer;
536
+ largeTextBox(options?: LargeTextBoxOptions): TContainer;
537
+ richText(options?: RichTextOptions): TContainer;
538
+ passwordBox(options?: PasswordBoxOptions): TContainer;
539
+ numberBox(options?: NumberBoxOptions): TContainer;
540
+ selectBox(options: SelectBoxOptions): TContainer;
541
+ lookupBox(options: LookupBoxOptions): TContainer;
542
+ selectionList(options: SelectionListOptions): TContainer;
543
+ dateTimeBox(options?: DateTimeBoxOptions): TContainer;
544
+ toggleSwitch(options?: ToggleSwitchOptions): TContainer;
545
+ colorBox(options?: ColorBoxOptions): TContainer;
546
+ list(delegate: (container: IListWidgetBuilder) => void): TContainer;
547
+ customWidget<T>(type: string, options?: T): TContainer;
548
+ customWidget<T>(type: string, delegate: (widget: IWidgetBuilder) => void): TContainer;
549
+ }
550
+ interface IFlexContainerBuilder extends IBaseContainerBuilder<IFlexContainerBuilder>, ILayoutContainerBuilder<IFlexContainerBuilder>, IChildContainerBuilder<IFlexContainerBuilder>, IWidgetContainerBuilder<IFlexContainerBuilder> {
551
+ setOptions(options: AXPFlexContainerOptions): IFlexContainerBuilder;
552
+ setDirection(direction: 'row' | 'column' | 'row-reverse' | 'column-reverse'): IFlexContainerBuilder;
553
+ setWrap(wrap: 'nowrap' | 'wrap' | 'wrap-reverse'): IFlexContainerBuilder;
554
+ setJustifyContent(justify: 'flex-start' | 'flex-end' | 'center' | 'space-between' | 'space-around' | 'space-evenly'): IFlexContainerBuilder;
555
+ setAlignItems(align: 'flex-start' | 'flex-end' | 'center' | 'baseline' | 'stretch'): IFlexContainerBuilder;
556
+ setGap(gap: string): IFlexContainerBuilder;
557
+ setBackgroundColor(color: string): IFlexContainerBuilder;
558
+ setPadding(padding: string): IFlexContainerBuilder;
559
+ setMargin(margin: string): IFlexContainerBuilder;
560
+ }
561
+ interface IGridContainerBuilder extends IBaseContainerBuilder<IGridContainerBuilder>, ILayoutContainerBuilder<IGridContainerBuilder>, IChildContainerBuilder<IGridContainerBuilder>, IWidgetContainerBuilder<IGridContainerBuilder> {
562
+ setOptions(options: AXPGridContainerOptions): IGridContainerBuilder;
563
+ setColumns(columns: number): IGridContainerBuilder;
564
+ setRows(rows: number): IGridContainerBuilder;
565
+ setGap(gap: string): IGridContainerBuilder;
566
+ setJustifyItems(justify: 'start' | 'end' | 'center' | 'stretch'): IGridContainerBuilder;
567
+ setAlignItems(align: 'start' | 'end' | 'center' | 'stretch'): IGridContainerBuilder;
568
+ setAutoFlow(flow: 'row' | 'column' | 'row dense' | 'column dense'): IGridContainerBuilder;
569
+ setBackgroundColor(color: string): IGridContainerBuilder;
570
+ setPadding(padding: string): IGridContainerBuilder;
571
+ setMargin(margin: string): IGridContainerBuilder;
572
+ /** Add a grid-item-layout child with optional placement; delegate builds the fieldset content. */
573
+ item(layoutOptions: Partial<AXPGridLayoutOptions> | null | undefined, delegate: (container: IFieldsetContainerBuilder) => void): IGridContainerBuilder;
574
+ }
575
+ interface IPanelContainerBuilder extends IBaseContainerBuilder<IPanelContainerBuilder>, ILayoutContainerBuilder<IPanelContainerBuilder>, IChildContainerBuilder<IPanelContainerBuilder>, IWidgetContainerBuilder<IPanelContainerBuilder> {
576
+ setOptions(options: AXPPanelContainerOptions): IPanelContainerBuilder;
577
+ setCaption(caption: string): IPanelContainerBuilder;
578
+ setIcon(icon: string): IPanelContainerBuilder;
579
+ setLook(look: 'solid' | 'fill' | 'outline' | 'flat' | 'none'): IPanelContainerBuilder;
580
+ setShowHeader(show: boolean): IPanelContainerBuilder;
581
+ setCollapsed(collapsed: boolean): IPanelContainerBuilder;
582
+ }
583
+ interface IPageContainerBuilder extends IBaseContainerBuilder<IPageContainerBuilder>, ILayoutContainerBuilder<IPageContainerBuilder>, IChildContainerBuilder<IPageContainerBuilder>, IWidgetContainerBuilder<IPageContainerBuilder> {
584
+ setOptions(options: AXPPageContainerOptions): IPageContainerBuilder;
585
+ setBackgroundColor(color: string): IPageContainerBuilder;
586
+ setTheme(theme: {
587
+ id: string;
588
+ }): IPageContainerBuilder;
589
+ setHasHeader(hasHeader: boolean): IPageContainerBuilder;
590
+ setHasFooter(hasFooter: boolean): IPageContainerBuilder;
591
+ setDirection(direction: 'rtl' | 'ltr'): IPageContainerBuilder;
592
+ }
593
+ interface ITabsetContainerBuilder extends IBaseContainerBuilder<ITabsetContainerBuilder>, ILayoutContainerBuilder<ITabsetContainerBuilder>, IChildContainerBuilder<ITabsetContainerBuilder>, IWidgetContainerBuilder<ITabsetContainerBuilder> {
594
+ setOptions(options: AXPTabsetContainerOptions): ITabsetContainerBuilder;
595
+ setLook(look: 'with-line' | 'with-line-color' | 'pills' | 'pills-color'): ITabsetContainerBuilder;
596
+ setOrientation(orientation: 'vertical' | 'horizontal'): ITabsetContainerBuilder;
597
+ setActiveIndex(index: number): ITabsetContainerBuilder;
598
+ }
599
+ interface IFormFieldBuilder extends IBaseContainerBuilder<IFormFieldBuilder>, ILayoutContainerBuilder<IFormFieldBuilder> {
600
+ setOptions(options: AXPFormFieldOptions): IFormFieldBuilder;
601
+ setLabel(label: string): IFormFieldBuilder;
602
+ setShowLabel(showLabel: boolean): IFormFieldBuilder;
603
+ defaultValue(value: any): IFormFieldBuilder;
604
+ textBox(options?: Omit<TextBoxOptions, 'path'>): IFormFieldBuilder;
605
+ largeTextBox(options?: Omit<LargeTextBoxOptions, 'path'>): IFormFieldBuilder;
606
+ richText(options?: Omit<RichTextOptions, 'path'>): IFormFieldBuilder;
607
+ passwordBox(options?: Omit<PasswordBoxOptions, 'path'>): IFormFieldBuilder;
608
+ numberBox(options?: Omit<NumberBoxOptions, 'path'>): IFormFieldBuilder;
609
+ selectBox(options: Omit<SelectBoxOptions, 'path'>): IFormFieldBuilder;
610
+ lookupBox(options: Omit<LookupBoxOptions, 'path'>): IFormFieldBuilder;
611
+ selectionList(options: Omit<SelectionListOptions, 'path'>): IFormFieldBuilder;
612
+ dateTimeBox(options?: Omit<DateTimeBoxOptions, 'path'>): IFormFieldBuilder;
613
+ toggleSwitch(options?: Omit<ToggleSwitchOptions, 'path'>): IFormFieldBuilder;
614
+ colorBox(options?: Omit<ColorBoxOptions, 'path'>): IFormFieldBuilder;
615
+ customWidget<T>(type: string, options?: Omit<T, 'path'>): IFormFieldBuilder;
616
+ customWidget<T>(type: string, options?: Omit<T, 'path'> & Partial<AXPWidgetNodeExtendedProperties>): IFormFieldBuilder;
617
+ }
618
+ interface IFieldsetContainerBuilder extends IBaseContainerBuilder<IFieldsetContainerBuilder>, ILayoutContainerBuilder<IFieldsetContainerBuilder> {
619
+ setOptions(options: AXPFieldsetContainerOptions): IFieldsetContainerBuilder;
620
+ setTitle(title: string): IFieldsetContainerBuilder;
621
+ setDescription(description: string): IFieldsetContainerBuilder;
622
+ setIcon(icon: string): IFieldsetContainerBuilder;
623
+ setCollapsible(collapsible: boolean): IFieldsetContainerBuilder;
624
+ setIsOpen(isOpen: boolean): IFieldsetContainerBuilder;
625
+ setLook(look: 'fieldset' | 'card' | 'group' | 'container'): IFieldsetContainerBuilder;
626
+ setShowHeader(showHeader: boolean): IFieldsetContainerBuilder;
627
+ setCols(cols: number): IFieldsetContainerBuilder;
628
+ formField(label: string, delegate?: (field: IFormFieldBuilder) => void): IFieldsetContainerBuilder;
629
+ }
630
+ interface IDialogBuilder<T = AXPDialogRef> {
631
+ }
632
+ interface IDialogBuilder<T = AXPDialogRef> {
633
+ setOptions(options: AXPDialogContainerOptions): IDialogBuilder<T>;
634
+ setTitle(title: string): IDialogBuilder<T>;
635
+ setMessage(message?: string): IDialogBuilder<T>;
636
+ setSize(size: AXPopupSizeType): IDialogBuilder<T>;
637
+ setCloseButton(closeButton: boolean): IDialogBuilder<T>;
638
+ setContext(context: any): IDialogBuilder<T>;
639
+ content(delegate: (layoutBuilder: IFlexContainerBuilder) => void): IDialogBuilder<T>;
640
+ setActions(delegate?: (actions: IActionBuilder) => void): IDialogBuilder<T>;
641
+ /**
642
+ * Handler invoked when user clicks an action. Receives AXPDialogRef (context, action, setLoading, close).
643
+ * If handler throws, dialog stays open for retry.
644
+ * If handler returns, dialog closes and show() resolves with the return value.
645
+ */
646
+ onAction(handler: (dialogRef: AXPDialogRef) => T | Promise<T>): IDialogBuilder<T>;
647
+ /**
648
+ * Prompts for confirmation before dismiss when the dialog context is dirty (cancel, Esc, header close).
649
+ */
650
+ confirmCloseWhenDirty(options?: boolean | AXPDialogCloseConfirmationOptions): IDialogBuilder<T>;
651
+ addCustomAction(action: AXPActionMenuItem): IDialogBuilder<T>;
652
+ build(): AXPWidgetNode;
653
+ show(): Promise<T>;
654
+ }
655
+ interface IListWidgetBuilder extends IBaseContainerBuilder<IListWidgetBuilder>, ILayoutContainerBuilder<IListWidgetBuilder>, IChildContainerBuilder<IListWidgetBuilder>, IWidgetContainerBuilder<IListWidgetBuilder> {
656
+ setOptions(options: AXPListWidgetOptions): IListWidgetBuilder;
657
+ setDataSource(dataSource: any[] | AXDataSource): IListWidgetBuilder;
658
+ setColumns(columns: AXPListWidgetColumn[]): IListWidgetBuilder;
659
+ setOnRowClick(handler: (row: any) => void): IListWidgetBuilder;
660
+ setOnRowDoubleClick(handler: (row: any) => void): IListWidgetBuilder;
661
+ setOnSelectionChange(handler: (selectedRows: any[]) => void): IListWidgetBuilder;
662
+ setOnRowCommand(handler: (command: any, selectedRows: any[]) => void): IListWidgetBuilder;
663
+ setPaging(paging: boolean): IListWidgetBuilder;
664
+ setShowHeader(show: boolean): IListWidgetBuilder;
665
+ setShowFooter(show: boolean): IListWidgetBuilder;
666
+ setFixHeader(fix: boolean): IListWidgetBuilder;
667
+ setFixFooter(fix: boolean): IListWidgetBuilder;
668
+ setFetchDataMode(mode: 'auto' | 'manual'): IListWidgetBuilder;
669
+ setParentField(field: string): IListWidgetBuilder;
670
+ setMinHeight(height: string | number): IListWidgetBuilder;
671
+ setShowIndex(show: boolean): IListWidgetBuilder;
672
+ setAllowSelection(allow: boolean): IListWidgetBuilder;
673
+ setPrimaryCommands(commands: any[]): IListWidgetBuilder;
674
+ setSecondaryCommands(commands: AXPListWidgetRowCommand[]): IListWidgetBuilder;
675
+ setLoading(loading: {
676
+ enabled?: boolean;
677
+ animation?: boolean;
678
+ }): IListWidgetBuilder;
679
+ }
680
+ interface IStepBuilder {
681
+ setIcon(icon: string): IStepBuilder;
682
+ setDescription(description: string): IStepBuilder;
683
+ setSkippable(skippable: boolean): IStepBuilder;
684
+ content(delegate: (layoutBuilder: ILayoutBuilder) => void): IStepBuilder;
685
+ build(): AXPStepDefinition;
686
+ }
687
+ interface IStepWizardBuilder extends IBaseContainerBuilder<IStepWizardBuilder>, ILayoutContainerBuilder<IStepWizardBuilder> {
688
+ setLinear(linear: boolean): IStepWizardBuilder;
689
+ setDirection(direction: 'horizontal' | 'vertical'): IStepWizardBuilder;
690
+ setLook(look: AXStepWizardLook): IStepWizardBuilder;
691
+ setShowActions(show: boolean): IStepWizardBuilder;
692
+ setActions(actions: AXPWizardActions): IStepWizardBuilder;
693
+ setGuards(guards: {
694
+ next?: (payload: AXPStepWizardGuardPayload) => boolean | Promise<boolean>;
695
+ prev?: (payload: AXPStepWizardGuardPayload) => boolean | Promise<boolean>;
696
+ }): IStepWizardBuilder;
697
+ setEvents(events: {
698
+ onStepChanged?: (status: AXPStepWizardStatus) => void;
699
+ onComplete?: (status: AXPStepWizardStatus) => void;
700
+ }): IStepWizardBuilder;
701
+ step(id: string, title: string, delegate: (step: IStepBuilder) => void): IStepWizardBuilder;
702
+ }
703
+
704
+ declare class AXPLayoutRendererComponent implements OnInit {
705
+ #private;
706
+ private conversionService;
707
+ /**
708
+ * RxJS subjects for context management
709
+ */
710
+ private contextUpdateSubject;
711
+ private contextChangeSubject;
712
+ /**
713
+ * Form definition containing groups and fields OR widget tree
714
+ */
715
+ layout: _angular_core.InputSignal<AXPWidgetNode | AXPDynamicFormDefinition>;
716
+ /**
717
+ * Form context/model data
718
+ */
719
+ context: _angular_core.ModelSignal<any>;
720
+ /**
721
+ * Form appearance and density styling (normal, compact, spacious)
722
+ */
723
+ look: _angular_core.InputSignal<AXPDynamicFormLook>;
724
+ /**
725
+ * Default form mode. Can be overridden by section/group and field.
726
+ */
727
+ mode: _angular_core.InputSignal<AXPDynamicFormMode>;
728
+ protected widgetTree: _angular_core.WritableSignal<AXPWidgetNode | null>;
729
+ /**
730
+ * Prefer explicit {@link AXPWidgetNode.mode} on the root node (e.g. dialog flex `mode('view')`)
731
+ * so nested widgets resolve view vs edit correctly; fall back to the layout `mode` input.
732
+ */
733
+ protected effectiveRenderMode: _angular_core.Signal<"view" | "edit" | "column" | "designer" | "print" | "filter">;
734
+ /**
735
+ * Convert layout data to widget tree when inputs change
736
+ */
737
+ conversionEffect: _angular_core.EffectRef;
738
+ /**
739
+ * Emitted when context change is initiated
740
+ */
741
+ contextInitiated: _angular_core.OutputEmitterRef<any>;
742
+ /**
743
+ * Emitted when form becomes valid/invalid
744
+ */
745
+ validityChange: _angular_core.OutputEmitterRef<boolean>;
746
+ private form;
747
+ private container;
748
+ /**
749
+ * Internal context signal for reactivity
750
+ */
751
+ protected internalContext: _angular_core.WritableSignal<any>;
752
+ /**
753
+ * Initial context for reset functionality
754
+ */
755
+ private initialContext;
756
+ ngOnInit(): void;
757
+ /**
758
+ * Handle context change events from widget container (optimized with RxJS)
759
+ */
760
+ protected handleContextChanged(event: AXPContextChangeEvent): void;
761
+ /**
762
+ * Get the form component instance
763
+ */
764
+ getForm(): AXFormComponent | undefined;
765
+ /**
766
+ * Get the widget container component instance
767
+ */
768
+ getContainer(): AXPWidgetContainerComponent | undefined;
769
+ /**
770
+ * Get current form context
771
+ */
772
+ getContext(): any;
773
+ /**
774
+ * Update form context programmatically
775
+ */
776
+ updateContext(context: any): void;
777
+ /**
778
+ * Get the current widget tree
779
+ */
780
+ getWidgetTree(): AXPWidgetNode | null;
781
+ /**
782
+ * Validate the form
783
+ */
784
+ validate(): Promise<AXValidationSummary>;
785
+ /**
786
+ * Clear the form context
787
+ */
788
+ clear(): void;
789
+ /**
790
+ * Reset the form to its initial state
791
+ */
792
+ reset(): void;
793
+ /**
794
+ * Setup RxJS streams for context management
795
+ */
796
+ private setupContextStreams;
797
+ /**
798
+ * Type guard to check if the input is a form definition
799
+ */
800
+ private isFormDefinition;
801
+ /**
802
+ * Type guard to check if the input is a widget node
803
+ */
804
+ private isWidgetNode;
805
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPLayoutRendererComponent, never>;
806
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPLayoutRendererComponent, "axp-layout-renderer", never, { "layout": { "alias": "layout"; "required": true; "isSignal": true; }; "context": { "alias": "context"; "required": false; "isSignal": true; }; "look": { "alias": "look"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; }, { "context": "contextChange"; "contextInitiated": "contextInitiated"; "validityChange": "validityChange"; }, never, never, true, never>;
807
+ }
808
+
809
+ declare class LayoutBuilderModule {
810
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LayoutBuilderModule, never>;
811
+ static ɵmod: _angular_core.ɵɵNgModuleDeclaration<LayoutBuilderModule, never, [typeof i1.CommonModule, typeof AXPLayoutRendererComponent], [typeof AXPLayoutRendererComponent]>;
812
+ static ɵinj: _angular_core.ɵɵInjectorDeclaration<LayoutBuilderModule>;
813
+ }
814
+
815
+ /**
816
+ * Runs after dialog options and context are prepared and **before** footer customization and popup open.
817
+ * Listeners may mutate {@link AXPLayoutBuilderDialogBeforeOpenPayload.context} by reference.
818
+ */
819
+ declare const AXP_LAYOUT_BUILDER_DIALOG_BEFORE_OPEN_HOOK_KEY = "layout-builder.dialog.before-open";
820
+ interface AXPLayoutBuilderDialogBeforeOpenPayload {
821
+ context: Record<string, unknown>;
822
+ dialogOptions: AXPDialogContainerOptions;
823
+ }
824
+ /**
825
+ * Runs after builder-defined footer actions exist and **before** the dialog opens.
826
+ * Listeners receive the live `actions.footer.prefix` / `suffix` arrays (same references as the dialog)
827
+ * so they may push, splice, filter, or replace items. They may also mutate {@link AXPLayoutBuilderDialogFooterPayload.context} by reference.
828
+ */
829
+ declare const AXP_LAYOUT_BUILDER_DIALOG_CONFIG_HOOK_KEY = "layout-builder.dialog.config";
830
+ /**
831
+ * Runs whenever the dialog layout builder context changes (debounced upstream), **after** the popup is visible.
832
+ * Use for side effects that depend on live context (for example values updated by widgets after render).
833
+ * Payload mirrors `AXPDialogRendererComponent` semantics: {@link AXPLayoutBuilderDialogContextChangedPayload.getContext},
834
+ * {@link AXPLayoutBuilderDialogContextChangedPayload.patchContext}, and optional loading state.
835
+ */
836
+ declare const AXP_LAYOUT_BUILDER_DIALOG_CONTEXT_CHANGED_HOOK_KEY = "layout-builder.dialog.context-changed";
837
+ interface AXPLayoutBuilderDialogContextChangedPayload {
838
+ /** Stable id for this dialog instance; lets listeners correlate repeated emissions or async follow-up work. */
839
+ sessionKey: string;
840
+ getContext: () => Record<string, unknown>;
841
+ metadata: Record<string, unknown> | undefined;
842
+ patchContext: (partial: Record<string, unknown>) => void;
843
+ setLoading: (loading: boolean) => void;
844
+ }
845
+
846
+ declare class AXPLayoutBuilderService {
847
+ private popupService;
848
+ private readonly hookService;
849
+ /**
850
+ * Create a new layout builder
851
+ */
852
+ create(): ILayoutBuilder;
853
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPLayoutBuilderService, never>;
854
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPLayoutBuilderService>;
855
+ }
856
+
857
+ declare class AXPLayoutConversionService {
858
+ private widgetTreeCache;
859
+ private formDefinitionCache;
860
+ /**
861
+ * Convert AXPDynamicFormDefinition to AXPWidgetNode tree structure
862
+ * Groups become Fieldset Layouts with Form Field widgets as children
863
+ * Fields become Form Field widgets with Editor widgets as children
864
+ */
865
+ convertFormDefinition(formDefinition: AXPDynamicFormDefinition): AXPWidgetNode;
866
+ /**
867
+ * Convert AXPWidgetNode tree back to AXPDynamicFormDefinition
868
+ * Parses Fieldset Layouts back to Groups
869
+ * Parses Form Field widgets back to Fields
870
+ */
871
+ convertWidgetTreeToFormDefinition(widgetTree: AXPWidgetNode): AXPDynamicFormDefinition;
872
+ /**
873
+ * Validate that a widget tree represents a valid dynamic form structure
874
+ */
875
+ validateFormWidgetTree(widgetTree: AXPWidgetNode): boolean;
876
+ /**
877
+ * Clear all caches
878
+ */
879
+ clearCaches(): void;
880
+ /**
881
+ * Get cache statistics
882
+ */
883
+ getCacheStats(): {
884
+ widgetTreeCacheSize: number;
885
+ formDefinitionCacheSize: number;
886
+ };
887
+ /**
888
+ * Convert a single group to Fieldset widget structure
889
+ */
890
+ private createGroupAsFieldsetWidget;
891
+ /**
892
+ * Convert fields to Form Field widgets
893
+ */
894
+ private createFieldWidgets;
895
+ /**
896
+ * Convert a single field to Form Field widget with editor as child
897
+ */
898
+ private createFormFieldWidget;
899
+ /**
900
+ * Extract group information from Fieldset Layout widget
901
+ */
902
+ private extractGroupFromFieldset;
903
+ /**
904
+ * Extract field information from Form Field widget
905
+ */
906
+ private extractFieldFromFormWidget;
907
+ /**
908
+ * Create cache key for form definition
909
+ */
910
+ private createFormDefinitionCacheKey;
911
+ /**
912
+ * Create cache key for widget tree
913
+ */
914
+ private createWidgetTreeCacheKey;
915
+ /**
916
+ * Create a simple hash from a string
917
+ */
918
+ private createSimpleHash;
919
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPLayoutConversionService, never>;
920
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPLayoutConversionService>;
921
+ }
922
+
923
+ type DialogRendererConfig = AXPLayoutBuilderDialogConfig;
924
+ interface DialogRendererResult {
925
+ context: any;
926
+ action?: string;
927
+ }
928
+ declare class AXPDialogRendererComponent extends AXBasePageComponent implements OnInit {
929
+ #private;
930
+ config: DialogRendererConfig;
931
+ result: EventEmitter<DialogRendererResult>;
932
+ private widgetCoreService;
933
+ private expressionEvaluator;
934
+ private readonly commandService;
935
+ private readonly hookService;
936
+ private readonly unsavedChangesConfirm;
937
+ private readonly overlayService;
938
+ private readonly translationService;
939
+ private readonly document;
940
+ private readonly host;
941
+ private readonly shortcutRegistry;
942
+ private dialogResult?;
943
+ /** Ensures `show()` resolves once when the dialog closes (footer action or header close). */
944
+ private callbackInvoked;
945
+ /** Callback payload applied when a dismiss is allowed in {@link onClosing}. */
946
+ private pendingDismissResolvePayload?;
947
+ /** Skips dirty confirmation on the next {@link onClosing} (successful submit / programmatic close). */
948
+ private skipNextOnClosingDirtyCheck;
949
+ /** Blocks re-entrant {@link onClosing} while the first close gate is still resolving. */
950
+ private closeGateInProgress;
951
+ private readonly destroyRef;
952
+ context: _angular_core.WritableSignal<any>;
953
+ callBack: (result: unknown) => void;
954
+ data: any;
955
+ private isDialogLoading;
956
+ footerPrefix: _angular_core.WritableSignal<AXPWidgetCoreElementAction[]>;
957
+ footerSuffix: _angular_core.WritableSignal<AXPWidgetCoreElementAction[]>;
958
+ /**
959
+ * Correlate layout context snapshots for distributed hooks (`layout-builder.dialog.context-changed`).
960
+ */
961
+ private readonly contextChangedHooksSessionKey;
962
+ ngOnInit(): void;
963
+ private refreshDialogKeyboardShortcuts;
964
+ private isDialogShortcutRegistrationActive;
965
+ private buildDialogFooterShortcutBindings;
966
+ private isDialogFooterShortcutActive;
967
+ /**
968
+ * Popup shell hook — handles header **X** and **Esc** (when `closeButton` is enabled).
969
+ * This is the only place that prompts for unsaved changes.
970
+ */
971
+ onClosing(e: AXComponentClosing): Promise<void>;
972
+ /**
973
+ * Footer cancel and other in-app dismiss actions. Routes through `super.close()` so the
974
+ * popup shell invokes {@link onClosing} exactly once (same path as **X** / **Esc**).
975
+ */
976
+ private requestDismiss;
977
+ /** Invokes `show()` callback with the pending payload or a default cancel {@link AXPDialogRef}. */
978
+ private completeDismissResolve;
979
+ private getWidgetContainer;
980
+ private layoutRenderer;
981
+ private debounceTimer?;
982
+ handleContextChanged(event: any): void;
983
+ handleContextInitiated(event: any): void;
984
+ private invokeLayoutContextChangedHooks;
985
+ footerPrefixActions(): AXPWidgetCoreElementAction[];
986
+ footerSuffixActions(): AXPWidgetCoreElementAction[];
987
+ isFormLoading(): boolean;
988
+ isSubmitting(): boolean;
989
+ executeAction(action: AXPWidgetCoreElementAction): Promise<void>;
990
+ private isDialogDirty;
991
+ private confirmDismissIfDirty;
992
+ /** Whether the layout form should be validated before running this footer command. */
993
+ private shouldValidateBeforeAction;
994
+ /** True when a footer handler or command result asks to leave the dialog open (`keepDialogOpen` on the result or `result.data`). */
995
+ private shouldKeepDialogOpenAfterCommandResult;
996
+ /** Resolves the dialog `show()` promise exactly once. */
997
+ private resolveDialog;
998
+ private createDialogRef;
999
+ private closeWithOptionalSkipValidate;
1000
+ /** Resolves footer/widget action command to a string (e.g. `cancel`, `submit`, `widget:...`). */
1001
+ private resolveActionCommandName;
1002
+ private parseWidgetCommand;
1003
+ private invokeWidget;
1004
+ close(result?: DialogRendererResult, options?: {
1005
+ skipDirtyConfirm?: boolean;
1006
+ }): Promise<void>;
1007
+ private aggregateAndEvaluateActions;
1008
+ private collectWidgetActions;
1009
+ private collectDialogActionsFromConfig;
1010
+ private evaluatePredicates;
1011
+ private evalBool;
1012
+ /** Resolves footer action title when it contains {{ ... }} (e.g. wizard labels from dialog context). */
1013
+ private evalActionTitle;
1014
+ private resolveApi;
1015
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPDialogRendererComponent, never>;
1016
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPDialogRendererComponent, "axp-dialog-renderer", never, {}, { "result": "result"; }, never, never, true, never>;
1017
+ }
1018
+
1019
+ /** See `AXP_PREVIEW_WIDGET_FIELD_COMMAND_KEY` in `@acorex-platform/framework-shared/core`. */
1020
+ interface AXPPreviewWidgetFieldCommandInput {
1021
+ /** Widget node to render (same shape as `widget-field-configurator` model). */
1022
+ widget?: AXPWidgetNode;
1023
+ /**
1024
+ * Alternate property name for the widget node (matches metadata definition `interface` field).
1025
+ */
1026
+ interface?: AXPWidgetNode | string;
1027
+ fieldName?: string;
1028
+ fieldTitle?: AXPMultiLanguageString;
1029
+ name?: string;
1030
+ title?: AXPMultiLanguageString;
1031
+ }
1032
+ type AXPPreviewWidgetFieldInvocation = AXPPreviewWidgetFieldCommandInput & {
1033
+ __context__?: {
1034
+ data?: Record<string, unknown>;
1035
+ options?: Record<string, unknown>;
1036
+ };
1037
+ };
1038
+ /**
1039
+ * Opens a dialog that previews a widget configuration (same behavior as the preview button on
1040
+ * `axp-widget-field-configurator`). Invoked from that component and from entity list actions.
1041
+ */
1042
+ declare class AXPPreviewWidgetFieldCommand implements AXPCommand<AXPPreviewWidgetFieldCommandInput, void> {
1043
+ private readonly formBuilderService;
1044
+ private readonly widgetRegistry;
1045
+ private readonly translationService;
1046
+ private readonly crudService;
1047
+ execute(input: AXPPreviewWidgetFieldInvocation): Promise<AXPExecuteCommandResult<void>>;
1048
+ private mergeInvocation;
1049
+ private normalizeWidget;
1050
+ private resolveFieldTitleLabel;
1051
+ private isCancelDialogOutcome;
1052
+ private resolveWidgetDisplayTitle;
1053
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPPreviewWidgetFieldCommand, never>;
1054
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPPreviewWidgetFieldCommand>;
1055
+ }
1056
+
1057
+ 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, LayoutBuilderModule, createDismissedDialogRef };
1058
+ export type { AXPDialogActionMenuItem, AXPDialogCloseConfirmationOptions, 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 };