@acorex-platform/extension-ai-formbuilder-client 0.0.46 → 0.0.48

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.
@@ -1,14 +1,16 @@
1
+ import { RootConfig } from '@acorex-platform/module-ai-management-client/contracts';
2
+ import { objectKeyValueTransforms, AXPPageContextRegistry, AXPPageContextPriority, AXP_HOOK_PROVIDER } from '@acorex-platform/framework-client/core';
3
+ import { AXPWidgetsList, coerceUnknownToMultiLanguageString } from '@acorex-platform/framework-shared/core';
1
4
  import * as i0 from '@angular/core';
2
- import { inject, DestroyRef, Injectable, NgModule } from '@angular/core';
3
- import { AXP_OUTPUT_CONTRACT_TRANSCRIPT_SEGMENT_PROVIDER } from '@acorex-platform/framework-client/common';
4
- import { AXPPageContextRegistry, AXPPageContextPriority, AXP_HOOK_PROVIDER } from '@acorex-platform/framework-client/core';
5
+ import { Injectable, inject, DestroyRef, NgModule } from '@angular/core';
6
+ import { AXMAiManagementModule } from '@acorex-platform/module-ai-management-client';
7
+ import { AXPSettingsService, AXP_SETTING_DEFINITION_PROVIDER, AXP_OUTPUT_CONTRACT_TRANSCRIPT_SEGMENT_PROVIDER } from '@acorex-platform/framework-client/common';
5
8
  import { provideCommandSetups } from '@acorex-platform/framework-client/runtime';
6
9
  import { AXPLayoutDesignerFooterHookKeys, AXPLayoutDesignerHeaderMenuHookKeys } from '@acorex-platform/framework-client/layout/designer';
7
10
  import { AXToastService } from '@acorex/components/toast';
8
11
  import { AXTranslationService } from '@acorex/core/translation';
9
12
  import { AXMContextualAssistLauncherService } from '@acorex-platform/extension-ai-conversation-client';
10
13
  import { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';
11
- import { coerceUnknownToMultiLanguageString } from '@acorex-platform/framework-shared/core';
12
14
  import { axmReadAssistResponseStatus, axmIsAssistStreamingStatus, axmAssistWidgetNodeFromUnknown, AXMConversationRealtimeBus } from '@acorex-platform/module-conversation-client';
13
15
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
14
16
  import { merge } from 'rxjs';
@@ -48,6 +50,71 @@ const AXE_AI_FORMBUILDER_PAGE_ACTION_MOVE_WIDGET = 'move-widget';
48
50
  const AXE_AI_FORMBUILDER_DESIGNER_ASSIST_ID = 'b0000001-0000-4000-8000-000000000004';
49
51
  //#endregion
50
52
 
53
+ //#region ----- Setting Keys -----
54
+ /**
55
+ * Tenant setting for the assist opened from the form layout designer.
56
+ * Registered under Intelligence (`ai-settings`), not a separate settings group.
57
+ */
58
+ var AXEAiFormbuilderDesignerSettings;
59
+ (function (AXEAiFormbuilderDesignerSettings) {
60
+ /**
61
+ * Assist primary key (`Assist.id`).
62
+ * When empty, the designer opens the seeded form-designer-assistant.
63
+ */
64
+ AXEAiFormbuilderDesignerSettings["AssistId"] = "AiFormbuilder:Setting:Designer.AssistId";
65
+ })(AXEAiFormbuilderDesignerSettings || (AXEAiFormbuilderDesignerSettings = {}));
66
+ //#endregion
67
+
68
+ //#region ----- Imports -----
69
+ //#endregion
70
+ //#region ----- Constants -----
71
+ const I18N = '@extensions-ai-formbuilder:settings.designer-assist';
72
+ /** Intelligence group created by `AXMAiManagementSettingProvider`. Module AI settings attach here. */
73
+ const AI_SETTINGS_GROUP = 'ai-settings';
74
+ //#endregion
75
+ //#region ----- Settings Provider -----
76
+ class AXEAiFormbuilderDesignerSettingProvider {
77
+ async provide(context) {
78
+ if (!context.hasGroup(AI_SETTINGS_GROUP)) {
79
+ return;
80
+ }
81
+ const intelligence = context.group(AI_SETTINGS_GROUP);
82
+ if (!intelligence) {
83
+ return;
84
+ }
85
+ intelligence
86
+ .addSection('designer-assist', `${I18N}.section-title`, `${I18N}.section-description`)
87
+ .addSetting({
88
+ key: AXEAiFormbuilderDesignerSettings.AssistId,
89
+ title: `${I18N}.assist-id-title`,
90
+ scope: 'T',
91
+ overridableAt: [],
92
+ isInherited: true,
93
+ defaultValue: AXE_AI_FORMBUILDER_DESIGNER_ASSIST_ID,
94
+ searchTagKeys: [`${I18N}.assist-search-tags`],
95
+ valueTransforms: objectKeyValueTransforms('id'),
96
+ widget: {
97
+ type: AXPWidgetsList.Editors.LookupBox,
98
+ options: {
99
+ entity: `${RootConfig.module.name}.${RootConfig.entities.assist.name}`,
100
+ look: 'select',
101
+ multiple: false,
102
+ textField: 'title',
103
+ valueField: 'id',
104
+ hasClearButton: true,
105
+ },
106
+ },
107
+ description: `${I18N}.assist-id-description`,
108
+ })
109
+ .endSection();
110
+ }
111
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXEAiFormbuilderDesignerSettingProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
112
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXEAiFormbuilderDesignerSettingProvider }); }
113
+ }
114
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXEAiFormbuilderDesignerSettingProvider, decorators: [{
115
+ type: Injectable
116
+ }] });
117
+
51
118
  //#region ----- Imports -----
52
119
  //#endregion
53
120
  //#region ----- Constants -----
@@ -785,12 +852,16 @@ class AXEAiFormbuilderDesignerAiAssistService {
785
852
  this.entityService = inject(AXPEntityService, { optional: true });
786
853
  this.pageContext = inject(AXPPageContextRegistry);
787
854
  this.realtimeBus = inject(AXMConversationRealtimeBus, { optional: true });
855
+ this.settings = inject(AXPSettingsService);
788
856
  this.destroyRef = inject(DestroyRef);
789
857
  //#endregion
790
858
  //#region ----- State Signals -----
791
859
  this.designer = null;
792
860
  this.lastAppliedJson = '';
793
861
  this.pageTitle = '';
862
+ //#endregion
863
+ //#region ----- Designer lifecycle -----
864
+ this.designerLeaveBound = false;
794
865
  const bus = this.realtimeBus;
795
866
  if (!bus) {
796
867
  return;
@@ -819,6 +890,7 @@ class AXEAiFormbuilderDesignerAiAssistService {
819
890
  this.pageContext.activate(AXE_AI_FORMBUILDER_PAGE_CONTEXT_ID);
820
891
  return;
821
892
  }
893
+ this.bindCloseWhenDesignerLeaves(owner);
822
894
  this.pageContext.register({
823
895
  owner,
824
896
  id: AXE_AI_FORMBUILDER_PAGE_CONTEXT_ID,
@@ -829,15 +901,16 @@ class AXEAiFormbuilderDesignerAiAssistService {
829
901
  this.pageContext.activate(AXE_AI_FORMBUILDER_PAGE_CONTEXT_ID);
830
902
  }
831
903
  /**
832
- * Toggles contextual assist for the designer's current template (close if open, otherwise open).
904
+ * Toggles contextual assist for the designer's current template.
905
+ * Close hides the live window; the next open shows that same instance.
833
906
  */
834
907
  async toggleFromDesigner(designer) {
835
908
  const launcher = this.launcher;
836
909
  if (!launcher) {
837
910
  return this.warnConversationUnavailable();
838
911
  }
839
- if (launcher.isOpen()) {
840
- launcher.close();
912
+ if (launcher.isVisible()) {
913
+ launcher.dismiss();
841
914
  return true;
842
915
  }
843
916
  return this.runFromDesigner(designer);
@@ -866,7 +939,13 @@ class AXEAiFormbuilderDesignerAiAssistService {
866
939
  actionName: AXE_AI_FORMBUILDER_ASSIST_ACTION,
867
940
  title: entityTitle,
868
941
  payload: { ...payload },
869
- }, { assistId: AXE_AI_FORMBUILDER_DESIGNER_ASSIST_ID, forceNewChat: false });
942
+ }, {
943
+ assistId: await this.resolveDesignerAssistId(),
944
+ assistSelection: 'locked',
945
+ forceNewChat: false,
946
+ minimizable: false,
947
+ retainOnClose: true,
948
+ });
870
949
  return true;
871
950
  }
872
951
  /**
@@ -1077,6 +1156,17 @@ class AXEAiFormbuilderDesignerAiAssistService {
1077
1156
  return { applied: false, errors: [error instanceof Error ? error.message : 'The widget could not be moved.'] };
1078
1157
  }
1079
1158
  }
1159
+ bindCloseWhenDesignerLeaves(owner) {
1160
+ if (this.designerLeaveBound) {
1161
+ return;
1162
+ }
1163
+ this.designerLeaveBound = true;
1164
+ owner.onDestroy(() => {
1165
+ this.designerLeaveBound = false;
1166
+ this.designer = null;
1167
+ this.launcher?.close();
1168
+ });
1169
+ }
1080
1170
  //#endregion
1081
1171
  //#region ----- Page context -----
1082
1172
  buildPageSnapshot() {
@@ -1191,6 +1281,16 @@ class AXEAiFormbuilderDesignerAiAssistService {
1191
1281
  const resolved = this.translationService.resolve(coerceUnknownToMultiLanguageString(value))?.trim();
1192
1282
  return resolved ?? '';
1193
1283
  }
1284
+ //#endregion
1285
+ //#region ----- Assist Resolution -----
1286
+ /**
1287
+ * Tenant setting from Intelligence → Form Designer. Blank falls back to the seeded form designer assist.
1288
+ */
1289
+ async resolveDesignerAssistId() {
1290
+ const raw = await this.settings.get(AXEAiFormbuilderDesignerSettings.AssistId);
1291
+ const assistId = readStoredAssistId(raw);
1292
+ return assistId || AXE_AI_FORMBUILDER_DESIGNER_ASSIST_ID;
1293
+ }
1194
1294
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXEAiFormbuilderDesignerAiAssistService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1195
1295
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXEAiFormbuilderDesignerAiAssistService, providedIn: 'root' }); }
1196
1296
  }
@@ -1198,6 +1298,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
1198
1298
  type: Injectable,
1199
1299
  args: [{ providedIn: 'root' }]
1200
1300
  }], ctorParameters: () => [] });
1301
+ function readStoredAssistId(raw) {
1302
+ if (typeof raw === 'string') {
1303
+ return raw.trim();
1304
+ }
1305
+ if (raw != null && typeof raw === 'object') {
1306
+ const record = raw;
1307
+ const value = record['id'] ?? record['value'];
1308
+ if (typeof value === 'string') {
1309
+ return value.trim();
1310
+ }
1311
+ }
1312
+ return '';
1313
+ }
1201
1314
  function unboundDesignerError() {
1202
1315
  return 'The layout designer is not bound. Open the form designer page so the canvas can be edited.';
1203
1316
  }
@@ -1304,8 +1417,13 @@ class AXPAiFormbuilderOutputContractTranscriptSegmentProvider {
1304
1417
  */
1305
1418
  class AXEAIFormBuilderExtensionModule {
1306
1419
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXEAIFormBuilderExtensionModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
1307
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.0.8", ngImport: i0, type: AXEAIFormBuilderExtensionModule }); }
1420
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.0.8", ngImport: i0, type: AXEAIFormBuilderExtensionModule, imports: [AXMAiManagementModule] }); }
1308
1421
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXEAIFormBuilderExtensionModule, providers: [
1422
+ {
1423
+ provide: AXP_SETTING_DEFINITION_PROVIDER,
1424
+ useClass: AXEAiFormbuilderDesignerSettingProvider,
1425
+ multi: true,
1426
+ },
1309
1427
  provideCommandSetups([
1310
1428
  {
1311
1429
  key: AXE_AI_FORMBUILDER_VALIDATE_LAYOUT_COMMAND,
@@ -1351,12 +1469,18 @@ class AXEAIFormBuilderExtensionModule {
1351
1469
  useClass: AXPAiFormbuilderOutputContractTranscriptSegmentProvider,
1352
1470
  multi: true,
1353
1471
  },
1354
- ] }); }
1472
+ ], imports: [AXMAiManagementModule] }); }
1355
1473
  }
1356
1474
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXEAIFormBuilderExtensionModule, decorators: [{
1357
1475
  type: NgModule,
1358
1476
  args: [{
1477
+ imports: [AXMAiManagementModule],
1359
1478
  providers: [
1479
+ {
1480
+ provide: AXP_SETTING_DEFINITION_PROVIDER,
1481
+ useClass: AXEAiFormbuilderDesignerSettingProvider,
1482
+ multi: true,
1483
+ },
1360
1484
  provideCommandSetups([
1361
1485
  {
1362
1486
  key: AXE_AI_FORMBUILDER_VALIDATE_LAYOUT_COMMAND,
@@ -2101,5 +2225,5 @@ const axeAiFormbuilderMoveWidgetForAiCommandDefinition = defineCommand({
2101
2225
  * Generated bundle index. Do not edit.
2102
2226
  */
2103
2227
 
2104
- export { AXEAIFormBuilderExtensionModule, AXEAiFormbuilderAddWidgetForAiCommand, AXEAiFormbuilderApplyLayoutJsonForAiCommand, AXEAiFormbuilderDesignerAiAssistService, AXEAiFormbuilderDesignerFooterHookProvider, AXEAiFormbuilderDesignerHelpMenuHookProvider, AXEAiFormbuilderMoveWidgetForAiCommand, AXEAiFormbuilderOutlineLayoutForAiCommand, AXEAiFormbuilderRemoveWidgetForAiCommand, AXEAiFormbuilderUpdateWidgetForAiCommand, AXEAiFormbuilderValidateLayoutJsonForAiCommand, AXE_AI_FORMBUILDER_ADD_WIDGET_COMMAND, AXE_AI_FORMBUILDER_APPLY_LAYOUT_COMMAND, AXE_AI_FORMBUILDER_ASSIST_ACTION, AXE_AI_FORMBUILDER_ASSIST_KIND, AXE_AI_FORMBUILDER_ASSIST_SCENARIO, AXE_AI_FORMBUILDER_DESIGNER_ASSIST_ID, AXE_AI_FORMBUILDER_DESIGNER_DRAFT_ENTITY_ID, AXE_AI_FORMBUILDER_DESIGNER_ENTITY_TYPE, AXE_AI_FORMBUILDER_MOVE_WIDGET_COMMAND, AXE_AI_FORMBUILDER_OUTLINE_LAYOUT_COMMAND, AXE_AI_FORMBUILDER_PAGE_ACTION_ADD_WIDGET, AXE_AI_FORMBUILDER_PAGE_ACTION_APPLY_LAYOUT, AXE_AI_FORMBUILDER_PAGE_ACTION_MOVE_WIDGET, AXE_AI_FORMBUILDER_PAGE_ACTION_REMOVE_WIDGET, AXE_AI_FORMBUILDER_PAGE_ACTION_UPDATE_WIDGET, AXE_AI_FORMBUILDER_PAGE_CONTEXT_ID, AXE_AI_FORMBUILDER_REMOVE_WIDGET_COMMAND, AXE_AI_FORMBUILDER_UPDATE_WIDGET_COMMAND, AXE_AI_FORMBUILDER_VALIDATE_LAYOUT_COMMAND, axeAddWidgetToLayoutJson, axeAiFormbuilderAddWidgetForAiCommandDefinition, axeAiFormbuilderApplyLayoutJsonForAiCommandDefinition, axeAiFormbuilderMoveWidgetForAiCommandDefinition, axeAiFormbuilderOutlineLayoutForAiCommandDefinition, axeAiFormbuilderRemoveWidgetForAiCommandDefinition, axeAiFormbuilderUpdateWidgetForAiCommandDefinition, axeAiFormbuilderValidateLayoutJsonForAiCommandDefinition, axeMoveWidgetInLayoutJson, axeOutlineLayoutJson, axeRemoveWidgetFromLayoutJson, axeUpdateWidgetInLayoutJson };
2228
+ export { AXEAIFormBuilderExtensionModule, AXEAiFormbuilderAddWidgetForAiCommand, AXEAiFormbuilderApplyLayoutJsonForAiCommand, AXEAiFormbuilderDesignerAiAssistService, AXEAiFormbuilderDesignerFooterHookProvider, AXEAiFormbuilderDesignerHelpMenuHookProvider, AXEAiFormbuilderDesignerSettingProvider, AXEAiFormbuilderDesignerSettings, AXEAiFormbuilderMoveWidgetForAiCommand, AXEAiFormbuilderOutlineLayoutForAiCommand, AXEAiFormbuilderRemoveWidgetForAiCommand, AXEAiFormbuilderUpdateWidgetForAiCommand, AXEAiFormbuilderValidateLayoutJsonForAiCommand, AXE_AI_FORMBUILDER_ADD_WIDGET_COMMAND, AXE_AI_FORMBUILDER_APPLY_LAYOUT_COMMAND, AXE_AI_FORMBUILDER_ASSIST_ACTION, AXE_AI_FORMBUILDER_ASSIST_KIND, AXE_AI_FORMBUILDER_ASSIST_SCENARIO, AXE_AI_FORMBUILDER_DESIGNER_ASSIST_ID, AXE_AI_FORMBUILDER_DESIGNER_DRAFT_ENTITY_ID, AXE_AI_FORMBUILDER_DESIGNER_ENTITY_TYPE, AXE_AI_FORMBUILDER_MOVE_WIDGET_COMMAND, AXE_AI_FORMBUILDER_OUTLINE_LAYOUT_COMMAND, AXE_AI_FORMBUILDER_PAGE_ACTION_ADD_WIDGET, AXE_AI_FORMBUILDER_PAGE_ACTION_APPLY_LAYOUT, AXE_AI_FORMBUILDER_PAGE_ACTION_MOVE_WIDGET, AXE_AI_FORMBUILDER_PAGE_ACTION_REMOVE_WIDGET, AXE_AI_FORMBUILDER_PAGE_ACTION_UPDATE_WIDGET, AXE_AI_FORMBUILDER_PAGE_CONTEXT_ID, AXE_AI_FORMBUILDER_REMOVE_WIDGET_COMMAND, AXE_AI_FORMBUILDER_UPDATE_WIDGET_COMMAND, AXE_AI_FORMBUILDER_VALIDATE_LAYOUT_COMMAND, axeAddWidgetToLayoutJson, axeAiFormbuilderAddWidgetForAiCommandDefinition, axeAiFormbuilderApplyLayoutJsonForAiCommandDefinition, axeAiFormbuilderMoveWidgetForAiCommandDefinition, axeAiFormbuilderOutlineLayoutForAiCommandDefinition, axeAiFormbuilderRemoveWidgetForAiCommandDefinition, axeAiFormbuilderUpdateWidgetForAiCommandDefinition, axeAiFormbuilderValidateLayoutJsonForAiCommandDefinition, axeMoveWidgetInLayoutJson, axeOutlineLayoutJson, axeRemoveWidgetFromLayoutJson, axeUpdateWidgetInLayoutJson };
2105
2229
  //# sourceMappingURL=acorex-platform-extension-ai-formbuilder-client.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-extension-ai-formbuilder-client.mjs","sources":["../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/ai-formbuilder-designer-entity-chat.constants.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/commands/validate-layout-json.util.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/ai-formbuilder-designer-apply.util.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/ai-formbuilder-designer-assist-context.util.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/ai-formbuilder-designer-ops.util.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/ai-formbuilder-designer-page-context.util.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/ai-formbuilder-designer-ai-assist.service.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/ai-formbuilder-designer-footer.hook.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/ai-formbuilder-designer-help-menu.hook.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/output-contract-transcript-segment.formbuilder.provider.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/ai-formbuilder-extention.module.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/ai-formbuilder-layout-json.util.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/commands/validate-layout-json-for-ai.command.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/commands/validate-layout-json-for-ai.command.definition.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/commands/apply-layout-json-for-ai.command.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/commands/apply-layout-json-for-ai.command.definition.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/commands/outline-layout-for-ai.command.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/commands/outline-layout-for-ai.command.definition.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/commands/add-widget-for-ai.command.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/commands/add-widget-for-ai.command.definition.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/commands/update-widget-for-ai.command.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/commands/update-widget-for-ai.command.definition.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/commands/remove-widget-for-ai.command.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/commands/remove-widget-for-ai.command.definition.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/commands/move-widget-for-ai.command.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/commands/move-widget-for-ai.command.definition.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/acorex-platform-extension-ai-formbuilder-client.ts"],"sourcesContent":["//#region ----- Form designer contextual assist -----\n\n/** Entity type for form-template designer assist (`AssessmentManagement.Template`). */\nexport const AXE_AI_FORMBUILDER_DESIGNER_ENTITY_TYPE = 'AssessmentManagement.Template';\n\n/** Fallback record id when the designer has no persisted template id yet. */\nexport const AXE_AI_FORMBUILDER_DESIGNER_DRAFT_ENTITY_ID = 'draft';\n\n/** Launch kind stored on the assist room (generic contextual-assist bag). */\nexport const AXE_AI_FORMBUILDER_ASSIST_KIND = 'form-template-designer';\n\n/** Action name passed into {@link AXMContextualAssistLauncherService}. */\nexport const AXE_AI_FORMBUILDER_ASSIST_ACTION = 'form.template.designer.assist';\n\n/**\n * Launch-context scenario for Form Template designer rooms\n * (hide chat widget trees; page-context canvas edits).\n */\nexport const AXE_AI_FORMBUILDER_ASSIST_SCENARIO = 'form-template-designer';\n\nexport const AXE_AI_FORMBUILDER_VALIDATE_LAYOUT_COMMAND = 'AiFormbuilder:ValidateLayoutJsonForAi';\n\nexport const AXE_AI_FORMBUILDER_APPLY_LAYOUT_COMMAND = 'AiFormbuilder:ApplyLayoutJsonForAi';\n\nexport const AXE_AI_FORMBUILDER_OUTLINE_LAYOUT_COMMAND = 'AiFormbuilder:OutlineLayoutForAi';\n\nexport const AXE_AI_FORMBUILDER_ADD_WIDGET_COMMAND = 'AiFormbuilder:AddWidgetForAi';\n\nexport const AXE_AI_FORMBUILDER_UPDATE_WIDGET_COMMAND = 'AiFormbuilder:UpdateWidgetForAi';\n\nexport const AXE_AI_FORMBUILDER_REMOVE_WIDGET_COMMAND = 'AiFormbuilder:RemoveWidgetForAi';\n\nexport const AXE_AI_FORMBUILDER_MOVE_WIDGET_COMMAND = 'AiFormbuilder:MoveWidgetForAi';\n\n/** Page-context registration id while the form designer is the focused page. */\nexport const AXE_AI_FORMBUILDER_PAGE_CONTEXT_ID = 'layout-designer';\n\n/** Advertised Page:RunAction id that writes the open designer canvas. */\nexport const AXE_AI_FORMBUILDER_PAGE_ACTION_APPLY_LAYOUT = 'apply-layout';\n\nexport const AXE_AI_FORMBUILDER_PAGE_ACTION_ADD_WIDGET = 'add-widget';\n\nexport const AXE_AI_FORMBUILDER_PAGE_ACTION_UPDATE_WIDGET = 'update-widget';\n\nexport const AXE_AI_FORMBUILDER_PAGE_ACTION_REMOVE_WIDGET = 'remove-widget';\n\nexport const AXE_AI_FORMBUILDER_PAGE_ACTION_MOVE_WIDGET = 'move-widget';\n\n/** Seeded Form Designer assist (`AiManagement.Assist.name` = form-designer-assistant). Must match `AXMAiFormDesignerAssistId`. */\nexport const AXE_AI_FORMBUILDER_DESIGNER_ASSIST_ID = 'b0000001-0000-4000-8000-000000000004';\n\n//#endregion\n","//#region ----- Imports -----\n\nimport type { AXPWidgetNode } from '@acorex-platform/framework-shared/core';\n\n//#endregion\n\n//#region ----- Types -----\n\nexport interface AXEAiFormbuilderLayoutJsonValidation {\n valid: boolean;\n errors: string[];\n normalizedJson?: string;\n}\n\n//#endregion\n\n//#region ----- Constants -----\n\nconst MAX_ERRORS = 48;\n\nconst FORBIDDEN_LAYOUT_KEYS = new Set([\n 'style',\n 'styles',\n 'css',\n 'class',\n 'className',\n 'classList',\n 'innerHTML',\n 'dataset',\n]);\n\n/** Roots the form-template designer can load (File → Download / Import JSON). */\nconst DESIGNER_CANVAS_ROOT_TYPES = new Set(['document-layout', 'page-layout']);\n\n//#endregion\n\n//#region ----- Parse & validate -----\n\n/**\n * AI tool-arg normalization may pass `json` as a string or an already-parsed object.\n * Also accepts `layoutJson` from older registry rows.\n */\nexport function axeResolveLayoutJsonInput(input: { json?: unknown; layoutJson?: unknown } | null | undefined): string {\n return resolveLayoutJsonString(input?.json) || resolveLayoutJsonString(input?.layoutJson);\n}\n\nexport function axeParseAndValidateLayoutJson(json: unknown): AXEAiFormbuilderLayoutJsonValidation {\n const raw = resolveLayoutJsonString(json);\n if (!raw) {\n return { valid: false, errors: ['Missing json string.'] };\n }\n const stripped = stripJsonFences(raw);\n let parsed: unknown;\n try {\n parsed = JSON.parse(stripped) as unknown;\n } catch (e) {\n const msg = e instanceof Error ? e.message : 'Invalid JSON';\n return { valid: false, errors: [`JSON parse error: ${msg}`] };\n }\n const errors: string[] = [];\n validateWidgetNodeShape(parsed, '$', errors);\n if (errors.length > 0) {\n return { valid: false, errors };\n }\n return {\n valid: true,\n errors: [],\n normalizedJson: JSON.stringify(parsed as AXPWidgetNode),\n };\n}\n\nexport function axeIsDesignerCanvasRoot(value: unknown): boolean {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return false;\n }\n const type = (value as Record<string, unknown>)['type'];\n return typeof type === 'string' && DESIGNER_CANVAS_ROOT_TYPES.has(type.trim());\n}\n\nfunction resolveLayoutJsonString(json: unknown): string {\n if (typeof json === 'string') {\n return json.trim();\n }\n if (json !== null && json !== undefined && typeof json === 'object') {\n try {\n return JSON.stringify(json);\n } catch {\n return '';\n }\n }\n return '';\n}\n\nfunction stripJsonFences(raw: string): string {\n const t = raw.trim();\n const fence = /^```(?:json)?\\s*\\r?\\n?([\\s\\S]*?)\\r?\\n?```\\s*$/i.exec(t);\n return fence ? fence[1].trim() : t;\n}\n\nfunction validateWidgetNodeShape(value: unknown, jsonPath: string, errors: string[]): void {\n if (errors.length >= MAX_ERRORS) {\n return;\n }\n if (value === null || typeof value !== 'object' || Array.isArray(value)) {\n errors.push(`${jsonPath}: expected an object (AXPWidgetNode)`);\n return;\n }\n const o = value as Record<string, unknown>;\n const t = o['type'];\n if (typeof t !== 'string' || !t.trim()) {\n errors.push(`${jsonPath}: property \"type\" must be a non-empty string (widget registry name)`);\n }\n if (t === 'node' && 'content' in o) {\n errors.push(\n `${jsonPath}: do not use the chat envelope { \"type\":\"node\", \"content\":... }; output the inner widget root only.`,\n );\n }\n for (const key of FORBIDDEN_LAYOUT_KEYS) {\n if (key in o) {\n errors.push(\n `${jsonPath}: \"${key}\" is not allowed on AXPWidgetNode — map styling to widget options (e.g. flex-layout, grid-layout, button-action look/color, fieldset-layout), not raw CSS.`,\n );\n if (errors.length >= MAX_ERRORS) {\n return;\n }\n }\n }\n if ('options' in o && o['options'] != null && typeof o['options'] !== 'object') {\n errors.push(`${jsonPath}.options must be a plain object when present`);\n }\n if ('children' in o && o['children'] != null) {\n if (!Array.isArray(o['children'])) {\n errors.push(`${jsonPath}.children must be an array`);\n return;\n }\n for (let i = 0; i < o['children'].length; i++) {\n validateWidgetNodeShape(o['children'][i], `${jsonPath}.children[${i}]`, errors);\n if (errors.length >= MAX_ERRORS) {\n return;\n }\n }\n }\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport type { AXConversationMessage } from '@acorex/components/conversation';\nimport {\n axmAssistWidgetNodeFromUnknown,\n axmIsAssistStreamingStatus,\n axmReadAssistResponseStatus,\n} from '@acorex-platform/module-conversation-client';\nimport { extractMessageTextFromPayload } from '@acorex-platform/module-conversation-client/contracts';\nimport { axeIsDesignerCanvasRoot } from './commands/validate-layout-json.util';\n\n//#endregion\n\n//#region ----- Constants -----\n\nconst DESIGNER_ROOT_TYPE_MARKER = /\"type\"\\s*:\\s*\"(document-layout|page-layout)\"/i;\n\n//#endregion\n\n//#region ----- Message extract -----\n\n/** True when this assist reply is finished and may be applied to the canvas. */\nexport function axeAssistMessageReadyToApply(message: AXConversationMessage): boolean {\n const status = axmReadAssistResponseStatus(message.metadata);\n if (axmIsAssistStreamingStatus(status) || status === 'failed') {\n return false;\n }\n const meta = message.metadata as Record<string, unknown> | undefined;\n if (meta && meta['isAssistResponse'] === false) {\n return false;\n }\n return true;\n}\n\n/**\n * Designer JSON from a completed assist message.\n * Accepts a node payload or JSON pasted inside a text reply (the usual specialist failure mode).\n */\nexport function axeDesignerLayoutJsonFromAssistMessage(message: AXConversationMessage): string | null {\n const payload = message.payload as unknown;\n const candidates: unknown[] = [payload];\n if (payload && typeof payload === 'object' && !Array.isArray(payload)) {\n const row = payload as Record<string, unknown>;\n if ('content' in row) {\n candidates.push(row['content']);\n }\n }\n\n for (const text of collectMessageTexts(message)) {\n const extracted = axeExtractDesignerLayoutFromText(text);\n if (extracted !== undefined) {\n candidates.push(extracted);\n }\n }\n\n for (const candidate of candidates) {\n const node = axmAssistWidgetNodeFromUnknown(candidate);\n if (node && axeIsDesignerCanvasRoot(node)) {\n return JSON.stringify(node);\n }\n }\n return null;\n}\n\n/** Pulls a document-layout / page-layout object out of mixed prose + JSON. */\nexport function axeExtractDesignerLayoutFromText(raw: string): unknown {\n const text = stripJsonFences(raw);\n if (!text) {\n return undefined;\n }\n try {\n const parsed = JSON.parse(text) as unknown;\n const node = axmAssistWidgetNodeFromUnknown(parsed);\n if (node && axeIsDesignerCanvasRoot(node)) {\n return node;\n }\n } catch {\n // Mixed chat text — scan for an embedded designer root.\n }\n return extractEmbeddedDesignerObject(text);\n}\n\nfunction collectMessageTexts(message: AXConversationMessage): string[] {\n const texts: string[] = [];\n const fromPayload = extractMessageTextFromPayload(message.payload);\n if (fromPayload.trim()) {\n texts.push(fromPayload);\n }\n const rawPayload = message.payload as unknown;\n if (typeof rawPayload === 'string' && rawPayload.trim()) {\n texts.push(rawPayload);\n }\n const meta = message.metadata as Record<string, unknown> | undefined;\n if (typeof meta?.['text'] === 'string' && meta['text'].trim()) {\n texts.push(meta['text']);\n }\n return texts;\n}\n\nfunction stripJsonFences(raw: string): string {\n const t = raw.trim();\n const fence = /^```(?:json)?\\s*\\r?\\n?([\\s\\S]*?)\\r?\\n?```\\s*$/i.exec(t);\n return fence ? fence[1].trim() : t;\n}\n\nfunction extractEmbeddedDesignerObject(text: string): unknown {\n let searchFrom = 0;\n while (searchFrom < text.length) {\n const slice = text.slice(searchFrom);\n const match = DESIGNER_ROOT_TYPE_MARKER.exec(slice);\n if (!match || match.index < 0) {\n break;\n }\n const abs = searchFrom + match.index;\n const start = text.lastIndexOf('{', abs);\n if (start < 0) {\n searchFrom = abs + match[0].length;\n continue;\n }\n const json = sliceBalancedObject(text, start);\n if (json) {\n try {\n const parsed = JSON.parse(json) as unknown;\n const node = axmAssistWidgetNodeFromUnknown(parsed);\n if (node && axeIsDesignerCanvasRoot(node)) {\n return node;\n }\n } catch {\n // Try the next type marker.\n }\n }\n searchFrom = abs + match[0].length;\n }\n return undefined;\n}\n\nfunction sliceBalancedObject(text: string, start: number): string | null {\n if (text[start] !== '{') {\n return null;\n }\n let depth = 0;\n let inString = false;\n let escape = false;\n for (let i = start; i < text.length; i++) {\n const ch = text[i];\n if (inString) {\n if (escape) {\n escape = false;\n } else if (ch === '\\\\') {\n escape = true;\n } else if (ch === '\"') {\n inString = false;\n }\n continue;\n }\n if (ch === '\"') {\n inString = true;\n continue;\n }\n if (ch === '{') {\n depth += 1;\n } else if (ch === '}') {\n depth -= 1;\n if (depth === 0) {\n return text.slice(start, i + 1);\n }\n }\n }\n return null;\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport type { AXPDesignerService } from '@acorex-platform/framework-client/layout/designer';\nimport type { AXPWidgetNode } from '@acorex-platform/framework-shared/core';\nimport {\n axmSanitizeContextualAssistValue,\n type AXMContextualAssistColumnValue,\n type AXMFormTemplateDesignerAssistDataSourceRef,\n type AXMFormTemplateDesignerAssistPayload,\n type AXMFormTemplateDesignerAssistWidgetRef,\n} from '@acorex-platform/module-conversation-client/contracts';\nimport {\n AXE_AI_FORMBUILDER_ASSIST_SCENARIO,\n AXE_AI_FORMBUILDER_DESIGNER_ENTITY_TYPE,\n} from './ai-formbuilder-designer-entity-chat.constants';\n\n//#endregion\n\n//#region ----- Constants -----\n\nconst TEMPLATE_CONTEXT_FIELDS = ['code', 'title', 'description', 'type', 'categories'] as const;\n\n//#endregion\n\n//#region ----- Payload -----\n\n/**\n * Snapshot of the live designer chrome for contextual assist.\n * Full layout JSON is not shipped — the specialist outlines and patches the canvas.\n */\nexport function axeBuildFormbuilderDesignerAssistPayload(\n designer: AXPDesignerService,\n args: {\n entityTitle: string;\n recordId: string;\n columns: AXMContextualAssistColumnValue[];\n },\n): AXMFormTemplateDesignerAssistPayload {\n const [moduleName = 'AssessmentManagement', entityName = 'Template'] =\n AXE_AI_FORMBUILDER_DESIGNER_ENTITY_TYPE.split('.');\n const document = designer.document();\n const currentPage = designer.currentPage();\n const selected = designer.selectedNode();\n const profile = designer.surfaceProfile();\n const pages = Array.isArray(document?.children) ? document.children : [];\n\n const payload: AXMFormTemplateDesignerAssistPayload = {\n moduleName,\n entityName,\n entityTitle: args.entityTitle,\n recordId: args.recordId,\n columns: args.columns,\n scenario: AXE_AI_FORMBUILDER_ASSIST_SCENARIO,\n entityType: AXE_AI_FORMBUILDER_DESIGNER_ENTITY_TYPE,\n surface: 'layout-designer',\n unsavedChanges: designer.unsavedChanges(),\n pageCount: pages.length,\n currentPageIndex: designer.currentPageIndex(),\n currentPage: widgetRef(currentPage, true),\n selectedWidget: selected ? widgetRef(selected, false) : null,\n dataSources: summarizeDataSources(designer),\n widgetCounts: countWidgetTypes(document),\n ...(profile.id ? { surfaceId: profile.id } : {}),\n ...(profile.documentKind ? { documentKind: profile.documentKind } : {}),\n ...(profile.rootWidget ? { rootWidget: profile.rootWidget } : {}),\n };\n\n return payload;\n}\n\n/** Template record fields for assist (skips the persisted `template` JSON blob). */\nexport function axeBuildFormTemplateRecordAssistColumns(\n row: Record<string, unknown>,\n resolveText: (value: unknown) => string,\n): AXMContextualAssistColumnValue[] {\n const columns: AXMContextualAssistColumnValue[] = [];\n for (const name of TEMPLATE_CONTEXT_FIELDS) {\n if (!(name in row) || row[name] == null) {\n continue;\n }\n const raw = row[name];\n const text = resolveText(raw);\n columns.push({\n name,\n title: name,\n value: axmSanitizeContextualAssistValue(text || raw),\n });\n }\n return columns;\n}\n\n//#endregion\n\n//#region ----- Designer snapshot -----\n\nfunction widgetRef(node: AXPWidgetNode | null | undefined, includeChildCount: boolean): AXMFormTemplateDesignerAssistWidgetRef {\n const type = typeof node?.type === 'string' ? node.type.trim() : '';\n const name = typeof node?.name === 'string' ? node.name.trim() : '';\n const path = typeof node?.path === 'string' ? node.path.trim() : '';\n const childCount = Array.isArray(node?.children) ? node.children.length : 0;\n return {\n ...(type ? { type } : {}),\n ...(name ? { name } : {}),\n ...(path ? { path } : {}),\n ...(includeChildCount ? { childCount } : {}),\n };\n}\n\nfunction summarizeDataSources(designer: AXPDesignerService): AXMFormTemplateDesignerAssistDataSourceRef[] {\n return (designer.sources() ?? []).slice(0, 12).map((source) => ({\n id: source.id,\n name: source.name,\n itemCount: Array.isArray(source.items) ? source.items.length : 0,\n columnNames: (source.columns ?? []).map((column) => column.name).filter(Boolean).slice(0, 12),\n }));\n}\n\nfunction countWidgetTypes(node: AXPWidgetNode | null | undefined): Record<string, number> {\n const counts: Record<string, number> = {};\n walkWidgetTypes(node, counts);\n return counts;\n}\n\nfunction walkWidgetTypes(node: unknown, counts: Record<string, number>): void {\n if (!node || typeof node !== 'object' || Array.isArray(node)) {\n return;\n }\n const row = node as Record<string, unknown>;\n const type = typeof row['type'] === 'string' ? row['type'].trim() : '';\n if (type) {\n counts[type] = (counts[type] ?? 0) + 1;\n }\n const children = row['children'];\n if (Array.isArray(children)) {\n for (const child of children) {\n walkWidgetTypes(child, counts);\n }\n }\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport type { AXPWidgetNode, AXPWidgetTriggers } from '@acorex-platform/framework-shared/core';\n\n//#endregion\n\n//#region ----- Types -----\n\nexport interface AXEAiFormbuilderDesignerOutlineItem {\n name: string;\n type: string;\n path: string;\n parentName?: string;\n label?: string;\n}\n\nexport interface AXEAiFormbuilderDesignerWidgetHit {\n node: AXPWidgetNode;\n parent: AXPWidgetNode | null;\n path: string;\n}\n\n//#endregion\n\n//#region ----- Outline -----\n\nexport function axeBuildDesignerOutline(root: unknown): AXEAiFormbuilderDesignerOutlineItem[] {\n const items: AXEAiFormbuilderDesignerOutlineItem[] = [];\n walkOutline(root, null, [], items);\n return items;\n}\n\nexport function axeFindDesignerWidget(\n root: unknown,\n ref: { name?: string; path?: string },\n): AXEAiFormbuilderDesignerWidgetHit | null {\n const name = typeof ref.name === 'string' ? ref.name.trim() : '';\n const path = typeof ref.path === 'string' ? ref.path.trim() : '';\n if (!name && !path) {\n return null;\n }\n\n let named: AXEAiFormbuilderDesignerWidgetHit | null = null;\n let byPath: AXEAiFormbuilderDesignerWidgetHit | null = null;\n walkFind(root, null, [], (hit) => {\n if (name && hit.node.name?.trim() === name && !named) {\n named = hit;\n }\n if (path && hit.path === path) {\n byPath = hit;\n }\n });\n return named ?? byPath;\n}\n\nexport function axeResolveWidgetNodeInput(raw: unknown): AXPWidgetNode | null {\n const value = unwrapJson(raw);\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return null;\n }\n const type = (value as Record<string, unknown>)['type'];\n if (typeof type !== 'string' || !type.trim()) {\n return null;\n }\n return value as AXPWidgetNode;\n}\n\nexport function axeReadOptionalIndex(raw: unknown): number | undefined {\n if (typeof raw === 'number' && Number.isFinite(raw)) {\n return Math.trunc(raw);\n }\n if (typeof raw === 'string' && raw.trim()) {\n const parsed = Number(raw);\n if (Number.isFinite(parsed)) {\n return Math.trunc(parsed);\n }\n }\n return undefined;\n}\n\nexport function axeReadStringArg(raw: unknown): string {\n return typeof raw === 'string' ? raw.trim() : '';\n}\n\n/** `set: false` when the caller omitted the arg. Empty array clears triggers. */\nexport function axeReadOptionalTriggers(raw: unknown): { set: boolean; value?: AXPWidgetTriggers } {\n if (raw === undefined) {\n return { set: false };\n }\n const value = unwrapJson(raw);\n if (value == null) {\n return { set: true, value: [] };\n }\n if (!Array.isArray(value)) {\n return { set: false };\n }\n const triggers: AXPWidgetTriggers = [];\n for (const item of value) {\n if (!item || typeof item !== 'object' || Array.isArray(item)) {\n continue;\n }\n const row = item as Record<string, unknown>;\n const event = typeof row['event'] === 'string' ? row['event'].trim() : '';\n const actionRaw = row['action'];\n const action = Array.isArray(actionRaw)\n ? actionRaw.filter((part): part is string => typeof part === 'string' && !!part.trim())\n : typeof actionRaw === 'string'\n ? actionRaw.trim()\n : '';\n if (!event && (Array.isArray(action) ? action.length === 0 : !action)) {\n continue;\n }\n triggers.push({\n event,\n action,\n ...(row['disabled'] === true ? { disabled: true } : {}),\n });\n }\n return { set: true, value: triggers };\n}\n\nexport function axeReadOptionalVisible(raw: unknown): { set: boolean; value?: boolean | string } {\n if (raw === undefined) {\n return { set: false };\n }\n if (typeof raw === 'boolean') {\n return { set: true, value: raw };\n }\n if (typeof raw === 'string') {\n return { set: true, value: raw.trim() };\n }\n return { set: false };\n}\n\n//#endregion\n\n//#region ----- Walk -----\n\nfunction pathSegment(node: AXPWidgetNode, siblingIndex: number): string {\n const name = typeof node.name === 'string' ? node.name.trim() : '';\n if (name) {\n return name;\n }\n const type = typeof node.type === 'string' ? node.type.trim() : 'widget';\n return `${type}[${siblingIndex}]`;\n}\n\nfunction walkOutline(\n value: unknown,\n parentName: string | null,\n pathParts: string[],\n items: AXEAiFormbuilderDesignerOutlineItem[],\n siblingIndex = 0,\n): void {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return;\n }\n const node = value as AXPWidgetNode;\n const type = typeof node.type === 'string' ? node.type.trim() : '';\n if (!type) {\n return;\n }\n const name = typeof node.name === 'string' ? node.name.trim() : '';\n const segment = pathSegment(node, siblingIndex);\n const path = [...pathParts, segment].join('/');\n const label = readLabel(node);\n items.push({\n type,\n path,\n name,\n ...(parentName ? { parentName } : {}),\n ...(label ? { label } : {}),\n });\n const children = node.children;\n if (!Array.isArray(children)) {\n return;\n }\n children.forEach((child, index) => {\n walkOutline(child, name || null, [...pathParts, segment], items, index);\n });\n}\n\nfunction walkFind(\n value: unknown,\n parent: AXPWidgetNode | null,\n pathParts: string[],\n visit: (hit: AXEAiFormbuilderDesignerWidgetHit) => void,\n siblingIndex = 0,\n): void {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return;\n }\n const node = value as AXPWidgetNode;\n const type = typeof node.type === 'string' ? node.type.trim() : '';\n if (!type) {\n return;\n }\n const segment = pathSegment(node, siblingIndex);\n const path = [...pathParts, segment].join('/');\n visit({ node, parent, path });\n const children = node.children;\n if (!Array.isArray(children)) {\n return;\n }\n children.forEach((child, index) => {\n walkFind(child, node, [...pathParts, segment], visit, index);\n });\n}\n\nfunction readLabel(node: AXPWidgetNode): string | undefined {\n const options = node.options;\n if (!options || typeof options !== 'object' || Array.isArray(options)) {\n return undefined;\n }\n const label = (options as Record<string, unknown>)['label'];\n if (typeof label === 'string' && label.trim()) {\n return label.trim();\n }\n const title = (options as Record<string, unknown>)['title'];\n if (typeof title === 'string' && title.trim()) {\n return title.trim();\n }\n return undefined;\n}\n\nfunction unwrapJson(raw: unknown): unknown {\n if (typeof raw !== 'string') {\n return raw;\n }\n const trimmed = raw.trim();\n if (!trimmed) {\n return null;\n }\n try {\n return JSON.parse(trimmed) as unknown;\n } catch {\n return null;\n }\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport type {\n AXPPageContextAction,\n AXPPageContextOutlineItem,\n AXPPageContextSnapshot,\n} from '@acorex-platform/framework-client/core';\nimport {\n AXE_AI_FORMBUILDER_DESIGNER_ENTITY_TYPE,\n AXE_AI_FORMBUILDER_PAGE_ACTION_ADD_WIDGET,\n AXE_AI_FORMBUILDER_PAGE_ACTION_APPLY_LAYOUT,\n AXE_AI_FORMBUILDER_PAGE_ACTION_MOVE_WIDGET,\n AXE_AI_FORMBUILDER_PAGE_ACTION_REMOVE_WIDGET,\n AXE_AI_FORMBUILDER_PAGE_ACTION_UPDATE_WIDGET,\n} from './ai-formbuilder-designer-entity-chat.constants';\nimport { axeResolveLayoutJsonInput } from './commands/validate-layout-json.util';\n\n//#endregion\n\n//#region ----- Actions -----\n\nexport const AXE_AI_FORMBUILDER_PAGE_CONTEXT_ACTIONS: AXPPageContextAction[] = [\n {\n id: AXE_AI_FORMBUILDER_PAGE_ACTION_ADD_WIDGET,\n title: 'Add one widget under a named parent on the live canvas',\n params: [\n {\n name: 'parentName',\n required: false,\n description: 'Parent widget name from snapshot.outline. Prefer this over parentPath.',\n },\n {\n name: 'parentPath',\n required: false,\n description: 'Parent path from snapshot.outline when the parent has no name.',\n },\n {\n name: 'widget',\n required: true,\n description:\n 'One AXPWidgetNode (type plus name/options/children). Put triggers and visible on this node root when the field calculates or shows/hides. Not the full document-layout.',\n },\n {\n name: 'index',\n required: false,\n description: 'Optional child index under the parent. Omit to append.',\n },\n ],\n },\n {\n id: AXE_AI_FORMBUILDER_PAGE_ACTION_UPDATE_WIDGET,\n title: 'Patch options, validations, triggers, or visible on one canvas widget',\n params: [\n { name: 'name', required: false, description: 'Widget name from snapshot.outline.' },\n { name: 'path', required: false, description: 'Widget path from snapshot.outline when it has no name.' },\n { name: 'options', required: false, description: 'Partial options object merged onto the widget.' },\n { name: 'validations', required: false, description: 'Replaces options.validations (e.g. [{ \"rule\": \"required\" }]).' },\n {\n name: 'triggers',\n required: false,\n description:\n 'Replaces node.triggers (not options.triggers). Array of { event, action } expression strings. Empty array clears. See write-platform-expression.',\n },\n {\n name: 'visible',\n required: false,\n description:\n 'Replaces node.visible. Boolean or \"{{ context.eval(...) }}\" expression. See write-platform-expression.',\n },\n ],\n },\n {\n id: AXE_AI_FORMBUILDER_PAGE_ACTION_REMOVE_WIDGET,\n title: 'Remove one widget from the live canvas',\n params: [\n { name: 'name', required: false, description: 'Widget name from snapshot.outline.' },\n { name: 'path', required: false, description: 'Widget path from snapshot.outline when it has no name.' },\n ],\n },\n {\n id: AXE_AI_FORMBUILDER_PAGE_ACTION_MOVE_WIDGET,\n title: 'Move one widget to another parent or index',\n params: [\n { name: 'name', required: false, description: 'Widget name from snapshot.outline.' },\n { name: 'path', required: false, description: 'Widget path from snapshot.outline when it has no name.' },\n { name: 'parentName', required: false, description: 'Destination parent name. Omit to reorder under the current parent.' },\n { name: 'parentPath', required: false, description: 'Destination parent path when the parent has no name.' },\n { name: 'index', required: false, description: 'Child index under the destination parent.' },\n ],\n },\n {\n id: AXE_AI_FORMBUILDER_PAGE_ACTION_APPLY_LAYOUT,\n title: 'Replace the whole canvas with a complete designer tree',\n params: [\n {\n name: 'json',\n required: true,\n description: 'Complete document-layout or page-layout. Use only for a brand-new form or a large restructure.',\n },\n {\n name: 'replaceAll',\n required: false,\n description: 'Set true only when the user asked for a brand-new form. Otherwise a much smaller tree is rejected.',\n },\n ],\n },\n];\n\n//#endregion\n\n//#region ----- Snapshot -----\n\nexport function axeBuildFormbuilderDesignerPageContextSnapshot(args: {\n title: string;\n outline?: AXPPageContextOutlineItem[];\n}): AXPPageContextSnapshot {\n const title = args.title.trim() || 'Layout designer';\n return {\n kind: 'layout-designer',\n title,\n status: 'ready',\n entity: {\n fullName: AXE_AI_FORMBUILDER_DESIGNER_ENTITY_TYPE,\n title,\n },\n ...(args.outline?.length ? { outline: args.outline } : {}),\n actions: AXE_AI_FORMBUILDER_PAGE_CONTEXT_ACTIONS,\n };\n}\n\nexport function axeResolvePageContextLayoutJson(args: Record<string, unknown>): string {\n return axeResolveLayoutJsonInput(args);\n}\n\nexport function axeReadReplaceAllFlag(args: Record<string, unknown>): boolean {\n const raw = args['replaceAll'];\n return raw === true || raw === 'true';\n}\n\n/**\n * Blocks apply-layout from wiping a rich canvas with a flattened/partial tree\n * (the usual supervisor failure: rewrite the form as a handful of text-editors).\n */\nexport function axeDesignerApplyLooksLikeWipe(current: unknown, incoming: unknown): string | null {\n const currentCount = countWidgetNodes(current);\n const incomingCount = countWidgetNodes(incoming);\n if (currentCount >= 12 && incomingCount < Math.max(8, Math.floor(currentCount * 0.5))) {\n return `apply-layout refused: the new tree has ${incomingCount} widgets but the canvas has ${currentCount}. Use add-widget / update-widget / remove-widget for field edits. Use replaceAll=true only for a brand-new form.`;\n }\n if (layoutHasType(current, 'fieldset-layout') && !layoutHasType(incoming, 'fieldset-layout')) {\n return 'apply-layout refused: the canvas uses fieldset-layout sections. Do not flatten the form. Use add-widget / update-widget / remove-widget for field edits.';\n }\n if (layoutHasType(current, 'form-field') && !layoutHasType(incoming, 'form-field')) {\n return 'apply-layout refused: labeled form-field wrappers were dropped. Keep the existing section/field structure and only change what the user asked.';\n }\n return null;\n}\n\nfunction countWidgetNodes(value: unknown): number {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return 0;\n }\n const row = value as Record<string, unknown>;\n let count = typeof row['type'] === 'string' && row['type'].trim() ? 1 : 0;\n const children = row['children'];\n if (Array.isArray(children)) {\n for (const child of children) {\n count += countWidgetNodes(child);\n }\n }\n return count;\n}\n\nfunction layoutHasType(value: unknown, type: string): boolean {\n if (!value || typeof value !== 'object') {\n return false;\n }\n if (Array.isArray(value)) {\n return value.some((item) => layoutHasType(item, type));\n }\n const row = value as Record<string, unknown>;\n if (typeof row['type'] === 'string' && row['type'].trim() === type) {\n return true;\n }\n return layoutHasType(row['children'], type);\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport {\n AXMContextualAssistLauncherService,\n type AXMContextualAssistColumnValue,\n} from '@acorex-platform/extension-ai-conversation-client';\nimport {\n AXPPageContextPriority,\n AXPPageContextRegistry,\n type AXPPageContextRunResult,\n type AXPPageContextSnapshot,\n} from '@acorex-platform/framework-client/core';\nimport type { AXPDesignerService } from '@acorex-platform/framework-client/layout/designer';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { coerceUnknownToMultiLanguageString, type AXPMultiLanguageString } from '@acorex-platform/framework-shared/core';\nimport {\n AXMConversationRealtimeBus,\n} from '@acorex-platform/module-conversation-client';\nimport { DestroyRef, inject, Injectable } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { merge } from 'rxjs';\nimport {\n axeAssistMessageReadyToApply,\n axeDesignerLayoutJsonFromAssistMessage,\n} from './ai-formbuilder-designer-apply.util';\nimport {\n axeBuildFormTemplateRecordAssistColumns,\n axeBuildFormbuilderDesignerAssistPayload,\n} from './ai-formbuilder-designer-assist-context.util';\nimport {\n AXE_AI_FORMBUILDER_ASSIST_ACTION,\n AXE_AI_FORMBUILDER_ASSIST_KIND,\n AXE_AI_FORMBUILDER_DESIGNER_ASSIST_ID,\n AXE_AI_FORMBUILDER_DESIGNER_DRAFT_ENTITY_ID,\n AXE_AI_FORMBUILDER_DESIGNER_ENTITY_TYPE,\n AXE_AI_FORMBUILDER_PAGE_ACTION_ADD_WIDGET,\n AXE_AI_FORMBUILDER_PAGE_ACTION_APPLY_LAYOUT,\n AXE_AI_FORMBUILDER_PAGE_ACTION_MOVE_WIDGET,\n AXE_AI_FORMBUILDER_PAGE_ACTION_REMOVE_WIDGET,\n AXE_AI_FORMBUILDER_PAGE_ACTION_UPDATE_WIDGET,\n AXE_AI_FORMBUILDER_PAGE_CONTEXT_ID,\n} from './ai-formbuilder-designer-entity-chat.constants';\nimport {\n axeBuildDesignerOutline,\n axeFindDesignerWidget,\n axeReadOptionalIndex,\n axeReadOptionalTriggers,\n axeReadOptionalVisible,\n axeReadStringArg,\n axeResolveWidgetNodeInput,\n type AXEAiFormbuilderDesignerOutlineItem,\n} from './ai-formbuilder-designer-ops.util';\nimport {\n axeBuildFormbuilderDesignerPageContextSnapshot,\n axeDesignerApplyLooksLikeWipe,\n axeReadReplaceAllFlag,\n axeResolvePageContextLayoutJson,\n} from './ai-formbuilder-designer-page-context.util';\nimport {\n axeIsDesignerCanvasRoot,\n axeParseAndValidateLayoutJson,\n} from './commands/validate-layout-json.util';\n\n//#endregion\n\n//#region ----- Service -----\n\n/**\n * Form-template designer AI assist: opens the dedicated form-designer-assistant\n * and advertises designer API callbacks on page context (Page:GetContext / Page:RunAction).\n */\n@Injectable({ providedIn: 'root' })\nexport class AXEAiFormbuilderDesignerAiAssistService {\n //#region ----- Services & Dependencies -----\n\n private readonly launcher = inject(AXMContextualAssistLauncherService, { optional: true });\n private readonly translationService = inject(AXTranslationService);\n private readonly toastService = inject(AXToastService);\n private readonly entityService = inject(AXPEntityService, { optional: true });\n private readonly pageContext = inject(AXPPageContextRegistry);\n private readonly realtimeBus = inject(AXMConversationRealtimeBus, { optional: true });\n private readonly destroyRef = inject(DestroyRef);\n\n //#endregion\n\n //#region ----- State Signals -----\n\n private designer: AXPDesignerService | null = null;\n private lastAppliedJson = '';\n private pageTitle = '';\n\n //#endregion\n\n //#region ----- Lifecycle -----\n\n constructor() {\n const bus = this.realtimeBus;\n if (!bus) {\n return;\n }\n merge(bus.messageStream$, bus.messageUpdates$)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((message) => {\n void this.tryApplyFromAssistMessage(message);\n });\n }\n\n //#endregion\n\n //#region ----- Public API -----\n\n /**\n * Binds the live designer and advertises add/update/remove/move/apply-layout on page context.\n * Pass the header {@link DestroyRef} so the registration clears when the designer unmounts.\n */\n bindDesigner(designer: unknown, owner?: DestroyRef): void {\n this.designer = designer as AXPDesignerService;\n this.designer.ensureWidgetTreeMeta?.();\n void this.translationService\n .translateAsync('@form-template-management:designerAi.dialog-title')\n .then((title) => {\n this.pageTitle = title;\n });\n if (!owner) {\n this.pageContext.activate(AXE_AI_FORMBUILDER_PAGE_CONTEXT_ID);\n return;\n }\n\n this.pageContext.register({\n owner,\n id: AXE_AI_FORMBUILDER_PAGE_CONTEXT_ID,\n priority: AXPPageContextPriority.Page,\n getSnapshot: () => this.buildPageSnapshot(),\n run: (actionId, args) => this.runPageAction(actionId, args),\n });\n this.pageContext.activate(AXE_AI_FORMBUILDER_PAGE_CONTEXT_ID);\n }\n\n /**\n * Toggles contextual assist for the designer's current template (close if open, otherwise open).\n */\n async toggleFromDesigner(designer: unknown): Promise<boolean> {\n const launcher = this.launcher;\n if (!launcher) {\n return this.warnConversationUnavailable();\n }\n if (launcher.isOpen()) {\n launcher.close();\n return true;\n }\n return this.runFromDesigner(designer);\n }\n\n /**\n * Opens contextual assist for the designer's current template and binds the canvas for apply.\n */\n async runFromDesigner(designer: unknown): Promise<boolean> {\n const launcher = this.launcher;\n if (!launcher) {\n return this.warnConversationUnavailable();\n }\n\n const svc = designer as AXPDesignerService;\n this.bindDesigner(svc);\n const recordId = svc.templateId()?.trim() || AXE_AI_FORMBUILDER_DESIGNER_DRAFT_ENTITY_ID;\n const entityTitle = await this.translationService.translateAsync(\n '@form-template-management:designerAi.dialog-title',\n );\n this.pageTitle = entityTitle;\n const columns = await this.loadTemplateColumns(recordId);\n const payload = axeBuildFormbuilderDesignerAssistPayload(svc, {\n entityTitle,\n recordId,\n columns,\n });\n\n await launcher.open(\n {\n kind: AXE_AI_FORMBUILDER_ASSIST_KIND,\n actionName: AXE_AI_FORMBUILDER_ASSIST_ACTION,\n title: entityTitle,\n payload: { ...payload },\n },\n { assistId: AXE_AI_FORMBUILDER_DESIGNER_ASSIST_ID, forceNewChat: false },\n );\n return true;\n }\n\n /**\n * Validates designer JSON and loads it onto the bound canvas (does not save).\n */\n async applyLayoutJson(\n json: string,\n options?: { replaceAll?: boolean },\n ): Promise<{ applied: boolean; errors: string[] }> {\n const designer = this.designer;\n if (!designer) {\n return {\n applied: false,\n errors: ['The layout designer is not bound. Open the form designer page so page context can apply the canvas.'],\n };\n }\n\n const parsed = axeParseAndValidateLayoutJson(json);\n if (!parsed.valid || !parsed.normalizedJson) {\n return { applied: false, errors: parsed.errors };\n }\n\n let root: unknown;\n try {\n root = JSON.parse(parsed.normalizedJson) as unknown;\n } catch {\n return { applied: false, errors: parsed.errors };\n }\n if (!axeIsDesignerCanvasRoot(root)) {\n return {\n applied: false,\n errors: [\n 'Designer updates need a document-layout or page-layout root. Chat block-layout trees are not applied to the canvas.',\n ],\n };\n }\n\n if (!options?.replaceAll) {\n const wipe = this.detectApplyWipe(root);\n if (wipe) {\n return { applied: false, errors: [wipe] };\n }\n }\n\n if (this.lastAppliedJson === parsed.normalizedJson) {\n return { applied: true, errors: [] };\n }\n\n try {\n await designer.loadByContent(parsed.normalizedJson);\n designer.unsavedChanges.set(true);\n this.lastAppliedJson = parsed.normalizedJson;\n const title = await this.translationService.translateAsync(\n '@form-template-management:designerAi.loading.complete',\n );\n const content = await this.translationService.translateAsync(\n '@form-template-management:designerAi.applied-hint',\n );\n await this.toastService.show({ color: 'success', title, content });\n return { applied: true, errors: [] };\n } catch (error) {\n const message = error instanceof Error ? error.message : 'The layout could not be applied to the designer canvas.';\n return { applied: false, errors: [message] };\n }\n }\n\n outline(): { items: AXEAiFormbuilderDesignerOutlineItem[]; errors: string[] } {\n const designer = this.designer;\n if (!designer) {\n return { items: [], errors: [unboundDesignerError()] };\n }\n return { items: axeBuildDesignerOutline(designer.document()), errors: [] };\n }\n\n addWidget(input: {\n parentName?: string;\n parentPath?: string;\n widget?: unknown;\n index?: unknown;\n }): { applied: boolean; name?: string; path?: string; errors: string[] } {\n const designer = this.designer;\n if (!designer) {\n return { applied: false, errors: [unboundDesignerError()] };\n }\n const widget = axeResolveWidgetNodeInput(input.widget);\n if (!widget) {\n return { applied: false, errors: ['widget must be an AXPWidgetNode object with a string type.'] };\n }\n const parentHit = this.resolveWidgetRef(input.parentName, input.parentPath);\n if (!parentHit) {\n return { applied: false, errors: [missingWidgetRefError('parent', input.parentName, input.parentPath)] };\n }\n try {\n const added = designer.addWidget(parentHit.node, widget);\n designer.ensureWidgetTreeMeta?.();\n const index = axeReadOptionalIndex(input.index);\n if (index != null) {\n moveChildToIndex(parentHit.node, added, index);\n designer.refresh({ widget: parentHit.node });\n }\n designer.unsavedChanges.set(true);\n const outline = axeBuildDesignerOutline(designer.document());\n const addedName = typeof added.name === 'string' ? added.name.trim() : '';\n const addedHit = addedName ? outline.find((item) => item.name === addedName) : undefined;\n return {\n applied: true,\n errors: [],\n ...(addedName ? { name: addedName } : {}),\n ...(addedHit?.path ? { path: addedHit.path } : {}),\n };\n } catch (error) {\n return { applied: false, errors: [error instanceof Error ? error.message : 'The widget could not be added.'] };\n }\n }\n\n updateWidget(input: {\n name?: string;\n path?: string;\n options?: unknown;\n validations?: unknown;\n triggers?: unknown;\n visible?: unknown;\n }): { applied: boolean; errors: string[] } {\n const designer = this.designer;\n if (!designer) {\n return { applied: false, errors: [unboundDesignerError()] };\n }\n const hit = this.resolveWidgetRef(input.name, input.path);\n if (!hit) {\n return { applied: false, errors: [missingWidgetRefError('widget', input.name, input.path)] };\n }\n const options: Record<string, unknown> = {};\n if (input.options != null && typeof input.options === 'object' && !Array.isArray(input.options)) {\n Object.assign(options, input.options);\n }\n if (input.validations != null) {\n options['validations'] = input.validations;\n }\n const triggers = axeReadOptionalTriggers(input.triggers);\n const visible = axeReadOptionalVisible(input.visible);\n const patch: Record<string, unknown> = {};\n if (Object.keys(options).length > 0) {\n patch['options'] = options;\n }\n if (triggers.set) {\n patch['triggers'] = triggers.value ?? [];\n }\n if (visible.set) {\n patch['visible'] = visible.value;\n }\n if (Object.keys(patch).length === 0) {\n return {\n applied: false,\n errors: ['Provide options, validations, triggers, and/or visible to update.'],\n };\n }\n try {\n designer.update({ widget: hit.node, values: patch, mode: 'update' });\n designer.unsavedChanges.set(true);\n return { applied: true, errors: [] };\n } catch (error) {\n return { applied: false, errors: [error instanceof Error ? error.message : 'The widget could not be updated.'] };\n }\n }\n\n removeWidget(input: { name?: string; path?: string }): { applied: boolean; errors: string[] } {\n const designer = this.designer;\n if (!designer) {\n return { applied: false, errors: [unboundDesignerError()] };\n }\n const hit = this.resolveWidgetRef(input.name, input.path);\n if (!hit) {\n return { applied: false, errors: [missingWidgetRefError('widget', input.name, input.path)] };\n }\n try {\n designer.removeWidget(hit.node);\n designer.unsavedChanges.set(true);\n return { applied: true, errors: [] };\n } catch (error) {\n return { applied: false, errors: [error instanceof Error ? error.message : 'The widget could not be removed.'] };\n }\n }\n\n moveWidget(input: {\n name?: string;\n path?: string;\n parentName?: string;\n parentPath?: string;\n index?: unknown;\n }): { applied: boolean; errors: string[] } {\n const designer = this.designer;\n if (!designer) {\n return { applied: false, errors: [unboundDesignerError()] };\n }\n const hit = this.resolveWidgetRef(input.name, input.path);\n if (!hit?.parent) {\n return { applied: false, errors: [missingWidgetRefError('widget', input.name, input.path)] };\n }\n const parentName = axeReadStringArg(input.parentName);\n const parentPath = axeReadStringArg(input.parentPath);\n const nextParentNode =\n parentName || parentPath\n ? this.resolveWidgetRef(input.parentName, input.parentPath)?.node\n : hit.parent;\n if (!nextParentNode) {\n return { applied: false, errors: [missingWidgetRefError('parent', input.parentName, input.parentPath)] };\n }\n const index = axeReadOptionalIndex(input.index);\n try {\n if (nextParentNode !== hit.parent) {\n const from = hit.parent.children;\n if (!Array.isArray(from)) {\n return { applied: false, errors: ['The current parent has no children.'] };\n }\n const at = from.indexOf(hit.node);\n if (at < 0) {\n return { applied: false, errors: ['The widget is no longer under its parent.'] };\n }\n from.splice(at, 1);\n nextParentNode.children = nextParentNode.children ?? [];\n const insertAt =\n index == null\n ? nextParentNode.children.length\n : Math.max(0, Math.min(index, nextParentNode.children.length));\n nextParentNode.children.splice(insertAt, 0, hit.node);\n designer.refresh({ widget: hit.parent });\n designer.refresh({ widget: nextParentNode });\n } else if (index != null) {\n moveChildToIndex(hit.parent, hit.node, index);\n designer.refresh({ widget: hit.parent });\n } else {\n return { applied: false, errors: ['Provide parentName/parentPath or index to move the widget.'] };\n }\n designer.unsavedChanges.set(true);\n return { applied: true, errors: [] };\n } catch (error) {\n return { applied: false, errors: [error instanceof Error ? error.message : 'The widget could not be moved.'] };\n }\n }\n\n //#endregion\n\n //#region ----- Page context -----\n\n private buildPageSnapshot(): AXPPageContextSnapshot {\n return axeBuildFormbuilderDesignerPageContextSnapshot({\n title: this.pageTitle,\n outline: this.designer ? this.outline().items : undefined,\n });\n }\n\n private detectApplyWipe(incoming: unknown): string | null {\n const designer = this.designer;\n if (!designer) {\n return null;\n }\n try {\n const currentRaw = designer.export();\n const current = JSON.parse(typeof currentRaw === 'string' ? currentRaw : '') as unknown;\n return axeDesignerApplyLooksLikeWipe(current, incoming);\n } catch {\n return null;\n }\n }\n\n private async runPageAction(\n actionId: string,\n args: Record<string, unknown>,\n ): Promise<AXPPageContextRunResult> {\n if (actionId === AXE_AI_FORMBUILDER_PAGE_ACTION_ADD_WIDGET) {\n const result = this.addWidget(args);\n return this.pageActionResult(result.applied, result.errors[0]);\n }\n if (actionId === AXE_AI_FORMBUILDER_PAGE_ACTION_UPDATE_WIDGET) {\n const result = this.updateWidget(args);\n return this.pageActionResult(result.applied, result.errors[0]);\n }\n if (actionId === AXE_AI_FORMBUILDER_PAGE_ACTION_REMOVE_WIDGET) {\n const result = this.removeWidget(args);\n return this.pageActionResult(result.applied, result.errors[0]);\n }\n if (actionId === AXE_AI_FORMBUILDER_PAGE_ACTION_MOVE_WIDGET) {\n const result = this.moveWidget(args);\n return this.pageActionResult(result.applied, result.errors[0]);\n }\n if (actionId === AXE_AI_FORMBUILDER_PAGE_ACTION_APPLY_LAYOUT) {\n const json = axeResolvePageContextLayoutJson(args);\n const result = await this.applyLayoutJson(json, { replaceAll: axeReadReplaceAllFlag(args) });\n return this.pageActionResult(result.applied, result.errors[0] ?? 'Layout was not applied.');\n }\n return {\n success: false,\n message: `Unknown page action \"${actionId}\".`,\n snapshot: this.buildPageSnapshot(),\n };\n }\n\n private pageActionResult(success: boolean, error?: string): AXPPageContextRunResult {\n return {\n success,\n message: success ? undefined : (error ?? 'The designer action failed.'),\n snapshot: this.buildPageSnapshot(),\n };\n }\n\n //#endregion\n\n //#region ----- Auto apply -----\n\n private async tryApplyFromAssistMessage(message: { payload?: unknown; metadata?: unknown; type?: string }): Promise<void> {\n if (!this.designer || !axeAssistMessageReadyToApply(message as never)) {\n return;\n }\n const json = axeDesignerLayoutJsonFromAssistMessage(message as never);\n if (!json) {\n return;\n }\n await this.applyLayoutJson(json);\n }\n\n //#endregion\n\n //#region ----- Warnings -----\n\n private async warnConversationUnavailable(): Promise<boolean> {\n const title = await this.translationService.translateAsync('@general:messages.generic.warning.title');\n const content = await this.translationService.translateAsync(\n '@form-template-management:designerAi.no-conversation-module',\n );\n await this.toastService.show({ color: 'warning', title, content });\n return false;\n }\n\n //#endregion\n\n //#region ----- Template record -----\n\n private async loadTemplateColumns(recordId: string): Promise<AXMContextualAssistColumnValue[]> {\n if (!this.entityService || recordId === AXE_AI_FORMBUILDER_DESIGNER_DRAFT_ENTITY_ID) {\n return [];\n }\n try {\n const row = (await this.entityService.withEntity(AXE_AI_FORMBUILDER_DESIGNER_ENTITY_TYPE).data().byKey(recordId)) as\n | Record<string, unknown>\n | null\n | undefined;\n if (!row || typeof row !== 'object' || Array.isArray(row)) {\n return [];\n }\n return axeBuildFormTemplateRecordAssistColumns(row, (value) => this.asAssistDisplayText(value));\n } catch {\n return [];\n }\n }\n\n private resolveWidgetRef(name?: string, path?: string) {\n const designer = this.designer;\n if (!designer) {\n return null;\n }\n return axeFindDesignerWidget(designer.document(), {\n name: axeReadStringArg(name),\n path: axeReadStringArg(path),\n });\n }\n\n private asAssistDisplayText(value: unknown): string {\n if (typeof value === 'string') {\n return value.trim();\n }\n if (typeof value === 'number' || typeof value === 'boolean') {\n return String(value);\n }\n const resolved = this.translationService.resolve(\n coerceUnknownToMultiLanguageString(value) as AXPMultiLanguageString,\n )?.trim();\n return resolved ?? '';\n }\n\n //#endregion\n}\n\nfunction unboundDesignerError(): string {\n return 'The layout designer is not bound. Open the form designer page so the canvas can be edited.';\n}\n\nfunction missingWidgetRefError(kind: string, name?: string, path?: string): string {\n const nameText = axeReadStringArg(name);\n const pathText = axeReadStringArg(path);\n if (nameText || pathText) {\n return `No ${kind} found for ${nameText ? `name \"${nameText}\"` : `path \"${pathText}\"`}. Call Page:GetContext and use a name from snapshot.outline.`;\n }\n return `Provide ${kind}Name or ${kind}Path from snapshot.outline (Page:GetContext).`;\n}\n\nfunction moveChildToIndex(parent: { children?: unknown[] }, child: unknown, index: number): void {\n const children = parent.children;\n if (!Array.isArray(children)) {\n return;\n }\n const at = children.indexOf(child);\n if (at < 0) {\n return;\n }\n children.splice(at, 1);\n const insertAt = Math.max(0, Math.min(index, children.length));\n children.splice(insertAt, 0, child);\n}\n\n//#endregion\n","import { AXPHookProvider } from '@acorex-platform/framework-client/core';\nimport {\n AXPLayoutDesignerFooterHookKeys,\n type AXPLayoutDesignerFooterEndPayload,\n} from '@acorex-platform/framework-client/layout/designer';\nimport { inject } from '@angular/core';\nimport { AXEAiFormbuilderDesignerAiAssistService } from './ai-formbuilder-designer-ai-assist.service';\n\n//#region ----- Formbuilder designer footer -----\n\n/** Registers the layout designer footer-end magic-icon button for AI assist. */\nexport const AXEAiFormbuilderDesignerFooterHookProvider: AXPHookProvider<\n AXPLayoutDesignerFooterEndPayload,\n AXPLayoutDesignerFooterEndPayload\n> = {\n key: AXPLayoutDesignerFooterHookKeys.end,\n priority: 40,\n execute: (payload: AXPLayoutDesignerFooterEndPayload) => {\n const assist = inject(AXEAiFormbuilderDesignerAiAssistService);\n assist.bindDesigner(payload.designer, payload.owner);\n\n payload.items.push({\n id: 'extensions-ai-formbuilder-layout-assist-footer',\n priority: 20,\n labelKey: '@form-template-management:designerAi.menu',\n iconClass: 'fa-solid fa-wand-magic-sparkles',\n run: () => {\n void assist.toggleFromDesigner(payload.designer);\n },\n });\n return payload;\n },\n};\n\n//#endregion\n","import { AXPHookProvider } from '@acorex-platform/framework-client/core';\nimport {\n AXPLayoutDesignerHeaderMenuHookKeys,\n type AXPLayoutDesignerHeaderMenuSubmenuPayload,\n} from '@acorex-platform/framework-client/layout/designer';\nimport { inject } from '@angular/core';\nimport { AXEAiFormbuilderDesignerAiAssistService } from './ai-formbuilder-designer-ai-assist.service';\n\n//#region ----- Formbuilder designer Help menu -----\n\n/** Registers the layout designer Help-menu entry for AI assist (wand icon). */\nexport const AXEAiFormbuilderDesignerHelpMenuHookProvider: AXPHookProvider<\n AXPLayoutDesignerHeaderMenuSubmenuPayload,\n AXPLayoutDesignerHeaderMenuSubmenuPayload\n> = {\n key: AXPLayoutDesignerHeaderMenuHookKeys.submenu,\n priority: 40,\n execute: (payload: AXPLayoutDesignerHeaderMenuSubmenuPayload) => {\n if (payload.parentMenuId !== 'help') {\n return payload;\n }\n\n const assist = inject(AXEAiFormbuilderDesignerAiAssistService);\n assist.bindDesigner(payload.designer, payload.owner);\n\n payload.items.push({\n id: 'extensions-ai-formbuilder-layout-assist-help',\n priority: 20,\n labelKey: '@form-template-management:designerAi.menu',\n iconClass: 'fa-solid fa-wand-magic-sparkles',\n run: () => {\n void assist.toggleFromDesigner(payload.designer);\n },\n });\n return payload;\n },\n};\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type {\n AXPOutputContractTranscriptSegmentDefinition,\n AXPOutputContractTranscriptSegmentProvider,\n} from '@acorex-platform/framework-client/common';\n\n//#endregion\n\n//#region ---- Formbuilder node segment preset ----\n\nconst FORM_BUILDER_NODE_SEGMENT: AXPOutputContractTranscriptSegmentDefinition = {\n name: 'node',\n title: '@ai-management:agents.entities.agent.fields.output-contract.transcript-segment.options.node',\n applicableKinds: ['object'],\n contract: {\n kind: 'object',\n transcriptSegment: 'node',\n validationCommandName: 'AiFormbuilder:ValidateLayoutJsonForAi',\n structuredRetries: 3,\n schemaSummary:\n 'Chat UI: block-layout or table-layout root with mode edit/view. Form Template designer: document-layout → page-layout → fieldset/flex/grid. No raw CSS keys.',\n },\n};\n\n/**\n * Enriches the built-in `node` transcript segment with formbuilder validation and schema hints.\n */\nexport class AXPAiFormbuilderOutputContractTranscriptSegmentProvider\n implements AXPOutputContractTranscriptSegmentProvider\n{\n provide(): AXPOutputContractTranscriptSegmentDefinition[] {\n return [FORM_BUILDER_NODE_SEGMENT];\n }\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { NgModule } from '@angular/core';\nimport { AXP_OUTPUT_CONTRACT_TRANSCRIPT_SEGMENT_PROVIDER } from '@acorex-platform/framework-client/common';\nimport { AXP_HOOK_PROVIDER } from '@acorex-platform/framework-client/core';\nimport { provideCommandSetups } from '@acorex-platform/framework-client/runtime';\nimport { AXEAiFormbuilderDesignerFooterHookProvider } from './ai-formbuilder-designer-footer.hook';\nimport { AXEAiFormbuilderDesignerHelpMenuHookProvider } from './ai-formbuilder-designer-help-menu.hook';\nimport {\n AXE_AI_FORMBUILDER_ADD_WIDGET_COMMAND,\n AXE_AI_FORMBUILDER_APPLY_LAYOUT_COMMAND,\n AXE_AI_FORMBUILDER_MOVE_WIDGET_COMMAND,\n AXE_AI_FORMBUILDER_OUTLINE_LAYOUT_COMMAND,\n AXE_AI_FORMBUILDER_REMOVE_WIDGET_COMMAND,\n AXE_AI_FORMBUILDER_UPDATE_WIDGET_COMMAND,\n AXE_AI_FORMBUILDER_VALIDATE_LAYOUT_COMMAND,\n} from './ai-formbuilder-designer-entity-chat.constants';\nimport { AXPAiFormbuilderOutputContractTranscriptSegmentProvider } from './output-contract-transcript-segment.formbuilder.provider';\n\n//#endregion\n\n//#region ----- Module -----\n\n/**\n * Optional AI assist on the form-template designer (Help menu + footer magic icon).\n * Register next to {@link AXEAIConversationExtensionModule} in the application.\n */\n@NgModule({\n providers: [\n provideCommandSetups([\n {\n key: AXE_AI_FORMBUILDER_VALIDATE_LAYOUT_COMMAND,\n command: () =>\n import('./commands/validate-layout-json-for-ai.command').then(\n (c) => c.AXEAiFormbuilderValidateLayoutJsonForAiCommand,\n ),\n },\n {\n key: AXE_AI_FORMBUILDER_APPLY_LAYOUT_COMMAND,\n command: () =>\n import('./commands/apply-layout-json-for-ai.command').then(\n (c) => c.AXEAiFormbuilderApplyLayoutJsonForAiCommand,\n ),\n },\n {\n key: AXE_AI_FORMBUILDER_OUTLINE_LAYOUT_COMMAND,\n command: () =>\n import('./commands/outline-layout-for-ai.command').then(\n (c) => c.AXEAiFormbuilderOutlineLayoutForAiCommand,\n ),\n },\n {\n key: AXE_AI_FORMBUILDER_ADD_WIDGET_COMMAND,\n command: () =>\n import('./commands/add-widget-for-ai.command').then((c) => c.AXEAiFormbuilderAddWidgetForAiCommand),\n },\n {\n key: AXE_AI_FORMBUILDER_UPDATE_WIDGET_COMMAND,\n command: () =>\n import('./commands/update-widget-for-ai.command').then((c) => c.AXEAiFormbuilderUpdateWidgetForAiCommand),\n },\n {\n key: AXE_AI_FORMBUILDER_REMOVE_WIDGET_COMMAND,\n command: () =>\n import('./commands/remove-widget-for-ai.command').then((c) => c.AXEAiFormbuilderRemoveWidgetForAiCommand),\n },\n {\n key: AXE_AI_FORMBUILDER_MOVE_WIDGET_COMMAND,\n command: () =>\n import('./commands/move-widget-for-ai.command').then((c) => c.AXEAiFormbuilderMoveWidgetForAiCommand),\n },\n ]),\n {\n provide: AXP_HOOK_PROVIDER,\n multi: true,\n useValue: AXEAiFormbuilderDesignerHelpMenuHookProvider,\n },\n {\n provide: AXP_HOOK_PROVIDER,\n multi: true,\n useValue: AXEAiFormbuilderDesignerFooterHookProvider,\n },\n {\n provide: AXP_OUTPUT_CONTRACT_TRANSCRIPT_SEGMENT_PROVIDER,\n useClass: AXPAiFormbuilderOutputContractTranscriptSegmentProvider,\n multi: true,\n },\n ],\n})\nexport class AXEAIFormBuilderExtensionModule {}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport type { AXPWidgetNode } from '@acorex-platform/framework-shared/core';\nimport {\n axeBuildDesignerOutline,\n axeFindDesignerWidget,\n axeReadOptionalIndex,\n axeReadOptionalTriggers,\n axeReadOptionalVisible,\n axeReadStringArg,\n axeResolveWidgetNodeInput,\n type AXEAiFormbuilderDesignerOutlineItem,\n} from './ai-formbuilder-designer-ops.util';\nimport { axeResolveLayoutJsonInput } from './commands/validate-layout-json.util';\n\n//#endregion\n\n//#region ----- Types -----\n\nexport interface AXEAiFormbuilderLayoutJsonOutlineResult {\n items: AXEAiFormbuilderDesignerOutlineItem[];\n errors: string[];\n}\n\nexport interface AXEAiFormbuilderLayoutJsonMutationResult {\n applied: boolean;\n json?: string;\n name?: string;\n path?: string;\n errors: string[];\n}\n\n//#endregion\n\n//#region ----- Outline -----\n\nexport function axeOutlineLayoutJson(input: {\n json?: unknown;\n layoutJson?: unknown;\n}): AXEAiFormbuilderLayoutJsonOutlineResult {\n const parsed = parseLayoutTree(input);\n if (!parsed.root) {\n return { items: [], errors: parsed.errors };\n }\n return { items: axeBuildDesignerOutline(parsed.root), errors: [] };\n}\n\n//#endregion\n\n//#region ----- Mutations -----\n\nexport function axeAddWidgetToLayoutJson(input: {\n json?: unknown;\n layoutJson?: unknown;\n parentName?: string;\n parentPath?: string;\n widget?: unknown;\n index?: unknown;\n}): AXEAiFormbuilderLayoutJsonMutationResult {\n const parsed = parseLayoutTree(input);\n if (!parsed.root) {\n return fail(parsed.errors);\n }\n const widget = axeResolveWidgetNodeInput(input.widget);\n if (!widget) {\n return fail(['widget must be an AXPWidgetNode object with a string type.']);\n }\n const parent = axeFindDesignerWidget(parsed.root, {\n name: axeReadStringArg(input.parentName),\n path: axeReadStringArg(input.parentPath),\n });\n if (!parent) {\n return fail([missingWidgetRefError('parent', input.parentName, input.parentPath)]);\n }\n parent.node.children = parent.node.children ?? [];\n const index = axeReadOptionalIndex(input.index);\n const insertAt =\n index == null ? parent.node.children.length : Math.max(0, Math.min(index, parent.node.children.length));\n parent.node.children.splice(insertAt, 0, widget);\n return success(parsed.root, widget);\n}\n\nexport function axeUpdateWidgetInLayoutJson(input: {\n json?: unknown;\n layoutJson?: unknown;\n name?: string;\n path?: string;\n options?: unknown;\n validations?: unknown;\n triggers?: unknown;\n visible?: unknown;\n}): AXEAiFormbuilderLayoutJsonMutationResult {\n const parsed = parseLayoutTree(input);\n if (!parsed.root) {\n return fail(parsed.errors);\n }\n const hit = axeFindDesignerWidget(parsed.root, {\n name: axeReadStringArg(input.name),\n path: axeReadStringArg(input.path),\n });\n if (!hit) {\n return fail([missingWidgetRefError('widget', input.name, input.path)]);\n }\n const options: Record<string, unknown> = {\n ...(hit.node.options && typeof hit.node.options === 'object' && !Array.isArray(hit.node.options)\n ? hit.node.options\n : {}),\n };\n if (input.options != null && typeof input.options === 'object' && !Array.isArray(input.options)) {\n Object.assign(options, input.options);\n }\n if (input.validations != null) {\n options['validations'] = input.validations;\n }\n const triggers = axeReadOptionalTriggers(input.triggers);\n const visible = axeReadOptionalVisible(input.visible);\n const touchedOptions = input.options != null || input.validations != null;\n if (!touchedOptions && !triggers.set && !visible.set) {\n return fail(['Provide options, validations, triggers, and/or visible to update.']);\n }\n if (touchedOptions) {\n hit.node.options = options;\n }\n if (triggers.set) {\n hit.node.triggers = triggers.value ?? [];\n }\n if (visible.set) {\n hit.node.visible = visible.value;\n }\n return success(parsed.root, hit.node, hit.path);\n}\n\nexport function axeRemoveWidgetFromLayoutJson(input: {\n json?: unknown;\n layoutJson?: unknown;\n name?: string;\n path?: string;\n}): AXEAiFormbuilderLayoutJsonMutationResult {\n const parsed = parseLayoutTree(input);\n if (!parsed.root) {\n return fail(parsed.errors);\n }\n const hit = axeFindDesignerWidget(parsed.root, {\n name: axeReadStringArg(input.name),\n path: axeReadStringArg(input.path),\n });\n if (!hit) {\n return fail([missingWidgetRefError('widget', input.name, input.path)]);\n }\n if (!hit.parent) {\n return fail(['Cannot remove the root widget.']);\n }\n const children = hit.parent.children;\n if (!Array.isArray(children)) {\n return fail(['The parent has no children.']);\n }\n const at = children.indexOf(hit.node);\n if (at < 0) {\n return fail(['The widget is no longer under its parent.']);\n }\n children.splice(at, 1);\n return { applied: true, errors: [], json: JSON.stringify(parsed.root) };\n}\n\nexport function axeMoveWidgetInLayoutJson(input: {\n json?: unknown;\n layoutJson?: unknown;\n name?: string;\n path?: string;\n parentName?: string;\n parentPath?: string;\n index?: unknown;\n}): AXEAiFormbuilderLayoutJsonMutationResult {\n const parsed = parseLayoutTree(input);\n if (!parsed.root) {\n return fail(parsed.errors);\n }\n const hit = axeFindDesignerWidget(parsed.root, {\n name: axeReadStringArg(input.name),\n path: axeReadStringArg(input.path),\n });\n if (!hit?.parent) {\n return fail([missingWidgetRefError('widget', input.name, input.path)]);\n }\n const parentName = axeReadStringArg(input.parentName);\n const parentPath = axeReadStringArg(input.parentPath);\n const nextParent =\n parentName || parentPath\n ? axeFindDesignerWidget(parsed.root, { name: parentName, path: parentPath })?.node\n : hit.parent;\n if (!nextParent) {\n return fail([missingWidgetRefError('parent', input.parentName, input.parentPath)]);\n }\n const index = axeReadOptionalIndex(input.index);\n const from = hit.parent.children;\n if (!Array.isArray(from)) {\n return fail(['The current parent has no children.']);\n }\n const at = from.indexOf(hit.node);\n if (at < 0) {\n return fail(['The widget is no longer under its parent.']);\n }\n if (nextParent === hit.parent && index == null) {\n return fail(['Provide parentName/parentPath or index to move the widget.']);\n }\n from.splice(at, 1);\n nextParent.children = nextParent.children ?? [];\n const insertAt =\n index == null\n ? nextParent.children.length\n : Math.max(0, Math.min(index, nextParent.children.length));\n nextParent.children.splice(insertAt, 0, hit.node);\n return success(parsed.root, hit.node);\n}\n\n//#endregion\n\n//#region ----- Parse -----\n\nfunction parseLayoutTree(input: { json?: unknown; layoutJson?: unknown }): {\n root: AXPWidgetNode | null;\n errors: string[];\n} {\n const raw = axeResolveLayoutJsonInput(input);\n if (!raw) {\n return { root: null, errors: ['Missing json. Pass the AXPWidgetNode tree as json.'] };\n }\n try {\n const parsed = JSON.parse(raw) as unknown;\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n return { root: null, errors: ['json must be an AXPWidgetNode object.'] };\n }\n const type = (parsed as Record<string, unknown>)['type'];\n if (typeof type !== 'string' || !type.trim()) {\n return { root: null, errors: ['json type must be a widget registry name.'] };\n }\n return { root: parsed as AXPWidgetNode, errors: [] };\n } catch (error) {\n return {\n root: null,\n errors: [error instanceof Error ? `JSON parse error: ${error.message}` : 'Invalid JSON.'],\n };\n }\n}\n\nfunction success(\n root: AXPWidgetNode,\n node: AXPWidgetNode,\n knownPath?: string,\n): AXEAiFormbuilderLayoutJsonMutationResult {\n const json = JSON.stringify(root);\n const name = typeof node.name === 'string' ? node.name.trim() : '';\n const outline = axeBuildDesignerOutline(root);\n const hit = name\n ? outline.find((item) => item.name === name)\n : knownPath\n ? outline.find((item) => item.path === knownPath)\n : undefined;\n return {\n applied: true,\n errors: [],\n json,\n ...(name ? { name } : {}),\n ...(hit?.path || knownPath ? { path: hit?.path ?? knownPath } : {}),\n };\n}\n\nfunction fail(errors: string[]): AXEAiFormbuilderLayoutJsonMutationResult {\n return { applied: false, errors };\n}\n\nfunction missingWidgetRefError(kind: string, name?: string, path?: string): string {\n const nameText = axeReadStringArg(name);\n const pathText = axeReadStringArg(path);\n if (nameText || pathText) {\n return `No ${kind} found for ${nameText ? `name \"${nameText}\"` : `path \"${pathText}\"`}. Call OutlineLayoutForAi with the same json.`;\n }\n return `Provide ${kind}Name or ${kind}Path from OutlineLayoutForAi.`;\n}\n\n//#endregion\n","import { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\n\nimport { Injectable } from '@angular/core';\nimport { axeParseAndValidateLayoutJson, axeResolveLayoutJsonInput } from './validate-layout-json.util';\n\n//#region ----- Types -----\n\n/** Result payload for {@link AXEAiFormbuilderValidateLayoutJsonForAiCommand}. */\nexport interface AXEAiFormbuilderValidateLayoutJsonForAiCommandData {\n valid: boolean;\n errors: string[];\n normalizedJson?: string;\n}\n\nexport interface AXEAiFormbuilderValidateLayoutJsonForAiCommandInput {\n json?: string | unknown;\n layoutJson?: string | unknown;\n}\n\n//#endregion\n\n//#region ----- Command -----\n\n@Injectable({ providedIn: 'root' })\nexport class AXEAiFormbuilderValidateLayoutJsonForAiCommand\n implements\n AXPCommand<AXEAiFormbuilderValidateLayoutJsonForAiCommandInput, AXEAiFormbuilderValidateLayoutJsonForAiCommandData>\n{\n async execute(\n input: AXEAiFormbuilderValidateLayoutJsonForAiCommandInput,\n ): AXPCommandExecuteResultPromise<AXEAiFormbuilderValidateLayoutJsonForAiCommandData> {\n const raw = axeResolveLayoutJsonInput(input);\n const data = axeParseAndValidateLayoutJson(raw);\n return {\n success: true,\n kind: 'object',\n data,\n ...(data.valid ? {} : { message: { text: data.errors[0] ?? 'Invalid layout JSON.' } }),\n };\n }\n}\n\n//#endregion\n","/**\n * Build-time only. Do not import from Angular modules.\n * Source: validate-layout-json-for-ai.command.ts — AXEAiFormbuilderValidateLayoutJsonForAiCommand.execute\n */\n\nimport { AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS, defineCommand } from '@acorex-platform/framework-shared/runtime';\nexport const axeAiFormbuilderValidateLayoutJsonForAiCommandDefinition = defineCommand({\n key: 'AiFormbuilder:ValidateLayoutJsonForAi',\n title: 'Validate widget layout JSON for AI (form template designer)',\n description:\n 'Parses a JSON string and checks it is a single root AXPWidgetNode (object with string type, optional children/options). Rejects raw CSS/DOM-style keys.',\n executionMode: 'frontend',\n inputs: [\n {\n name: 'json',\n title: 'Layout JSON string',\n description:\n 'Stringified widget tree: one root object with \"type\" (registry name). Optional markdown/json fences are stripped.',\n interface: { name: 'large-text-editor' },\n validations: [{ rule: 'required' }],\n },\n ],\n outcomes: {\n mode: 'static',\n values: ['success', 'failure'],\n },\n ai: {\n shortDescription:\n 'Validate specialist JSON is parseable and shaped like AXPWidgetNode before returning it to chat.',\n tags: ['ai-formbuilder', 'layout', 'ai', 'validation'],\n },\n capabilities: ['ai'],\n categories: [AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS],\n});\n","//#region ----- Imports -----\n\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { inject, Injectable } from '@angular/core';\nimport { AXEAiFormbuilderDesignerAiAssistService } from '../ai-formbuilder-designer-ai-assist.service';\nimport { axeResolveLayoutJsonInput } from './validate-layout-json.util';\n\n//#endregion\n\n//#region ----- Types -----\n\nexport interface AXEAiFormbuilderApplyLayoutJsonForAiCommandInput {\n json?: string | unknown;\n layoutJson?: string | unknown;\n}\n\nexport interface AXEAiFormbuilderApplyLayoutJsonForAiCommandData {\n applied: boolean;\n errors: string[];\n}\n\n//#endregion\n\n//#region ----- Command -----\n\n/** Applies validated designer JSON to the open form-template canvas. */\n@Injectable({ providedIn: 'root' })\nexport class AXEAiFormbuilderApplyLayoutJsonForAiCommand\n implements\n AXPCommand<AXEAiFormbuilderApplyLayoutJsonForAiCommandInput, AXEAiFormbuilderApplyLayoutJsonForAiCommandData>\n{\n //#region ----- Services & Dependencies -----\n\n private readonly assist = inject(AXEAiFormbuilderDesignerAiAssistService);\n\n //#endregion\n\n async execute(\n input: AXEAiFormbuilderApplyLayoutJsonForAiCommandInput,\n ): AXPCommandExecuteResultPromise<AXEAiFormbuilderApplyLayoutJsonForAiCommandData> {\n const raw = axeResolveLayoutJsonInput(input);\n const data = await this.assist.applyLayoutJson(raw);\n return {\n success: true,\n kind: 'object',\n data,\n ...(data.applied ? {} : { message: { text: data.errors[0] ?? 'Layout was not applied.' } }),\n };\n }\n}\n\n//#endregion\n","/**\n * Build-time only. Do not import from Angular modules.\n * Source: apply-layout-json-for-ai.command.ts — AXEAiFormbuilderApplyLayoutJsonForAiCommand.execute\n */\n\nimport { AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS, defineCommand } from '@acorex-platform/framework-shared/runtime';\n\nexport const axeAiFormbuilderApplyLayoutJsonForAiCommandDefinition = defineCommand({\n key: 'AiFormbuilder:ApplyLayoutJsonForAi',\n title: 'Apply widget layout JSON to the form designer',\n description:\n 'Validates a root AXPWidgetNode and loads it onto the open Form Template designer canvas (document-layout or page-layout). Prefer Page:RunAction apply-layout on form-designer-assistant for live canvas writes. Does not save — the user uses File → Save.',\n executionMode: 'frontend',\n inputs: [\n {\n name: 'json',\n title: 'Layout JSON string',\n description:\n 'Stringified designer widget tree. Root must be document-layout (form template) or page-layout (widget template).',\n interface: { name: 'large-text-editor' },\n validations: [{ rule: 'required' }],\n },\n ],\n outcomes: {\n mode: 'static',\n values: ['success', 'failure'],\n },\n ai: {\n shortDescription:\n 'Write validated designer JSON onto the open form-template canvas so the user sees the change immediately.',\n tags: ['ai-formbuilder', 'layout', 'ai', 'apply'],\n },\n capabilities: ['ai'],\n categories: [AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS],\n});\n","//#region ----- Imports -----\n\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { Injectable } from '@angular/core';\nimport {\n axeOutlineLayoutJson,\n type AXEAiFormbuilderLayoutJsonOutlineResult,\n} from '../ai-formbuilder-layout-json.util';\n\n//#endregion\n\n//#region ----- Types -----\n\nexport interface AXEAiFormbuilderOutlineLayoutForAiCommandInput {\n json?: unknown;\n layoutJson?: unknown;\n}\n\nexport type AXEAiFormbuilderOutlineLayoutForAiCommandData = AXEAiFormbuilderLayoutJsonOutlineResult;\n\n//#endregion\n\n//#region ----- Command -----\n\n@Injectable({ providedIn: 'root' })\nexport class AXEAiFormbuilderOutlineLayoutForAiCommand\n implements\n AXPCommand<AXEAiFormbuilderOutlineLayoutForAiCommandInput, AXEAiFormbuilderOutlineLayoutForAiCommandData>\n{\n async execute(\n input: AXEAiFormbuilderOutlineLayoutForAiCommandInput = {},\n ): AXPCommandExecuteResultPromise<AXEAiFormbuilderOutlineLayoutForAiCommandData> {\n const data = axeOutlineLayoutJson(input);\n return {\n success: true,\n kind: 'object',\n data,\n ...(data.errors[0] ? { message: { text: data.errors[0] } } : {}),\n };\n }\n}\n\n//#endregion\n","/**\n * Build-time only. Do not import from Angular modules.\n * Source: outline-layout-for-ai.command.ts — AXEAiFormbuilderOutlineLayoutForAiCommand.execute\n */\n\nimport { AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS, defineCommand } from '@acorex-platform/framework-shared/runtime';\n\nexport const axeAiFormbuilderOutlineLayoutForAiCommandDefinition = defineCommand({\n key: 'AiFormbuilder:OutlineLayoutForAi',\n title: 'Outline a layout JSON tree',\n description:\n 'Returns a compact list of widgets (name, type, label, parent, path) from an AXPWidgetNode JSON tree. Does not touch the live designer. Pass the same json to Add/Update/Remove/Move.',\n executionMode: 'frontend',\n inputs: [\n {\n name: 'json',\n title: 'Layout JSON',\n description: 'AXPWidgetNode tree (string or object). Chat block-layout or designer document-layout.',\n interface: { name: 'large-text-editor' },\n validations: [{ rule: 'required' }],\n },\n ],\n outcomes: {\n mode: 'static',\n values: ['success', 'failure'],\n },\n ai: {\n shortDescription: 'List widgets in a layout JSON tree by name/type/path without rewriting the tree.',\n tags: ['ai-formbuilder', 'layout', 'ai', 'outline', 'json'],\n },\n capabilities: ['ai'],\n categories: [AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS],\n});\n","//#region ----- Imports -----\n\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { Injectable } from '@angular/core';\nimport {\n axeAddWidgetToLayoutJson,\n type AXEAiFormbuilderLayoutJsonMutationResult,\n} from '../ai-formbuilder-layout-json.util';\n\n//#endregion\n\n//#region ----- Types -----\n\nexport interface AXEAiFormbuilderAddWidgetForAiCommandInput {\n json?: unknown;\n layoutJson?: unknown;\n parentName?: string;\n parentPath?: string;\n widget?: unknown;\n index?: unknown;\n}\n\nexport type AXEAiFormbuilderAddWidgetForAiCommandData = AXEAiFormbuilderLayoutJsonMutationResult;\n\n//#endregion\n\n//#region ----- Command -----\n\n@Injectable({ providedIn: 'root' })\nexport class AXEAiFormbuilderAddWidgetForAiCommand\n implements\n AXPCommand<AXEAiFormbuilderAddWidgetForAiCommandInput, AXEAiFormbuilderAddWidgetForAiCommandData>\n{\n async execute(\n input: AXEAiFormbuilderAddWidgetForAiCommandInput,\n ): AXPCommandExecuteResultPromise<AXEAiFormbuilderAddWidgetForAiCommandData> {\n const data = axeAddWidgetToLayoutJson(input);\n return {\n success: true,\n kind: 'object',\n data,\n ...(data.applied ? {} : { message: { text: data.errors[0] ?? 'The widget was not added.' } }),\n };\n }\n}\n\n//#endregion\n","/**\n * Build-time only. Do not import from Angular modules.\n * Source: add-widget-for-ai.command.ts — AXEAiFormbuilderAddWidgetForAiCommand.execute\n */\n\nimport { AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS, defineCommand } from '@acorex-platform/framework-shared/runtime';\n\nexport const axeAiFormbuilderAddWidgetForAiCommandDefinition = defineCommand({\n key: 'AiFormbuilder:AddWidgetForAi',\n title: 'Add a widget in layout JSON',\n description:\n 'Inserts one AXPWidgetNode under a parent inside a layout JSON tree and returns the updated json. Does not touch the live designer. Address the parent by name or path from OutlineLayoutForAi.',\n executionMode: 'frontend',\n inputs: [\n {\n name: 'json',\n title: 'Layout JSON',\n description: 'Current AXPWidgetNode tree (string or object).',\n interface: { name: 'large-text-editor' },\n validations: [{ rule: 'required' }],\n },\n {\n name: 'parentName',\n title: 'Parent widget name',\n description: 'name from OutlineLayoutForAi. Prefer this over parentPath.',\n interface: { name: 'text-editor' },\n },\n {\n name: 'parentPath',\n title: 'Parent widget path',\n description: 'path from OutlineLayoutForAi when the parent has no name.',\n interface: { name: 'text-editor' },\n },\n {\n name: 'widget',\n title: 'Widget node',\n description: 'One AXPWidgetNode object (type plus options/children). Not the full tree.',\n interface: { name: 'json' },\n validations: [{ rule: 'required' }],\n },\n {\n name: 'index',\n title: 'Insert index',\n description: 'Optional child index under the parent. Omit to append.',\n interface: { name: 'number-editor' },\n },\n ],\n outcomes: {\n mode: 'static',\n values: ['success', 'failure'],\n },\n ai: {\n shortDescription: 'Add one widget under a named parent in a layout JSON tree and return the new json.',\n tags: ['ai-formbuilder', 'layout', 'ai', 'add', 'json'],\n },\n capabilities: ['ai'],\n categories: [AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS],\n});\n","//#region ----- Imports -----\n\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { Injectable } from '@angular/core';\nimport {\n axeUpdateWidgetInLayoutJson,\n type AXEAiFormbuilderLayoutJsonMutationResult,\n} from '../ai-formbuilder-layout-json.util';\n\n//#endregion\n\n//#region ----- Types -----\n\nexport interface AXEAiFormbuilderUpdateWidgetForAiCommandInput {\n json?: unknown;\n layoutJson?: unknown;\n name?: string;\n path?: string;\n options?: unknown;\n validations?: unknown;\n triggers?: unknown;\n visible?: unknown;\n}\n\nexport type AXEAiFormbuilderUpdateWidgetForAiCommandData = AXEAiFormbuilderLayoutJsonMutationResult;\n\n//#endregion\n\n//#region ----- Command -----\n\n@Injectable({ providedIn: 'root' })\nexport class AXEAiFormbuilderUpdateWidgetForAiCommand\n implements\n AXPCommand<AXEAiFormbuilderUpdateWidgetForAiCommandInput, AXEAiFormbuilderUpdateWidgetForAiCommandData>\n{\n async execute(\n input: AXEAiFormbuilderUpdateWidgetForAiCommandInput,\n ): AXPCommandExecuteResultPromise<AXEAiFormbuilderUpdateWidgetForAiCommandData> {\n const data = axeUpdateWidgetInLayoutJson(input);\n return {\n success: true,\n kind: 'object',\n data,\n ...(data.applied ? {} : { message: { text: data.errors[0] ?? 'The widget was not updated.' } }),\n };\n }\n}\n\n//#endregion\n","/**\n * Build-time only. Do not import from Angular modules.\n * Source: update-widget-for-ai.command.ts — AXEAiFormbuilderUpdateWidgetForAiCommand.execute\n */\n\nimport { AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS, defineCommand } from '@acorex-platform/framework-shared/runtime';\n\nexport const axeAiFormbuilderUpdateWidgetForAiCommandDefinition = defineCommand({\n key: 'AiFormbuilder:UpdateWidgetForAi',\n title: 'Update a widget in layout JSON',\n description:\n 'Patches options, validations, triggers, and/or visible on one widget inside a layout JSON tree and returns the updated json. triggers and visible sit on the node root, not inside options. Does not touch the live designer.',\n executionMode: 'frontend',\n inputs: [\n {\n name: 'json',\n title: 'Layout JSON',\n description: 'Current AXPWidgetNode tree (string or object).',\n interface: { name: 'large-text-editor' },\n validations: [{ rule: 'required' }],\n },\n {\n name: 'name',\n title: 'Widget name',\n description: 'name from OutlineLayoutForAi. Prefer this over path.',\n interface: { name: 'text-editor' },\n },\n {\n name: 'path',\n title: 'Widget path',\n description: 'path from OutlineLayoutForAi when the widget has no name.',\n interface: { name: 'text-editor' },\n },\n {\n name: 'options',\n title: 'Options patch',\n description: 'Partial options object merged onto the widget (label, hint, cols, …).',\n interface: { name: 'json' },\n },\n {\n name: 'validations',\n title: 'Validations',\n description: 'Replaces options.validations on the widget (e.g. [{ \"rule\": \"required\" }]).',\n interface: { name: 'json' },\n },\n {\n name: 'triggers',\n title: 'Triggers',\n description: 'Replaces node.triggers: [{ event, action }] expression strings. Empty array clears.',\n interface: { name: 'json' },\n },\n {\n name: 'visible',\n title: 'Visible',\n description: 'Replaces node.visible (boolean or \"{{ context.eval(...) }}\").',\n interface: { name: 'text-editor' },\n },\n ],\n outcomes: {\n mode: 'static',\n values: ['success', 'failure'],\n },\n ai: {\n shortDescription: 'Patch options, validations, triggers, or visible on one widget in a layout JSON tree.',\n tags: ['ai-formbuilder', 'layout', 'ai', 'update', 'json'],\n },\n capabilities: ['ai'],\n categories: [AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS],\n});\n","//#region ----- Imports -----\n\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { Injectable } from '@angular/core';\nimport {\n axeRemoveWidgetFromLayoutJson,\n type AXEAiFormbuilderLayoutJsonMutationResult,\n} from '../ai-formbuilder-layout-json.util';\n\n//#endregion\n\n//#region ----- Types -----\n\nexport interface AXEAiFormbuilderRemoveWidgetForAiCommandInput {\n json?: unknown;\n layoutJson?: unknown;\n name?: string;\n path?: string;\n}\n\nexport type AXEAiFormbuilderRemoveWidgetForAiCommandData = AXEAiFormbuilderLayoutJsonMutationResult;\n\n//#endregion\n\n//#region ----- Command -----\n\n@Injectable({ providedIn: 'root' })\nexport class AXEAiFormbuilderRemoveWidgetForAiCommand\n implements\n AXPCommand<AXEAiFormbuilderRemoveWidgetForAiCommandInput, AXEAiFormbuilderRemoveWidgetForAiCommandData>\n{\n async execute(\n input: AXEAiFormbuilderRemoveWidgetForAiCommandInput,\n ): AXPCommandExecuteResultPromise<AXEAiFormbuilderRemoveWidgetForAiCommandData> {\n const data = axeRemoveWidgetFromLayoutJson(input);\n return {\n success: true,\n kind: 'object',\n data,\n ...(data.applied ? {} : { message: { text: data.errors[0] ?? 'The widget was not removed.' } }),\n };\n }\n}\n\n//#endregion\n","/**\n * Build-time only. Do not import from Angular modules.\n * Source: remove-widget-for-ai.command.ts — AXEAiFormbuilderRemoveWidgetForAiCommand.execute\n */\n\nimport { AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS, defineCommand } from '@acorex-platform/framework-shared/runtime';\n\nexport const axeAiFormbuilderRemoveWidgetForAiCommandDefinition = defineCommand({\n key: 'AiFormbuilder:RemoveWidgetForAi',\n title: 'Remove a widget from layout JSON',\n description:\n 'Removes one widget from a layout JSON tree and returns the updated json. Does not touch the live designer. Cannot remove the root. Address the widget by name or path from OutlineLayoutForAi.',\n executionMode: 'frontend',\n inputs: [\n {\n name: 'json',\n title: 'Layout JSON',\n description: 'Current AXPWidgetNode tree (string or object).',\n interface: { name: 'large-text-editor' },\n validations: [{ rule: 'required' }],\n },\n {\n name: 'name',\n title: 'Widget name',\n description: 'name from OutlineLayoutForAi. Prefer this over path.',\n interface: { name: 'text-editor' },\n },\n {\n name: 'path',\n title: 'Widget path',\n description: 'path from OutlineLayoutForAi when the widget has no name.',\n interface: { name: 'text-editor' },\n },\n ],\n outcomes: {\n mode: 'static',\n values: ['success', 'failure'],\n },\n ai: {\n shortDescription: 'Remove one widget from a layout JSON tree and return the new json.',\n tags: ['ai-formbuilder', 'layout', 'ai', 'remove', 'json'],\n },\n capabilities: ['ai'],\n categories: [AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS],\n});\n","//#region ----- Imports -----\n\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { Injectable } from '@angular/core';\nimport {\n axeMoveWidgetInLayoutJson,\n type AXEAiFormbuilderLayoutJsonMutationResult,\n} from '../ai-formbuilder-layout-json.util';\n\n//#endregion\n\n//#region ----- Types -----\n\nexport interface AXEAiFormbuilderMoveWidgetForAiCommandInput {\n json?: unknown;\n layoutJson?: unknown;\n name?: string;\n path?: string;\n parentName?: string;\n parentPath?: string;\n index?: unknown;\n}\n\nexport type AXEAiFormbuilderMoveWidgetForAiCommandData = AXEAiFormbuilderLayoutJsonMutationResult;\n\n//#endregion\n\n//#region ----- Command -----\n\n@Injectable({ providedIn: 'root' })\nexport class AXEAiFormbuilderMoveWidgetForAiCommand\n implements\n AXPCommand<AXEAiFormbuilderMoveWidgetForAiCommandInput, AXEAiFormbuilderMoveWidgetForAiCommandData>\n{\n async execute(\n input: AXEAiFormbuilderMoveWidgetForAiCommandInput,\n ): AXPCommandExecuteResultPromise<AXEAiFormbuilderMoveWidgetForAiCommandData> {\n const data = axeMoveWidgetInLayoutJson(input);\n return {\n success: true,\n kind: 'object',\n data,\n ...(data.applied ? {} : { message: { text: data.errors[0] ?? 'The widget was not moved.' } }),\n };\n }\n}\n\n//#endregion\n","/**\n * Build-time only. Do not import from Angular modules.\n * Source: move-widget-for-ai.command.ts — AXEAiFormbuilderMoveWidgetForAiCommand.execute\n */\n\nimport { AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS, defineCommand } from '@acorex-platform/framework-shared/runtime';\n\nexport const axeAiFormbuilderMoveWidgetForAiCommandDefinition = defineCommand({\n key: 'AiFormbuilder:MoveWidgetForAi',\n title: 'Move a widget in layout JSON',\n description:\n 'Moves one widget to another parent and/or index inside a layout JSON tree and returns the updated json. Does not touch the live designer. Address widgets by name or path from OutlineLayoutForAi.',\n executionMode: 'frontend',\n inputs: [\n {\n name: 'json',\n title: 'Layout JSON',\n description: 'Current AXPWidgetNode tree (string or object).',\n interface: { name: 'large-text-editor' },\n validations: [{ rule: 'required' }],\n },\n {\n name: 'name',\n title: 'Widget name',\n description: 'name from OutlineLayoutForAi. Prefer this over path.',\n interface: { name: 'text-editor' },\n },\n {\n name: 'path',\n title: 'Widget path',\n description: 'path from OutlineLayoutForAi when the widget has no name.',\n interface: { name: 'text-editor' },\n },\n {\n name: 'parentName',\n title: 'New parent name',\n description: 'Destination parent name from OutlineLayoutForAi. Omit to reorder under the current parent.',\n interface: { name: 'text-editor' },\n },\n {\n name: 'parentPath',\n title: 'New parent path',\n description: 'Destination parent path when the parent has no name.',\n interface: { name: 'text-editor' },\n },\n {\n name: 'index',\n title: 'Insert index',\n description: 'Child index under the destination parent.',\n interface: { name: 'number-editor' },\n },\n ],\n outcomes: {\n mode: 'static',\n values: ['success', 'failure'],\n },\n ai: {\n shortDescription: 'Move one widget in a layout JSON tree and return the new json.',\n tags: ['ai-formbuilder', 'layout', 'ai', 'move', 'json'],\n },\n capabilities: ['ai'],\n categories: [AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS],\n});\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["stripJsonFences","missingWidgetRefError"],"mappings":"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"}
1
+ {"version":3,"file":"acorex-platform-extension-ai-formbuilder-client.mjs","sources":["../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/ai-formbuilder-designer-entity-chat.constants.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/ai-formbuilder-designer-settings.keys.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/ai-formbuilder-designer.settings.provider.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/commands/validate-layout-json.util.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/ai-formbuilder-designer-apply.util.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/ai-formbuilder-designer-assist-context.util.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/ai-formbuilder-designer-ops.util.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/ai-formbuilder-designer-page-context.util.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/ai-formbuilder-designer-ai-assist.service.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/ai-formbuilder-designer-footer.hook.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/ai-formbuilder-designer-help-menu.hook.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/output-contract-transcript-segment.formbuilder.provider.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/ai-formbuilder-extention.module.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/ai-formbuilder-layout-json.util.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/commands/validate-layout-json-for-ai.command.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/commands/validate-layout-json-for-ai.command.definition.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/commands/apply-layout-json-for-ai.command.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/commands/apply-layout-json-for-ai.command.definition.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/commands/outline-layout-for-ai.command.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/commands/outline-layout-for-ai.command.definition.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/commands/add-widget-for-ai.command.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/commands/add-widget-for-ai.command.definition.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/commands/update-widget-for-ai.command.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/commands/update-widget-for-ai.command.definition.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/commands/remove-widget-for-ai.command.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/commands/remove-widget-for-ai.command.definition.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/commands/move-widget-for-ai.command.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/lib/commands/move-widget-for-ai.command.definition.ts","../../../../libs/extensions/layout-designer/ai-assist/client/src/acorex-platform-extension-ai-formbuilder-client.ts"],"sourcesContent":["//#region ----- Form designer contextual assist -----\n\n/** Entity type for form-template designer assist (`AssessmentManagement.Template`). */\nexport const AXE_AI_FORMBUILDER_DESIGNER_ENTITY_TYPE = 'AssessmentManagement.Template';\n\n/** Fallback record id when the designer has no persisted template id yet. */\nexport const AXE_AI_FORMBUILDER_DESIGNER_DRAFT_ENTITY_ID = 'draft';\n\n/** Launch kind stored on the assist room (generic contextual-assist bag). */\nexport const AXE_AI_FORMBUILDER_ASSIST_KIND = 'form-template-designer';\n\n/** Action name passed into {@link AXMContextualAssistLauncherService}. */\nexport const AXE_AI_FORMBUILDER_ASSIST_ACTION = 'form.template.designer.assist';\n\n/**\n * Launch-context scenario for Form Template designer rooms\n * (hide chat widget trees; page-context canvas edits).\n */\nexport const AXE_AI_FORMBUILDER_ASSIST_SCENARIO = 'form-template-designer';\n\nexport const AXE_AI_FORMBUILDER_VALIDATE_LAYOUT_COMMAND = 'AiFormbuilder:ValidateLayoutJsonForAi';\n\nexport const AXE_AI_FORMBUILDER_APPLY_LAYOUT_COMMAND = 'AiFormbuilder:ApplyLayoutJsonForAi';\n\nexport const AXE_AI_FORMBUILDER_OUTLINE_LAYOUT_COMMAND = 'AiFormbuilder:OutlineLayoutForAi';\n\nexport const AXE_AI_FORMBUILDER_ADD_WIDGET_COMMAND = 'AiFormbuilder:AddWidgetForAi';\n\nexport const AXE_AI_FORMBUILDER_UPDATE_WIDGET_COMMAND = 'AiFormbuilder:UpdateWidgetForAi';\n\nexport const AXE_AI_FORMBUILDER_REMOVE_WIDGET_COMMAND = 'AiFormbuilder:RemoveWidgetForAi';\n\nexport const AXE_AI_FORMBUILDER_MOVE_WIDGET_COMMAND = 'AiFormbuilder:MoveWidgetForAi';\n\n/** Page-context registration id while the form designer is the focused page. */\nexport const AXE_AI_FORMBUILDER_PAGE_CONTEXT_ID = 'layout-designer';\n\n/** Advertised Page:RunAction id that writes the open designer canvas. */\nexport const AXE_AI_FORMBUILDER_PAGE_ACTION_APPLY_LAYOUT = 'apply-layout';\n\nexport const AXE_AI_FORMBUILDER_PAGE_ACTION_ADD_WIDGET = 'add-widget';\n\nexport const AXE_AI_FORMBUILDER_PAGE_ACTION_UPDATE_WIDGET = 'update-widget';\n\nexport const AXE_AI_FORMBUILDER_PAGE_ACTION_REMOVE_WIDGET = 'remove-widget';\n\nexport const AXE_AI_FORMBUILDER_PAGE_ACTION_MOVE_WIDGET = 'move-widget';\n\n/** Seeded Form Designer assist (`AiManagement.Assist.name` = form-designer-assistant). Must match `AXMAiFormDesignerAssistId`. */\nexport const AXE_AI_FORMBUILDER_DESIGNER_ASSIST_ID = 'b0000001-0000-4000-8000-000000000004';\n\n//#endregion\n","//#region ----- Setting Keys -----\n\n/**\n * Tenant setting for the assist opened from the form layout designer.\n * Registered under Intelligence (`ai-settings`), not a separate settings group.\n */\nexport enum AXEAiFormbuilderDesignerSettings {\n /**\n * Assist primary key (`Assist.id`).\n * When empty, the designer opens the seeded form-designer-assistant.\n */\n AssistId = 'AiFormbuilder:Setting:Designer.AssistId',\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { RootConfig } from '@acorex-platform/module-ai-management-client/contracts';\nimport {\n AXPSettingDefinitionProvider,\n AXPSettingDefinitionProviderContext,\n} from '@acorex-platform/framework-client/common';\nimport { objectKeyValueTransforms } from '@acorex-platform/framework-client/core';\nimport { AXPWidgetsList } from '@acorex-platform/framework-shared/core';\nimport { Injectable } from '@angular/core';\nimport { AXE_AI_FORMBUILDER_DESIGNER_ASSIST_ID } from './ai-formbuilder-designer-entity-chat.constants';\nimport { AXEAiFormbuilderDesignerSettings } from './ai-formbuilder-designer-settings.keys';\n\n//#endregion\n\n//#region ----- Constants -----\n\nconst I18N = '@extensions-ai-formbuilder:settings.designer-assist';\n\n/** Intelligence group created by `AXMAiManagementSettingProvider`. Module AI settings attach here. */\nconst AI_SETTINGS_GROUP = 'ai-settings';\n\n//#endregion\n\n//#region ----- Settings Provider -----\n\n@Injectable()\nexport class AXEAiFormbuilderDesignerSettingProvider implements AXPSettingDefinitionProvider {\n async provide(context: AXPSettingDefinitionProviderContext): Promise<void> {\n if (!context.hasGroup(AI_SETTINGS_GROUP)) {\n return;\n }\n\n const intelligence = context.group(AI_SETTINGS_GROUP);\n if (!intelligence) {\n return;\n }\n\n intelligence\n .addSection('designer-assist', `${I18N}.section-title`, `${I18N}.section-description`)\n .addSetting({\n key: AXEAiFormbuilderDesignerSettings.AssistId,\n title: `${I18N}.assist-id-title`,\n scope: 'T',\n overridableAt: [],\n isInherited: true,\n defaultValue: AXE_AI_FORMBUILDER_DESIGNER_ASSIST_ID,\n searchTagKeys: [`${I18N}.assist-search-tags`],\n valueTransforms: objectKeyValueTransforms('id'),\n widget: {\n type: AXPWidgetsList.Editors.LookupBox,\n options: {\n entity: `${RootConfig.module.name}.${RootConfig.entities.assist.name}`,\n look: 'select',\n multiple: false,\n textField: 'title',\n valueField: 'id',\n hasClearButton: true,\n },\n },\n description: `${I18N}.assist-id-description`,\n })\n .endSection();\n }\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport type { AXPWidgetNode } from '@acorex-platform/framework-shared/core';\n\n//#endregion\n\n//#region ----- Types -----\n\nexport interface AXEAiFormbuilderLayoutJsonValidation {\n valid: boolean;\n errors: string[];\n normalizedJson?: string;\n}\n\n//#endregion\n\n//#region ----- Constants -----\n\nconst MAX_ERRORS = 48;\n\nconst FORBIDDEN_LAYOUT_KEYS = new Set([\n 'style',\n 'styles',\n 'css',\n 'class',\n 'className',\n 'classList',\n 'innerHTML',\n 'dataset',\n]);\n\n/** Roots the form-template designer can load (File → Download / Import JSON). */\nconst DESIGNER_CANVAS_ROOT_TYPES = new Set(['document-layout', 'page-layout']);\n\n//#endregion\n\n//#region ----- Parse & validate -----\n\n/**\n * AI tool-arg normalization may pass `json` as a string or an already-parsed object.\n * Also accepts `layoutJson` from older registry rows.\n */\nexport function axeResolveLayoutJsonInput(input: { json?: unknown; layoutJson?: unknown } | null | undefined): string {\n return resolveLayoutJsonString(input?.json) || resolveLayoutJsonString(input?.layoutJson);\n}\n\nexport function axeParseAndValidateLayoutJson(json: unknown): AXEAiFormbuilderLayoutJsonValidation {\n const raw = resolveLayoutJsonString(json);\n if (!raw) {\n return { valid: false, errors: ['Missing json string.'] };\n }\n const stripped = stripJsonFences(raw);\n let parsed: unknown;\n try {\n parsed = JSON.parse(stripped) as unknown;\n } catch (e) {\n const msg = e instanceof Error ? e.message : 'Invalid JSON';\n return { valid: false, errors: [`JSON parse error: ${msg}`] };\n }\n const errors: string[] = [];\n validateWidgetNodeShape(parsed, '$', errors);\n if (errors.length > 0) {\n return { valid: false, errors };\n }\n return {\n valid: true,\n errors: [],\n normalizedJson: JSON.stringify(parsed as AXPWidgetNode),\n };\n}\n\nexport function axeIsDesignerCanvasRoot(value: unknown): boolean {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return false;\n }\n const type = (value as Record<string, unknown>)['type'];\n return typeof type === 'string' && DESIGNER_CANVAS_ROOT_TYPES.has(type.trim());\n}\n\nfunction resolveLayoutJsonString(json: unknown): string {\n if (typeof json === 'string') {\n return json.trim();\n }\n if (json !== null && json !== undefined && typeof json === 'object') {\n try {\n return JSON.stringify(json);\n } catch {\n return '';\n }\n }\n return '';\n}\n\nfunction stripJsonFences(raw: string): string {\n const t = raw.trim();\n const fence = /^```(?:json)?\\s*\\r?\\n?([\\s\\S]*?)\\r?\\n?```\\s*$/i.exec(t);\n return fence ? fence[1].trim() : t;\n}\n\nfunction validateWidgetNodeShape(value: unknown, jsonPath: string, errors: string[]): void {\n if (errors.length >= MAX_ERRORS) {\n return;\n }\n if (value === null || typeof value !== 'object' || Array.isArray(value)) {\n errors.push(`${jsonPath}: expected an object (AXPWidgetNode)`);\n return;\n }\n const o = value as Record<string, unknown>;\n const t = o['type'];\n if (typeof t !== 'string' || !t.trim()) {\n errors.push(`${jsonPath}: property \"type\" must be a non-empty string (widget registry name)`);\n }\n if (t === 'node' && 'content' in o) {\n errors.push(\n `${jsonPath}: do not use the chat envelope { \"type\":\"node\", \"content\":... }; output the inner widget root only.`,\n );\n }\n for (const key of FORBIDDEN_LAYOUT_KEYS) {\n if (key in o) {\n errors.push(\n `${jsonPath}: \"${key}\" is not allowed on AXPWidgetNode — map styling to widget options (e.g. flex-layout, grid-layout, button-action look/color, fieldset-layout), not raw CSS.`,\n );\n if (errors.length >= MAX_ERRORS) {\n return;\n }\n }\n }\n if ('options' in o && o['options'] != null && typeof o['options'] !== 'object') {\n errors.push(`${jsonPath}.options must be a plain object when present`);\n }\n if ('children' in o && o['children'] != null) {\n if (!Array.isArray(o['children'])) {\n errors.push(`${jsonPath}.children must be an array`);\n return;\n }\n for (let i = 0; i < o['children'].length; i++) {\n validateWidgetNodeShape(o['children'][i], `${jsonPath}.children[${i}]`, errors);\n if (errors.length >= MAX_ERRORS) {\n return;\n }\n }\n }\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport type { AXConversationMessage } from '@acorex/components/conversation';\nimport {\n axmAssistWidgetNodeFromUnknown,\n axmIsAssistStreamingStatus,\n axmReadAssistResponseStatus,\n} from '@acorex-platform/module-conversation-client';\nimport { extractMessageTextFromPayload } from '@acorex-platform/module-conversation-client/contracts';\nimport { axeIsDesignerCanvasRoot } from './commands/validate-layout-json.util';\n\n//#endregion\n\n//#region ----- Constants -----\n\nconst DESIGNER_ROOT_TYPE_MARKER = /\"type\"\\s*:\\s*\"(document-layout|page-layout)\"/i;\n\n//#endregion\n\n//#region ----- Message extract -----\n\n/** True when this assist reply is finished and may be applied to the canvas. */\nexport function axeAssistMessageReadyToApply(message: AXConversationMessage): boolean {\n const status = axmReadAssistResponseStatus(message.metadata);\n if (axmIsAssistStreamingStatus(status) || status === 'failed') {\n return false;\n }\n const meta = message.metadata as Record<string, unknown> | undefined;\n if (meta && meta['isAssistResponse'] === false) {\n return false;\n }\n return true;\n}\n\n/**\n * Designer JSON from a completed assist message.\n * Accepts a node payload or JSON pasted inside a text reply (the usual specialist failure mode).\n */\nexport function axeDesignerLayoutJsonFromAssistMessage(message: AXConversationMessage): string | null {\n const payload = message.payload as unknown;\n const candidates: unknown[] = [payload];\n if (payload && typeof payload === 'object' && !Array.isArray(payload)) {\n const row = payload as Record<string, unknown>;\n if ('content' in row) {\n candidates.push(row['content']);\n }\n }\n\n for (const text of collectMessageTexts(message)) {\n const extracted = axeExtractDesignerLayoutFromText(text);\n if (extracted !== undefined) {\n candidates.push(extracted);\n }\n }\n\n for (const candidate of candidates) {\n const node = axmAssistWidgetNodeFromUnknown(candidate);\n if (node && axeIsDesignerCanvasRoot(node)) {\n return JSON.stringify(node);\n }\n }\n return null;\n}\n\n/** Pulls a document-layout / page-layout object out of mixed prose + JSON. */\nexport function axeExtractDesignerLayoutFromText(raw: string): unknown {\n const text = stripJsonFences(raw);\n if (!text) {\n return undefined;\n }\n try {\n const parsed = JSON.parse(text) as unknown;\n const node = axmAssistWidgetNodeFromUnknown(parsed);\n if (node && axeIsDesignerCanvasRoot(node)) {\n return node;\n }\n } catch {\n // Mixed chat text — scan for an embedded designer root.\n }\n return extractEmbeddedDesignerObject(text);\n}\n\nfunction collectMessageTexts(message: AXConversationMessage): string[] {\n const texts: string[] = [];\n const fromPayload = extractMessageTextFromPayload(message.payload);\n if (fromPayload.trim()) {\n texts.push(fromPayload);\n }\n const rawPayload = message.payload as unknown;\n if (typeof rawPayload === 'string' && rawPayload.trim()) {\n texts.push(rawPayload);\n }\n const meta = message.metadata as Record<string, unknown> | undefined;\n if (typeof meta?.['text'] === 'string' && meta['text'].trim()) {\n texts.push(meta['text']);\n }\n return texts;\n}\n\nfunction stripJsonFences(raw: string): string {\n const t = raw.trim();\n const fence = /^```(?:json)?\\s*\\r?\\n?([\\s\\S]*?)\\r?\\n?```\\s*$/i.exec(t);\n return fence ? fence[1].trim() : t;\n}\n\nfunction extractEmbeddedDesignerObject(text: string): unknown {\n let searchFrom = 0;\n while (searchFrom < text.length) {\n const slice = text.slice(searchFrom);\n const match = DESIGNER_ROOT_TYPE_MARKER.exec(slice);\n if (!match || match.index < 0) {\n break;\n }\n const abs = searchFrom + match.index;\n const start = text.lastIndexOf('{', abs);\n if (start < 0) {\n searchFrom = abs + match[0].length;\n continue;\n }\n const json = sliceBalancedObject(text, start);\n if (json) {\n try {\n const parsed = JSON.parse(json) as unknown;\n const node = axmAssistWidgetNodeFromUnknown(parsed);\n if (node && axeIsDesignerCanvasRoot(node)) {\n return node;\n }\n } catch {\n // Try the next type marker.\n }\n }\n searchFrom = abs + match[0].length;\n }\n return undefined;\n}\n\nfunction sliceBalancedObject(text: string, start: number): string | null {\n if (text[start] !== '{') {\n return null;\n }\n let depth = 0;\n let inString = false;\n let escape = false;\n for (let i = start; i < text.length; i++) {\n const ch = text[i];\n if (inString) {\n if (escape) {\n escape = false;\n } else if (ch === '\\\\') {\n escape = true;\n } else if (ch === '\"') {\n inString = false;\n }\n continue;\n }\n if (ch === '\"') {\n inString = true;\n continue;\n }\n if (ch === '{') {\n depth += 1;\n } else if (ch === '}') {\n depth -= 1;\n if (depth === 0) {\n return text.slice(start, i + 1);\n }\n }\n }\n return null;\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport type { AXPDesignerService } from '@acorex-platform/framework-client/layout/designer';\nimport type { AXPWidgetNode } from '@acorex-platform/framework-shared/core';\nimport {\n axmSanitizeContextualAssistValue,\n type AXMContextualAssistColumnValue,\n type AXMFormTemplateDesignerAssistDataSourceRef,\n type AXMFormTemplateDesignerAssistPayload,\n type AXMFormTemplateDesignerAssistWidgetRef,\n} from '@acorex-platform/module-conversation-client/contracts';\nimport {\n AXE_AI_FORMBUILDER_ASSIST_SCENARIO,\n AXE_AI_FORMBUILDER_DESIGNER_ENTITY_TYPE,\n} from './ai-formbuilder-designer-entity-chat.constants';\n\n//#endregion\n\n//#region ----- Constants -----\n\nconst TEMPLATE_CONTEXT_FIELDS = ['code', 'title', 'description', 'type', 'categories'] as const;\n\n//#endregion\n\n//#region ----- Payload -----\n\n/**\n * Snapshot of the live designer chrome for contextual assist.\n * Full layout JSON is not shipped — the specialist outlines and patches the canvas.\n */\nexport function axeBuildFormbuilderDesignerAssistPayload(\n designer: AXPDesignerService,\n args: {\n entityTitle: string;\n recordId: string;\n columns: AXMContextualAssistColumnValue[];\n },\n): AXMFormTemplateDesignerAssistPayload {\n const [moduleName = 'AssessmentManagement', entityName = 'Template'] =\n AXE_AI_FORMBUILDER_DESIGNER_ENTITY_TYPE.split('.');\n const document = designer.document();\n const currentPage = designer.currentPage();\n const selected = designer.selectedNode();\n const profile = designer.surfaceProfile();\n const pages = Array.isArray(document?.children) ? document.children : [];\n\n const payload: AXMFormTemplateDesignerAssistPayload = {\n moduleName,\n entityName,\n entityTitle: args.entityTitle,\n recordId: args.recordId,\n columns: args.columns,\n scenario: AXE_AI_FORMBUILDER_ASSIST_SCENARIO,\n entityType: AXE_AI_FORMBUILDER_DESIGNER_ENTITY_TYPE,\n surface: 'layout-designer',\n unsavedChanges: designer.unsavedChanges(),\n pageCount: pages.length,\n currentPageIndex: designer.currentPageIndex(),\n currentPage: widgetRef(currentPage, true),\n selectedWidget: selected ? widgetRef(selected, false) : null,\n dataSources: summarizeDataSources(designer),\n widgetCounts: countWidgetTypes(document),\n ...(profile.id ? { surfaceId: profile.id } : {}),\n ...(profile.documentKind ? { documentKind: profile.documentKind } : {}),\n ...(profile.rootWidget ? { rootWidget: profile.rootWidget } : {}),\n };\n\n return payload;\n}\n\n/** Template record fields for assist (skips the persisted `template` JSON blob). */\nexport function axeBuildFormTemplateRecordAssistColumns(\n row: Record<string, unknown>,\n resolveText: (value: unknown) => string,\n): AXMContextualAssistColumnValue[] {\n const columns: AXMContextualAssistColumnValue[] = [];\n for (const name of TEMPLATE_CONTEXT_FIELDS) {\n if (!(name in row) || row[name] == null) {\n continue;\n }\n const raw = row[name];\n const text = resolveText(raw);\n columns.push({\n name,\n title: name,\n value: axmSanitizeContextualAssistValue(text || raw),\n });\n }\n return columns;\n}\n\n//#endregion\n\n//#region ----- Designer snapshot -----\n\nfunction widgetRef(node: AXPWidgetNode | null | undefined, includeChildCount: boolean): AXMFormTemplateDesignerAssistWidgetRef {\n const type = typeof node?.type === 'string' ? node.type.trim() : '';\n const name = typeof node?.name === 'string' ? node.name.trim() : '';\n const path = typeof node?.path === 'string' ? node.path.trim() : '';\n const childCount = Array.isArray(node?.children) ? node.children.length : 0;\n return {\n ...(type ? { type } : {}),\n ...(name ? { name } : {}),\n ...(path ? { path } : {}),\n ...(includeChildCount ? { childCount } : {}),\n };\n}\n\nfunction summarizeDataSources(designer: AXPDesignerService): AXMFormTemplateDesignerAssistDataSourceRef[] {\n return (designer.sources() ?? []).slice(0, 12).map((source) => ({\n id: source.id,\n name: source.name,\n itemCount: Array.isArray(source.items) ? source.items.length : 0,\n columnNames: (source.columns ?? []).map((column) => column.name).filter(Boolean).slice(0, 12),\n }));\n}\n\nfunction countWidgetTypes(node: AXPWidgetNode | null | undefined): Record<string, number> {\n const counts: Record<string, number> = {};\n walkWidgetTypes(node, counts);\n return counts;\n}\n\nfunction walkWidgetTypes(node: unknown, counts: Record<string, number>): void {\n if (!node || typeof node !== 'object' || Array.isArray(node)) {\n return;\n }\n const row = node as Record<string, unknown>;\n const type = typeof row['type'] === 'string' ? row['type'].trim() : '';\n if (type) {\n counts[type] = (counts[type] ?? 0) + 1;\n }\n const children = row['children'];\n if (Array.isArray(children)) {\n for (const child of children) {\n walkWidgetTypes(child, counts);\n }\n }\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport type { AXPWidgetNode, AXPWidgetTriggers } from '@acorex-platform/framework-shared/core';\n\n//#endregion\n\n//#region ----- Types -----\n\nexport interface AXEAiFormbuilderDesignerOutlineItem {\n name: string;\n type: string;\n path: string;\n parentName?: string;\n label?: string;\n}\n\nexport interface AXEAiFormbuilderDesignerWidgetHit {\n node: AXPWidgetNode;\n parent: AXPWidgetNode | null;\n path: string;\n}\n\n//#endregion\n\n//#region ----- Outline -----\n\nexport function axeBuildDesignerOutline(root: unknown): AXEAiFormbuilderDesignerOutlineItem[] {\n const items: AXEAiFormbuilderDesignerOutlineItem[] = [];\n walkOutline(root, null, [], items);\n return items;\n}\n\nexport function axeFindDesignerWidget(\n root: unknown,\n ref: { name?: string; path?: string },\n): AXEAiFormbuilderDesignerWidgetHit | null {\n const name = typeof ref.name === 'string' ? ref.name.trim() : '';\n const path = typeof ref.path === 'string' ? ref.path.trim() : '';\n if (!name && !path) {\n return null;\n }\n\n let named: AXEAiFormbuilderDesignerWidgetHit | null = null;\n let byPath: AXEAiFormbuilderDesignerWidgetHit | null = null;\n walkFind(root, null, [], (hit) => {\n if (name && hit.node.name?.trim() === name && !named) {\n named = hit;\n }\n if (path && hit.path === path) {\n byPath = hit;\n }\n });\n return named ?? byPath;\n}\n\nexport function axeResolveWidgetNodeInput(raw: unknown): AXPWidgetNode | null {\n const value = unwrapJson(raw);\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return null;\n }\n const type = (value as Record<string, unknown>)['type'];\n if (typeof type !== 'string' || !type.trim()) {\n return null;\n }\n return value as AXPWidgetNode;\n}\n\nexport function axeReadOptionalIndex(raw: unknown): number | undefined {\n if (typeof raw === 'number' && Number.isFinite(raw)) {\n return Math.trunc(raw);\n }\n if (typeof raw === 'string' && raw.trim()) {\n const parsed = Number(raw);\n if (Number.isFinite(parsed)) {\n return Math.trunc(parsed);\n }\n }\n return undefined;\n}\n\nexport function axeReadStringArg(raw: unknown): string {\n return typeof raw === 'string' ? raw.trim() : '';\n}\n\n/** `set: false` when the caller omitted the arg. Empty array clears triggers. */\nexport function axeReadOptionalTriggers(raw: unknown): { set: boolean; value?: AXPWidgetTriggers } {\n if (raw === undefined) {\n return { set: false };\n }\n const value = unwrapJson(raw);\n if (value == null) {\n return { set: true, value: [] };\n }\n if (!Array.isArray(value)) {\n return { set: false };\n }\n const triggers: AXPWidgetTriggers = [];\n for (const item of value) {\n if (!item || typeof item !== 'object' || Array.isArray(item)) {\n continue;\n }\n const row = item as Record<string, unknown>;\n const event = typeof row['event'] === 'string' ? row['event'].trim() : '';\n const actionRaw = row['action'];\n const action = Array.isArray(actionRaw)\n ? actionRaw.filter((part): part is string => typeof part === 'string' && !!part.trim())\n : typeof actionRaw === 'string'\n ? actionRaw.trim()\n : '';\n if (!event && (Array.isArray(action) ? action.length === 0 : !action)) {\n continue;\n }\n triggers.push({\n event,\n action,\n ...(row['disabled'] === true ? { disabled: true } : {}),\n });\n }\n return { set: true, value: triggers };\n}\n\nexport function axeReadOptionalVisible(raw: unknown): { set: boolean; value?: boolean | string } {\n if (raw === undefined) {\n return { set: false };\n }\n if (typeof raw === 'boolean') {\n return { set: true, value: raw };\n }\n if (typeof raw === 'string') {\n return { set: true, value: raw.trim() };\n }\n return { set: false };\n}\n\n//#endregion\n\n//#region ----- Walk -----\n\nfunction pathSegment(node: AXPWidgetNode, siblingIndex: number): string {\n const name = typeof node.name === 'string' ? node.name.trim() : '';\n if (name) {\n return name;\n }\n const type = typeof node.type === 'string' ? node.type.trim() : 'widget';\n return `${type}[${siblingIndex}]`;\n}\n\nfunction walkOutline(\n value: unknown,\n parentName: string | null,\n pathParts: string[],\n items: AXEAiFormbuilderDesignerOutlineItem[],\n siblingIndex = 0,\n): void {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return;\n }\n const node = value as AXPWidgetNode;\n const type = typeof node.type === 'string' ? node.type.trim() : '';\n if (!type) {\n return;\n }\n const name = typeof node.name === 'string' ? node.name.trim() : '';\n const segment = pathSegment(node, siblingIndex);\n const path = [...pathParts, segment].join('/');\n const label = readLabel(node);\n items.push({\n type,\n path,\n name,\n ...(parentName ? { parentName } : {}),\n ...(label ? { label } : {}),\n });\n const children = node.children;\n if (!Array.isArray(children)) {\n return;\n }\n children.forEach((child, index) => {\n walkOutline(child, name || null, [...pathParts, segment], items, index);\n });\n}\n\nfunction walkFind(\n value: unknown,\n parent: AXPWidgetNode | null,\n pathParts: string[],\n visit: (hit: AXEAiFormbuilderDesignerWidgetHit) => void,\n siblingIndex = 0,\n): void {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return;\n }\n const node = value as AXPWidgetNode;\n const type = typeof node.type === 'string' ? node.type.trim() : '';\n if (!type) {\n return;\n }\n const segment = pathSegment(node, siblingIndex);\n const path = [...pathParts, segment].join('/');\n visit({ node, parent, path });\n const children = node.children;\n if (!Array.isArray(children)) {\n return;\n }\n children.forEach((child, index) => {\n walkFind(child, node, [...pathParts, segment], visit, index);\n });\n}\n\nfunction readLabel(node: AXPWidgetNode): string | undefined {\n const options = node.options;\n if (!options || typeof options !== 'object' || Array.isArray(options)) {\n return undefined;\n }\n const label = (options as Record<string, unknown>)['label'];\n if (typeof label === 'string' && label.trim()) {\n return label.trim();\n }\n const title = (options as Record<string, unknown>)['title'];\n if (typeof title === 'string' && title.trim()) {\n return title.trim();\n }\n return undefined;\n}\n\nfunction unwrapJson(raw: unknown): unknown {\n if (typeof raw !== 'string') {\n return raw;\n }\n const trimmed = raw.trim();\n if (!trimmed) {\n return null;\n }\n try {\n return JSON.parse(trimmed) as unknown;\n } catch {\n return null;\n }\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport type {\n AXPPageContextAction,\n AXPPageContextOutlineItem,\n AXPPageContextSnapshot,\n} from '@acorex-platform/framework-client/core';\nimport {\n AXE_AI_FORMBUILDER_DESIGNER_ENTITY_TYPE,\n AXE_AI_FORMBUILDER_PAGE_ACTION_ADD_WIDGET,\n AXE_AI_FORMBUILDER_PAGE_ACTION_APPLY_LAYOUT,\n AXE_AI_FORMBUILDER_PAGE_ACTION_MOVE_WIDGET,\n AXE_AI_FORMBUILDER_PAGE_ACTION_REMOVE_WIDGET,\n AXE_AI_FORMBUILDER_PAGE_ACTION_UPDATE_WIDGET,\n} from './ai-formbuilder-designer-entity-chat.constants';\nimport { axeResolveLayoutJsonInput } from './commands/validate-layout-json.util';\n\n//#endregion\n\n//#region ----- Actions -----\n\nexport const AXE_AI_FORMBUILDER_PAGE_CONTEXT_ACTIONS: AXPPageContextAction[] = [\n {\n id: AXE_AI_FORMBUILDER_PAGE_ACTION_ADD_WIDGET,\n title: 'Add one widget under a named parent on the live canvas',\n params: [\n {\n name: 'parentName',\n required: false,\n description: 'Parent widget name from snapshot.outline. Prefer this over parentPath.',\n },\n {\n name: 'parentPath',\n required: false,\n description: 'Parent path from snapshot.outline when the parent has no name.',\n },\n {\n name: 'widget',\n required: true,\n description:\n 'One AXPWidgetNode (type plus name/options/children). Put triggers and visible on this node root when the field calculates or shows/hides. Not the full document-layout.',\n },\n {\n name: 'index',\n required: false,\n description: 'Optional child index under the parent. Omit to append.',\n },\n ],\n },\n {\n id: AXE_AI_FORMBUILDER_PAGE_ACTION_UPDATE_WIDGET,\n title: 'Patch options, validations, triggers, or visible on one canvas widget',\n params: [\n { name: 'name', required: false, description: 'Widget name from snapshot.outline.' },\n { name: 'path', required: false, description: 'Widget path from snapshot.outline when it has no name.' },\n { name: 'options', required: false, description: 'Partial options object merged onto the widget.' },\n { name: 'validations', required: false, description: 'Replaces options.validations (e.g. [{ \"rule\": \"required\" }]).' },\n {\n name: 'triggers',\n required: false,\n description:\n 'Replaces node.triggers (not options.triggers). Array of { event, action } expression strings. Empty array clears. See write-platform-expression.',\n },\n {\n name: 'visible',\n required: false,\n description:\n 'Replaces node.visible. Boolean or \"{{ context.eval(...) }}\" expression. See write-platform-expression.',\n },\n ],\n },\n {\n id: AXE_AI_FORMBUILDER_PAGE_ACTION_REMOVE_WIDGET,\n title: 'Remove one widget from the live canvas',\n params: [\n { name: 'name', required: false, description: 'Widget name from snapshot.outline.' },\n { name: 'path', required: false, description: 'Widget path from snapshot.outline when it has no name.' },\n ],\n },\n {\n id: AXE_AI_FORMBUILDER_PAGE_ACTION_MOVE_WIDGET,\n title: 'Move one widget to another parent or index',\n params: [\n { name: 'name', required: false, description: 'Widget name from snapshot.outline.' },\n { name: 'path', required: false, description: 'Widget path from snapshot.outline when it has no name.' },\n { name: 'parentName', required: false, description: 'Destination parent name. Omit to reorder under the current parent.' },\n { name: 'parentPath', required: false, description: 'Destination parent path when the parent has no name.' },\n { name: 'index', required: false, description: 'Child index under the destination parent.' },\n ],\n },\n {\n id: AXE_AI_FORMBUILDER_PAGE_ACTION_APPLY_LAYOUT,\n title: 'Replace the whole canvas with a complete designer tree',\n params: [\n {\n name: 'json',\n required: true,\n description: 'Complete document-layout or page-layout. Use only for a brand-new form or a large restructure.',\n },\n {\n name: 'replaceAll',\n required: false,\n description: 'Set true only when the user asked for a brand-new form. Otherwise a much smaller tree is rejected.',\n },\n ],\n },\n];\n\n//#endregion\n\n//#region ----- Snapshot -----\n\nexport function axeBuildFormbuilderDesignerPageContextSnapshot(args: {\n title: string;\n outline?: AXPPageContextOutlineItem[];\n}): AXPPageContextSnapshot {\n const title = args.title.trim() || 'Layout designer';\n return {\n kind: 'layout-designer',\n title,\n status: 'ready',\n entity: {\n fullName: AXE_AI_FORMBUILDER_DESIGNER_ENTITY_TYPE,\n title,\n },\n ...(args.outline?.length ? { outline: args.outline } : {}),\n actions: AXE_AI_FORMBUILDER_PAGE_CONTEXT_ACTIONS,\n };\n}\n\nexport function axeResolvePageContextLayoutJson(args: Record<string, unknown>): string {\n return axeResolveLayoutJsonInput(args);\n}\n\nexport function axeReadReplaceAllFlag(args: Record<string, unknown>): boolean {\n const raw = args['replaceAll'];\n return raw === true || raw === 'true';\n}\n\n/**\n * Blocks apply-layout from wiping a rich canvas with a flattened/partial tree\n * (the usual supervisor failure: rewrite the form as a handful of text-editors).\n */\nexport function axeDesignerApplyLooksLikeWipe(current: unknown, incoming: unknown): string | null {\n const currentCount = countWidgetNodes(current);\n const incomingCount = countWidgetNodes(incoming);\n if (currentCount >= 12 && incomingCount < Math.max(8, Math.floor(currentCount * 0.5))) {\n return `apply-layout refused: the new tree has ${incomingCount} widgets but the canvas has ${currentCount}. Use add-widget / update-widget / remove-widget for field edits. Use replaceAll=true only for a brand-new form.`;\n }\n if (layoutHasType(current, 'fieldset-layout') && !layoutHasType(incoming, 'fieldset-layout')) {\n return 'apply-layout refused: the canvas uses fieldset-layout sections. Do not flatten the form. Use add-widget / update-widget / remove-widget for field edits.';\n }\n if (layoutHasType(current, 'form-field') && !layoutHasType(incoming, 'form-field')) {\n return 'apply-layout refused: labeled form-field wrappers were dropped. Keep the existing section/field structure and only change what the user asked.';\n }\n return null;\n}\n\nfunction countWidgetNodes(value: unknown): number {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return 0;\n }\n const row = value as Record<string, unknown>;\n let count = typeof row['type'] === 'string' && row['type'].trim() ? 1 : 0;\n const children = row['children'];\n if (Array.isArray(children)) {\n for (const child of children) {\n count += countWidgetNodes(child);\n }\n }\n return count;\n}\n\nfunction layoutHasType(value: unknown, type: string): boolean {\n if (!value || typeof value !== 'object') {\n return false;\n }\n if (Array.isArray(value)) {\n return value.some((item) => layoutHasType(item, type));\n }\n const row = value as Record<string, unknown>;\n if (typeof row['type'] === 'string' && row['type'].trim() === type) {\n return true;\n }\n return layoutHasType(row['children'], type);\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport {\n AXMContextualAssistLauncherService,\n type AXMContextualAssistColumnValue,\n} from '@acorex-platform/extension-ai-conversation-client';\nimport { AXPSettingsService } from '@acorex-platform/framework-client/common';\nimport {\n AXPPageContextPriority,\n AXPPageContextRegistry,\n type AXPPageContextRunResult,\n type AXPPageContextSnapshot,\n} from '@acorex-platform/framework-client/core';\nimport type { AXPDesignerService } from '@acorex-platform/framework-client/layout/designer';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { coerceUnknownToMultiLanguageString, type AXPMultiLanguageString } from '@acorex-platform/framework-shared/core';\nimport {\n AXMConversationRealtimeBus,\n} from '@acorex-platform/module-conversation-client';\nimport { DestroyRef, inject, Injectable } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { merge } from 'rxjs';\nimport {\n axeAssistMessageReadyToApply,\n axeDesignerLayoutJsonFromAssistMessage,\n} from './ai-formbuilder-designer-apply.util';\nimport {\n axeBuildFormTemplateRecordAssistColumns,\n axeBuildFormbuilderDesignerAssistPayload,\n} from './ai-formbuilder-designer-assist-context.util';\nimport {\n AXE_AI_FORMBUILDER_ASSIST_ACTION,\n AXE_AI_FORMBUILDER_ASSIST_KIND,\n AXE_AI_FORMBUILDER_DESIGNER_ASSIST_ID,\n AXE_AI_FORMBUILDER_DESIGNER_DRAFT_ENTITY_ID,\n AXE_AI_FORMBUILDER_DESIGNER_ENTITY_TYPE,\n AXE_AI_FORMBUILDER_PAGE_ACTION_ADD_WIDGET,\n AXE_AI_FORMBUILDER_PAGE_ACTION_APPLY_LAYOUT,\n AXE_AI_FORMBUILDER_PAGE_ACTION_MOVE_WIDGET,\n AXE_AI_FORMBUILDER_PAGE_ACTION_REMOVE_WIDGET,\n AXE_AI_FORMBUILDER_PAGE_ACTION_UPDATE_WIDGET,\n AXE_AI_FORMBUILDER_PAGE_CONTEXT_ID,\n} from './ai-formbuilder-designer-entity-chat.constants';\nimport { AXEAiFormbuilderDesignerSettings } from './ai-formbuilder-designer-settings.keys';\nimport {\n axeBuildDesignerOutline,\n axeFindDesignerWidget,\n axeReadOptionalIndex,\n axeReadOptionalTriggers,\n axeReadOptionalVisible,\n axeReadStringArg,\n axeResolveWidgetNodeInput,\n type AXEAiFormbuilderDesignerOutlineItem,\n} from './ai-formbuilder-designer-ops.util';\nimport {\n axeBuildFormbuilderDesignerPageContextSnapshot,\n axeDesignerApplyLooksLikeWipe,\n axeReadReplaceAllFlag,\n axeResolvePageContextLayoutJson,\n} from './ai-formbuilder-designer-page-context.util';\nimport {\n axeIsDesignerCanvasRoot,\n axeParseAndValidateLayoutJson,\n} from './commands/validate-layout-json.util';\n\n//#endregion\n\n//#region ----- Service -----\n\n/**\n * Form-template designer AI assist: opens the dedicated form-designer-assistant\n * and advertises designer API callbacks on page context (Page:GetContext / Page:RunAction).\n */\n@Injectable({ providedIn: 'root' })\nexport class AXEAiFormbuilderDesignerAiAssistService {\n //#region ----- Services & Dependencies -----\n\n private readonly launcher = inject(AXMContextualAssistLauncherService, { optional: true });\n private readonly translationService = inject(AXTranslationService);\n private readonly toastService = inject(AXToastService);\n private readonly entityService = inject(AXPEntityService, { optional: true });\n private readonly pageContext = inject(AXPPageContextRegistry);\n private readonly realtimeBus = inject(AXMConversationRealtimeBus, { optional: true });\n private readonly settings = inject(AXPSettingsService);\n private readonly destroyRef = inject(DestroyRef);\n\n //#endregion\n\n //#region ----- State Signals -----\n\n private designer: AXPDesignerService | null = null;\n private lastAppliedJson = '';\n private pageTitle = '';\n\n //#endregion\n\n //#region ----- Lifecycle -----\n\n constructor() {\n const bus = this.realtimeBus;\n if (!bus) {\n return;\n }\n merge(bus.messageStream$, bus.messageUpdates$)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((message) => {\n void this.tryApplyFromAssistMessage(message);\n });\n }\n\n //#endregion\n\n //#region ----- Public API -----\n\n /**\n * Binds the live designer and advertises add/update/remove/move/apply-layout on page context.\n * Pass the header {@link DestroyRef} so the registration clears when the designer unmounts.\n */\n bindDesigner(designer: unknown, owner?: DestroyRef): void {\n this.designer = designer as AXPDesignerService;\n this.designer.ensureWidgetTreeMeta?.();\n void this.translationService\n .translateAsync('@form-template-management:designerAi.dialog-title')\n .then((title) => {\n this.pageTitle = title;\n });\n if (!owner) {\n this.pageContext.activate(AXE_AI_FORMBUILDER_PAGE_CONTEXT_ID);\n return;\n }\n\n this.bindCloseWhenDesignerLeaves(owner);\n\n this.pageContext.register({\n owner,\n id: AXE_AI_FORMBUILDER_PAGE_CONTEXT_ID,\n priority: AXPPageContextPriority.Page,\n getSnapshot: () => this.buildPageSnapshot(),\n run: (actionId, args) => this.runPageAction(actionId, args),\n });\n this.pageContext.activate(AXE_AI_FORMBUILDER_PAGE_CONTEXT_ID);\n }\n\n /**\n * Toggles contextual assist for the designer's current template.\n * Close hides the live window; the next open shows that same instance.\n */\n async toggleFromDesigner(designer: unknown): Promise<boolean> {\n const launcher = this.launcher;\n if (!launcher) {\n return this.warnConversationUnavailable();\n }\n if (launcher.isVisible()) {\n launcher.dismiss();\n return true;\n }\n return this.runFromDesigner(designer);\n }\n\n /**\n * Opens contextual assist for the designer's current template and binds the canvas for apply.\n */\n async runFromDesigner(designer: unknown): Promise<boolean> {\n const launcher = this.launcher;\n if (!launcher) {\n return this.warnConversationUnavailable();\n }\n\n const svc = designer as AXPDesignerService;\n this.bindDesigner(svc);\n const recordId = svc.templateId()?.trim() || AXE_AI_FORMBUILDER_DESIGNER_DRAFT_ENTITY_ID;\n const entityTitle = await this.translationService.translateAsync(\n '@form-template-management:designerAi.dialog-title',\n );\n this.pageTitle = entityTitle;\n const columns = await this.loadTemplateColumns(recordId);\n const payload = axeBuildFormbuilderDesignerAssistPayload(svc, {\n entityTitle,\n recordId,\n columns,\n });\n\n await launcher.open(\n {\n kind: AXE_AI_FORMBUILDER_ASSIST_KIND,\n actionName: AXE_AI_FORMBUILDER_ASSIST_ACTION,\n title: entityTitle,\n payload: { ...payload },\n },\n {\n assistId: await this.resolveDesignerAssistId(),\n assistSelection: 'locked',\n forceNewChat: false,\n minimizable: false,\n retainOnClose: true,\n },\n );\n return true;\n }\n\n /**\n * Validates designer JSON and loads it onto the bound canvas (does not save).\n */\n async applyLayoutJson(\n json: string,\n options?: { replaceAll?: boolean },\n ): Promise<{ applied: boolean; errors: string[] }> {\n const designer = this.designer;\n if (!designer) {\n return {\n applied: false,\n errors: ['The layout designer is not bound. Open the form designer page so page context can apply the canvas.'],\n };\n }\n\n const parsed = axeParseAndValidateLayoutJson(json);\n if (!parsed.valid || !parsed.normalizedJson) {\n return { applied: false, errors: parsed.errors };\n }\n\n let root: unknown;\n try {\n root = JSON.parse(parsed.normalizedJson) as unknown;\n } catch {\n return { applied: false, errors: parsed.errors };\n }\n if (!axeIsDesignerCanvasRoot(root)) {\n return {\n applied: false,\n errors: [\n 'Designer updates need a document-layout or page-layout root. Chat block-layout trees are not applied to the canvas.',\n ],\n };\n }\n\n if (!options?.replaceAll) {\n const wipe = this.detectApplyWipe(root);\n if (wipe) {\n return { applied: false, errors: [wipe] };\n }\n }\n\n if (this.lastAppliedJson === parsed.normalizedJson) {\n return { applied: true, errors: [] };\n }\n\n try {\n await designer.loadByContent(parsed.normalizedJson);\n designer.unsavedChanges.set(true);\n this.lastAppliedJson = parsed.normalizedJson;\n const title = await this.translationService.translateAsync(\n '@form-template-management:designerAi.loading.complete',\n );\n const content = await this.translationService.translateAsync(\n '@form-template-management:designerAi.applied-hint',\n );\n await this.toastService.show({ color: 'success', title, content });\n return { applied: true, errors: [] };\n } catch (error) {\n const message = error instanceof Error ? error.message : 'The layout could not be applied to the designer canvas.';\n return { applied: false, errors: [message] };\n }\n }\n\n outline(): { items: AXEAiFormbuilderDesignerOutlineItem[]; errors: string[] } {\n const designer = this.designer;\n if (!designer) {\n return { items: [], errors: [unboundDesignerError()] };\n }\n return { items: axeBuildDesignerOutline(designer.document()), errors: [] };\n }\n\n addWidget(input: {\n parentName?: string;\n parentPath?: string;\n widget?: unknown;\n index?: unknown;\n }): { applied: boolean; name?: string; path?: string; errors: string[] } {\n const designer = this.designer;\n if (!designer) {\n return { applied: false, errors: [unboundDesignerError()] };\n }\n const widget = axeResolveWidgetNodeInput(input.widget);\n if (!widget) {\n return { applied: false, errors: ['widget must be an AXPWidgetNode object with a string type.'] };\n }\n const parentHit = this.resolveWidgetRef(input.parentName, input.parentPath);\n if (!parentHit) {\n return { applied: false, errors: [missingWidgetRefError('parent', input.parentName, input.parentPath)] };\n }\n try {\n const added = designer.addWidget(parentHit.node, widget);\n designer.ensureWidgetTreeMeta?.();\n const index = axeReadOptionalIndex(input.index);\n if (index != null) {\n moveChildToIndex(parentHit.node, added, index);\n designer.refresh({ widget: parentHit.node });\n }\n designer.unsavedChanges.set(true);\n const outline = axeBuildDesignerOutline(designer.document());\n const addedName = typeof added.name === 'string' ? added.name.trim() : '';\n const addedHit = addedName ? outline.find((item) => item.name === addedName) : undefined;\n return {\n applied: true,\n errors: [],\n ...(addedName ? { name: addedName } : {}),\n ...(addedHit?.path ? { path: addedHit.path } : {}),\n };\n } catch (error) {\n return { applied: false, errors: [error instanceof Error ? error.message : 'The widget could not be added.'] };\n }\n }\n\n updateWidget(input: {\n name?: string;\n path?: string;\n options?: unknown;\n validations?: unknown;\n triggers?: unknown;\n visible?: unknown;\n }): { applied: boolean; errors: string[] } {\n const designer = this.designer;\n if (!designer) {\n return { applied: false, errors: [unboundDesignerError()] };\n }\n const hit = this.resolveWidgetRef(input.name, input.path);\n if (!hit) {\n return { applied: false, errors: [missingWidgetRefError('widget', input.name, input.path)] };\n }\n const options: Record<string, unknown> = {};\n if (input.options != null && typeof input.options === 'object' && !Array.isArray(input.options)) {\n Object.assign(options, input.options);\n }\n if (input.validations != null) {\n options['validations'] = input.validations;\n }\n const triggers = axeReadOptionalTriggers(input.triggers);\n const visible = axeReadOptionalVisible(input.visible);\n const patch: Record<string, unknown> = {};\n if (Object.keys(options).length > 0) {\n patch['options'] = options;\n }\n if (triggers.set) {\n patch['triggers'] = triggers.value ?? [];\n }\n if (visible.set) {\n patch['visible'] = visible.value;\n }\n if (Object.keys(patch).length === 0) {\n return {\n applied: false,\n errors: ['Provide options, validations, triggers, and/or visible to update.'],\n };\n }\n try {\n designer.update({ widget: hit.node, values: patch, mode: 'update' });\n designer.unsavedChanges.set(true);\n return { applied: true, errors: [] };\n } catch (error) {\n return { applied: false, errors: [error instanceof Error ? error.message : 'The widget could not be updated.'] };\n }\n }\n\n removeWidget(input: { name?: string; path?: string }): { applied: boolean; errors: string[] } {\n const designer = this.designer;\n if (!designer) {\n return { applied: false, errors: [unboundDesignerError()] };\n }\n const hit = this.resolveWidgetRef(input.name, input.path);\n if (!hit) {\n return { applied: false, errors: [missingWidgetRefError('widget', input.name, input.path)] };\n }\n try {\n designer.removeWidget(hit.node);\n designer.unsavedChanges.set(true);\n return { applied: true, errors: [] };\n } catch (error) {\n return { applied: false, errors: [error instanceof Error ? error.message : 'The widget could not be removed.'] };\n }\n }\n\n moveWidget(input: {\n name?: string;\n path?: string;\n parentName?: string;\n parentPath?: string;\n index?: unknown;\n }): { applied: boolean; errors: string[] } {\n const designer = this.designer;\n if (!designer) {\n return { applied: false, errors: [unboundDesignerError()] };\n }\n const hit = this.resolveWidgetRef(input.name, input.path);\n if (!hit?.parent) {\n return { applied: false, errors: [missingWidgetRefError('widget', input.name, input.path)] };\n }\n const parentName = axeReadStringArg(input.parentName);\n const parentPath = axeReadStringArg(input.parentPath);\n const nextParentNode =\n parentName || parentPath\n ? this.resolveWidgetRef(input.parentName, input.parentPath)?.node\n : hit.parent;\n if (!nextParentNode) {\n return { applied: false, errors: [missingWidgetRefError('parent', input.parentName, input.parentPath)] };\n }\n const index = axeReadOptionalIndex(input.index);\n try {\n if (nextParentNode !== hit.parent) {\n const from = hit.parent.children;\n if (!Array.isArray(from)) {\n return { applied: false, errors: ['The current parent has no children.'] };\n }\n const at = from.indexOf(hit.node);\n if (at < 0) {\n return { applied: false, errors: ['The widget is no longer under its parent.'] };\n }\n from.splice(at, 1);\n nextParentNode.children = nextParentNode.children ?? [];\n const insertAt =\n index == null\n ? nextParentNode.children.length\n : Math.max(0, Math.min(index, nextParentNode.children.length));\n nextParentNode.children.splice(insertAt, 0, hit.node);\n designer.refresh({ widget: hit.parent });\n designer.refresh({ widget: nextParentNode });\n } else if (index != null) {\n moveChildToIndex(hit.parent, hit.node, index);\n designer.refresh({ widget: hit.parent });\n } else {\n return { applied: false, errors: ['Provide parentName/parentPath or index to move the widget.'] };\n }\n designer.unsavedChanges.set(true);\n return { applied: true, errors: [] };\n } catch (error) {\n return { applied: false, errors: [error instanceof Error ? error.message : 'The widget could not be moved.'] };\n }\n }\n\n //#endregion\n\n //#region ----- Designer lifecycle -----\n\n private designerLeaveBound = false;\n\n private bindCloseWhenDesignerLeaves(owner: DestroyRef): void {\n if (this.designerLeaveBound) {\n return;\n }\n this.designerLeaveBound = true;\n owner.onDestroy(() => {\n this.designerLeaveBound = false;\n this.designer = null;\n this.launcher?.close();\n });\n }\n\n //#endregion\n\n //#region ----- Page context -----\n\n private buildPageSnapshot(): AXPPageContextSnapshot {\n return axeBuildFormbuilderDesignerPageContextSnapshot({\n title: this.pageTitle,\n outline: this.designer ? this.outline().items : undefined,\n });\n }\n\n private detectApplyWipe(incoming: unknown): string | null {\n const designer = this.designer;\n if (!designer) {\n return null;\n }\n try {\n const currentRaw = designer.export();\n const current = JSON.parse(typeof currentRaw === 'string' ? currentRaw : '') as unknown;\n return axeDesignerApplyLooksLikeWipe(current, incoming);\n } catch {\n return null;\n }\n }\n\n private async runPageAction(\n actionId: string,\n args: Record<string, unknown>,\n ): Promise<AXPPageContextRunResult> {\n if (actionId === AXE_AI_FORMBUILDER_PAGE_ACTION_ADD_WIDGET) {\n const result = this.addWidget(args);\n return this.pageActionResult(result.applied, result.errors[0]);\n }\n if (actionId === AXE_AI_FORMBUILDER_PAGE_ACTION_UPDATE_WIDGET) {\n const result = this.updateWidget(args);\n return this.pageActionResult(result.applied, result.errors[0]);\n }\n if (actionId === AXE_AI_FORMBUILDER_PAGE_ACTION_REMOVE_WIDGET) {\n const result = this.removeWidget(args);\n return this.pageActionResult(result.applied, result.errors[0]);\n }\n if (actionId === AXE_AI_FORMBUILDER_PAGE_ACTION_MOVE_WIDGET) {\n const result = this.moveWidget(args);\n return this.pageActionResult(result.applied, result.errors[0]);\n }\n if (actionId === AXE_AI_FORMBUILDER_PAGE_ACTION_APPLY_LAYOUT) {\n const json = axeResolvePageContextLayoutJson(args);\n const result = await this.applyLayoutJson(json, { replaceAll: axeReadReplaceAllFlag(args) });\n return this.pageActionResult(result.applied, result.errors[0] ?? 'Layout was not applied.');\n }\n return {\n success: false,\n message: `Unknown page action \"${actionId}\".`,\n snapshot: this.buildPageSnapshot(),\n };\n }\n\n private pageActionResult(success: boolean, error?: string): AXPPageContextRunResult {\n return {\n success,\n message: success ? undefined : (error ?? 'The designer action failed.'),\n snapshot: this.buildPageSnapshot(),\n };\n }\n\n //#endregion\n\n //#region ----- Auto apply -----\n\n private async tryApplyFromAssistMessage(message: { payload?: unknown; metadata?: unknown; type?: string }): Promise<void> {\n if (!this.designer || !axeAssistMessageReadyToApply(message as never)) {\n return;\n }\n const json = axeDesignerLayoutJsonFromAssistMessage(message as never);\n if (!json) {\n return;\n }\n await this.applyLayoutJson(json);\n }\n\n //#endregion\n\n //#region ----- Warnings -----\n\n private async warnConversationUnavailable(): Promise<boolean> {\n const title = await this.translationService.translateAsync('@general:messages.generic.warning.title');\n const content = await this.translationService.translateAsync(\n '@form-template-management:designerAi.no-conversation-module',\n );\n await this.toastService.show({ color: 'warning', title, content });\n return false;\n }\n\n //#endregion\n\n //#region ----- Template record -----\n\n private async loadTemplateColumns(recordId: string): Promise<AXMContextualAssistColumnValue[]> {\n if (!this.entityService || recordId === AXE_AI_FORMBUILDER_DESIGNER_DRAFT_ENTITY_ID) {\n return [];\n }\n try {\n const row = (await this.entityService.withEntity(AXE_AI_FORMBUILDER_DESIGNER_ENTITY_TYPE).data().byKey(recordId)) as\n | Record<string, unknown>\n | null\n | undefined;\n if (!row || typeof row !== 'object' || Array.isArray(row)) {\n return [];\n }\n return axeBuildFormTemplateRecordAssistColumns(row, (value) => this.asAssistDisplayText(value));\n } catch {\n return [];\n }\n }\n\n private resolveWidgetRef(name?: string, path?: string) {\n const designer = this.designer;\n if (!designer) {\n return null;\n }\n return axeFindDesignerWidget(designer.document(), {\n name: axeReadStringArg(name),\n path: axeReadStringArg(path),\n });\n }\n\n private asAssistDisplayText(value: unknown): string {\n if (typeof value === 'string') {\n return value.trim();\n }\n if (typeof value === 'number' || typeof value === 'boolean') {\n return String(value);\n }\n const resolved = this.translationService.resolve(\n coerceUnknownToMultiLanguageString(value) as AXPMultiLanguageString,\n )?.trim();\n return resolved ?? '';\n }\n\n //#endregion\n\n //#region ----- Assist Resolution -----\n\n /**\n * Tenant setting from Intelligence → Form Designer. Blank falls back to the seeded form designer assist.\n */\n private async resolveDesignerAssistId(): Promise<string> {\n const raw = await this.settings.get<unknown>(AXEAiFormbuilderDesignerSettings.AssistId);\n const assistId = readStoredAssistId(raw);\n return assistId || AXE_AI_FORMBUILDER_DESIGNER_ASSIST_ID;\n }\n\n //#endregion\n}\n\nfunction readStoredAssistId(raw: unknown): string {\n if (typeof raw === 'string') {\n return raw.trim();\n }\n if (raw != null && typeof raw === 'object') {\n const record = raw as Record<string, unknown>;\n const value = record['id'] ?? record['value'];\n if (typeof value === 'string') {\n return value.trim();\n }\n }\n return '';\n}\n\nfunction unboundDesignerError(): string {\n return 'The layout designer is not bound. Open the form designer page so the canvas can be edited.';\n}\n\nfunction missingWidgetRefError(kind: string, name?: string, path?: string): string {\n const nameText = axeReadStringArg(name);\n const pathText = axeReadStringArg(path);\n if (nameText || pathText) {\n return `No ${kind} found for ${nameText ? `name \"${nameText}\"` : `path \"${pathText}\"`}. Call Page:GetContext and use a name from snapshot.outline.`;\n }\n return `Provide ${kind}Name or ${kind}Path from snapshot.outline (Page:GetContext).`;\n}\n\nfunction moveChildToIndex(parent: { children?: unknown[] }, child: unknown, index: number): void {\n const children = parent.children;\n if (!Array.isArray(children)) {\n return;\n }\n const at = children.indexOf(child);\n if (at < 0) {\n return;\n }\n children.splice(at, 1);\n const insertAt = Math.max(0, Math.min(index, children.length));\n children.splice(insertAt, 0, child);\n}\n\n//#endregion\n","import { AXPHookProvider } from '@acorex-platform/framework-client/core';\nimport {\n AXPLayoutDesignerFooterHookKeys,\n type AXPLayoutDesignerFooterEndPayload,\n} from '@acorex-platform/framework-client/layout/designer';\nimport { inject } from '@angular/core';\nimport { AXEAiFormbuilderDesignerAiAssistService } from './ai-formbuilder-designer-ai-assist.service';\n\n//#region ----- Formbuilder designer footer -----\n\n/** Registers the layout designer footer-end magic-icon button for AI assist. */\nexport const AXEAiFormbuilderDesignerFooterHookProvider: AXPHookProvider<\n AXPLayoutDesignerFooterEndPayload,\n AXPLayoutDesignerFooterEndPayload\n> = {\n key: AXPLayoutDesignerFooterHookKeys.end,\n priority: 40,\n execute: (payload: AXPLayoutDesignerFooterEndPayload) => {\n const assist = inject(AXEAiFormbuilderDesignerAiAssistService);\n assist.bindDesigner(payload.designer, payload.owner);\n\n payload.items.push({\n id: 'extensions-ai-formbuilder-layout-assist-footer',\n priority: 20,\n labelKey: '@form-template-management:designerAi.menu',\n iconClass: 'fa-solid fa-wand-magic-sparkles',\n run: () => {\n void assist.toggleFromDesigner(payload.designer);\n },\n });\n return payload;\n },\n};\n\n//#endregion\n","import { AXPHookProvider } from '@acorex-platform/framework-client/core';\nimport {\n AXPLayoutDesignerHeaderMenuHookKeys,\n type AXPLayoutDesignerHeaderMenuSubmenuPayload,\n} from '@acorex-platform/framework-client/layout/designer';\nimport { inject } from '@angular/core';\nimport { AXEAiFormbuilderDesignerAiAssistService } from './ai-formbuilder-designer-ai-assist.service';\n\n//#region ----- Formbuilder designer Help menu -----\n\n/** Registers the layout designer Help-menu entry for AI assist (wand icon). */\nexport const AXEAiFormbuilderDesignerHelpMenuHookProvider: AXPHookProvider<\n AXPLayoutDesignerHeaderMenuSubmenuPayload,\n AXPLayoutDesignerHeaderMenuSubmenuPayload\n> = {\n key: AXPLayoutDesignerHeaderMenuHookKeys.submenu,\n priority: 40,\n execute: (payload: AXPLayoutDesignerHeaderMenuSubmenuPayload) => {\n if (payload.parentMenuId !== 'help') {\n return payload;\n }\n\n const assist = inject(AXEAiFormbuilderDesignerAiAssistService);\n assist.bindDesigner(payload.designer, payload.owner);\n\n payload.items.push({\n id: 'extensions-ai-formbuilder-layout-assist-help',\n priority: 20,\n labelKey: '@form-template-management:designerAi.menu',\n iconClass: 'fa-solid fa-wand-magic-sparkles',\n run: () => {\n void assist.toggleFromDesigner(payload.designer);\n },\n });\n return payload;\n },\n};\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type {\n AXPOutputContractTranscriptSegmentDefinition,\n AXPOutputContractTranscriptSegmentProvider,\n} from '@acorex-platform/framework-client/common';\n\n//#endregion\n\n//#region ---- Formbuilder node segment preset ----\n\nconst FORM_BUILDER_NODE_SEGMENT: AXPOutputContractTranscriptSegmentDefinition = {\n name: 'node',\n title: '@ai-management:agents.entities.agent.fields.output-contract.transcript-segment.options.node',\n applicableKinds: ['object'],\n contract: {\n kind: 'object',\n transcriptSegment: 'node',\n validationCommandName: 'AiFormbuilder:ValidateLayoutJsonForAi',\n structuredRetries: 3,\n schemaSummary:\n 'Chat UI: block-layout or table-layout root with mode edit/view. Form Template designer: document-layout → page-layout → fieldset/flex/grid. No raw CSS keys.',\n },\n};\n\n/**\n * Enriches the built-in `node` transcript segment with formbuilder validation and schema hints.\n */\nexport class AXPAiFormbuilderOutputContractTranscriptSegmentProvider\n implements AXPOutputContractTranscriptSegmentProvider\n{\n provide(): AXPOutputContractTranscriptSegmentDefinition[] {\n return [FORM_BUILDER_NODE_SEGMENT];\n }\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { NgModule } from '@angular/core';\nimport { AXMAiManagementModule } from '@acorex-platform/module-ai-management-client';\nimport {\n AXP_OUTPUT_CONTRACT_TRANSCRIPT_SEGMENT_PROVIDER,\n AXP_SETTING_DEFINITION_PROVIDER,\n} from '@acorex-platform/framework-client/common';\nimport { AXP_HOOK_PROVIDER } from '@acorex-platform/framework-client/core';\nimport { provideCommandSetups } from '@acorex-platform/framework-client/runtime';\nimport { AXEAiFormbuilderDesignerSettingProvider } from './ai-formbuilder-designer.settings.provider';\nimport { AXEAiFormbuilderDesignerFooterHookProvider } from './ai-formbuilder-designer-footer.hook';\nimport { AXEAiFormbuilderDesignerHelpMenuHookProvider } from './ai-formbuilder-designer-help-menu.hook';\nimport {\n AXE_AI_FORMBUILDER_ADD_WIDGET_COMMAND,\n AXE_AI_FORMBUILDER_APPLY_LAYOUT_COMMAND,\n AXE_AI_FORMBUILDER_MOVE_WIDGET_COMMAND,\n AXE_AI_FORMBUILDER_OUTLINE_LAYOUT_COMMAND,\n AXE_AI_FORMBUILDER_REMOVE_WIDGET_COMMAND,\n AXE_AI_FORMBUILDER_UPDATE_WIDGET_COMMAND,\n AXE_AI_FORMBUILDER_VALIDATE_LAYOUT_COMMAND,\n} from './ai-formbuilder-designer-entity-chat.constants';\nimport { AXPAiFormbuilderOutputContractTranscriptSegmentProvider } from './output-contract-transcript-segment.formbuilder.provider';\n\n//#endregion\n\n//#region ----- Module -----\n\n/**\n * Optional AI assist on the form-template designer (Help menu + footer magic icon).\n * Register next to {@link AXEAIConversationExtensionModule} in the application.\n */\n@NgModule({\n imports: [AXMAiManagementModule],\n providers: [\n {\n provide: AXP_SETTING_DEFINITION_PROVIDER,\n useClass: AXEAiFormbuilderDesignerSettingProvider,\n multi: true,\n },\n provideCommandSetups([\n {\n key: AXE_AI_FORMBUILDER_VALIDATE_LAYOUT_COMMAND,\n command: () =>\n import('./commands/validate-layout-json-for-ai.command').then(\n (c) => c.AXEAiFormbuilderValidateLayoutJsonForAiCommand,\n ),\n },\n {\n key: AXE_AI_FORMBUILDER_APPLY_LAYOUT_COMMAND,\n command: () =>\n import('./commands/apply-layout-json-for-ai.command').then(\n (c) => c.AXEAiFormbuilderApplyLayoutJsonForAiCommand,\n ),\n },\n {\n key: AXE_AI_FORMBUILDER_OUTLINE_LAYOUT_COMMAND,\n command: () =>\n import('./commands/outline-layout-for-ai.command').then(\n (c) => c.AXEAiFormbuilderOutlineLayoutForAiCommand,\n ),\n },\n {\n key: AXE_AI_FORMBUILDER_ADD_WIDGET_COMMAND,\n command: () =>\n import('./commands/add-widget-for-ai.command').then((c) => c.AXEAiFormbuilderAddWidgetForAiCommand),\n },\n {\n key: AXE_AI_FORMBUILDER_UPDATE_WIDGET_COMMAND,\n command: () =>\n import('./commands/update-widget-for-ai.command').then((c) => c.AXEAiFormbuilderUpdateWidgetForAiCommand),\n },\n {\n key: AXE_AI_FORMBUILDER_REMOVE_WIDGET_COMMAND,\n command: () =>\n import('./commands/remove-widget-for-ai.command').then((c) => c.AXEAiFormbuilderRemoveWidgetForAiCommand),\n },\n {\n key: AXE_AI_FORMBUILDER_MOVE_WIDGET_COMMAND,\n command: () =>\n import('./commands/move-widget-for-ai.command').then((c) => c.AXEAiFormbuilderMoveWidgetForAiCommand),\n },\n ]),\n {\n provide: AXP_HOOK_PROVIDER,\n multi: true,\n useValue: AXEAiFormbuilderDesignerHelpMenuHookProvider,\n },\n {\n provide: AXP_HOOK_PROVIDER,\n multi: true,\n useValue: AXEAiFormbuilderDesignerFooterHookProvider,\n },\n {\n provide: AXP_OUTPUT_CONTRACT_TRANSCRIPT_SEGMENT_PROVIDER,\n useClass: AXPAiFormbuilderOutputContractTranscriptSegmentProvider,\n multi: true,\n },\n ],\n})\nexport class AXEAIFormBuilderExtensionModule {}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport type { AXPWidgetNode } from '@acorex-platform/framework-shared/core';\nimport {\n axeBuildDesignerOutline,\n axeFindDesignerWidget,\n axeReadOptionalIndex,\n axeReadOptionalTriggers,\n axeReadOptionalVisible,\n axeReadStringArg,\n axeResolveWidgetNodeInput,\n type AXEAiFormbuilderDesignerOutlineItem,\n} from './ai-formbuilder-designer-ops.util';\nimport { axeResolveLayoutJsonInput } from './commands/validate-layout-json.util';\n\n//#endregion\n\n//#region ----- Types -----\n\nexport interface AXEAiFormbuilderLayoutJsonOutlineResult {\n items: AXEAiFormbuilderDesignerOutlineItem[];\n errors: string[];\n}\n\nexport interface AXEAiFormbuilderLayoutJsonMutationResult {\n applied: boolean;\n json?: string;\n name?: string;\n path?: string;\n errors: string[];\n}\n\n//#endregion\n\n//#region ----- Outline -----\n\nexport function axeOutlineLayoutJson(input: {\n json?: unknown;\n layoutJson?: unknown;\n}): AXEAiFormbuilderLayoutJsonOutlineResult {\n const parsed = parseLayoutTree(input);\n if (!parsed.root) {\n return { items: [], errors: parsed.errors };\n }\n return { items: axeBuildDesignerOutline(parsed.root), errors: [] };\n}\n\n//#endregion\n\n//#region ----- Mutations -----\n\nexport function axeAddWidgetToLayoutJson(input: {\n json?: unknown;\n layoutJson?: unknown;\n parentName?: string;\n parentPath?: string;\n widget?: unknown;\n index?: unknown;\n}): AXEAiFormbuilderLayoutJsonMutationResult {\n const parsed = parseLayoutTree(input);\n if (!parsed.root) {\n return fail(parsed.errors);\n }\n const widget = axeResolveWidgetNodeInput(input.widget);\n if (!widget) {\n return fail(['widget must be an AXPWidgetNode object with a string type.']);\n }\n const parent = axeFindDesignerWidget(parsed.root, {\n name: axeReadStringArg(input.parentName),\n path: axeReadStringArg(input.parentPath),\n });\n if (!parent) {\n return fail([missingWidgetRefError('parent', input.parentName, input.parentPath)]);\n }\n parent.node.children = parent.node.children ?? [];\n const index = axeReadOptionalIndex(input.index);\n const insertAt =\n index == null ? parent.node.children.length : Math.max(0, Math.min(index, parent.node.children.length));\n parent.node.children.splice(insertAt, 0, widget);\n return success(parsed.root, widget);\n}\n\nexport function axeUpdateWidgetInLayoutJson(input: {\n json?: unknown;\n layoutJson?: unknown;\n name?: string;\n path?: string;\n options?: unknown;\n validations?: unknown;\n triggers?: unknown;\n visible?: unknown;\n}): AXEAiFormbuilderLayoutJsonMutationResult {\n const parsed = parseLayoutTree(input);\n if (!parsed.root) {\n return fail(parsed.errors);\n }\n const hit = axeFindDesignerWidget(parsed.root, {\n name: axeReadStringArg(input.name),\n path: axeReadStringArg(input.path),\n });\n if (!hit) {\n return fail([missingWidgetRefError('widget', input.name, input.path)]);\n }\n const options: Record<string, unknown> = {\n ...(hit.node.options && typeof hit.node.options === 'object' && !Array.isArray(hit.node.options)\n ? hit.node.options\n : {}),\n };\n if (input.options != null && typeof input.options === 'object' && !Array.isArray(input.options)) {\n Object.assign(options, input.options);\n }\n if (input.validations != null) {\n options['validations'] = input.validations;\n }\n const triggers = axeReadOptionalTriggers(input.triggers);\n const visible = axeReadOptionalVisible(input.visible);\n const touchedOptions = input.options != null || input.validations != null;\n if (!touchedOptions && !triggers.set && !visible.set) {\n return fail(['Provide options, validations, triggers, and/or visible to update.']);\n }\n if (touchedOptions) {\n hit.node.options = options;\n }\n if (triggers.set) {\n hit.node.triggers = triggers.value ?? [];\n }\n if (visible.set) {\n hit.node.visible = visible.value;\n }\n return success(parsed.root, hit.node, hit.path);\n}\n\nexport function axeRemoveWidgetFromLayoutJson(input: {\n json?: unknown;\n layoutJson?: unknown;\n name?: string;\n path?: string;\n}): AXEAiFormbuilderLayoutJsonMutationResult {\n const parsed = parseLayoutTree(input);\n if (!parsed.root) {\n return fail(parsed.errors);\n }\n const hit = axeFindDesignerWidget(parsed.root, {\n name: axeReadStringArg(input.name),\n path: axeReadStringArg(input.path),\n });\n if (!hit) {\n return fail([missingWidgetRefError('widget', input.name, input.path)]);\n }\n if (!hit.parent) {\n return fail(['Cannot remove the root widget.']);\n }\n const children = hit.parent.children;\n if (!Array.isArray(children)) {\n return fail(['The parent has no children.']);\n }\n const at = children.indexOf(hit.node);\n if (at < 0) {\n return fail(['The widget is no longer under its parent.']);\n }\n children.splice(at, 1);\n return { applied: true, errors: [], json: JSON.stringify(parsed.root) };\n}\n\nexport function axeMoveWidgetInLayoutJson(input: {\n json?: unknown;\n layoutJson?: unknown;\n name?: string;\n path?: string;\n parentName?: string;\n parentPath?: string;\n index?: unknown;\n}): AXEAiFormbuilderLayoutJsonMutationResult {\n const parsed = parseLayoutTree(input);\n if (!parsed.root) {\n return fail(parsed.errors);\n }\n const hit = axeFindDesignerWidget(parsed.root, {\n name: axeReadStringArg(input.name),\n path: axeReadStringArg(input.path),\n });\n if (!hit?.parent) {\n return fail([missingWidgetRefError('widget', input.name, input.path)]);\n }\n const parentName = axeReadStringArg(input.parentName);\n const parentPath = axeReadStringArg(input.parentPath);\n const nextParent =\n parentName || parentPath\n ? axeFindDesignerWidget(parsed.root, { name: parentName, path: parentPath })?.node\n : hit.parent;\n if (!nextParent) {\n return fail([missingWidgetRefError('parent', input.parentName, input.parentPath)]);\n }\n const index = axeReadOptionalIndex(input.index);\n const from = hit.parent.children;\n if (!Array.isArray(from)) {\n return fail(['The current parent has no children.']);\n }\n const at = from.indexOf(hit.node);\n if (at < 0) {\n return fail(['The widget is no longer under its parent.']);\n }\n if (nextParent === hit.parent && index == null) {\n return fail(['Provide parentName/parentPath or index to move the widget.']);\n }\n from.splice(at, 1);\n nextParent.children = nextParent.children ?? [];\n const insertAt =\n index == null\n ? nextParent.children.length\n : Math.max(0, Math.min(index, nextParent.children.length));\n nextParent.children.splice(insertAt, 0, hit.node);\n return success(parsed.root, hit.node);\n}\n\n//#endregion\n\n//#region ----- Parse -----\n\nfunction parseLayoutTree(input: { json?: unknown; layoutJson?: unknown }): {\n root: AXPWidgetNode | null;\n errors: string[];\n} {\n const raw = axeResolveLayoutJsonInput(input);\n if (!raw) {\n return { root: null, errors: ['Missing json. Pass the AXPWidgetNode tree as json.'] };\n }\n try {\n const parsed = JSON.parse(raw) as unknown;\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n return { root: null, errors: ['json must be an AXPWidgetNode object.'] };\n }\n const type = (parsed as Record<string, unknown>)['type'];\n if (typeof type !== 'string' || !type.trim()) {\n return { root: null, errors: ['json type must be a widget registry name.'] };\n }\n return { root: parsed as AXPWidgetNode, errors: [] };\n } catch (error) {\n return {\n root: null,\n errors: [error instanceof Error ? `JSON parse error: ${error.message}` : 'Invalid JSON.'],\n };\n }\n}\n\nfunction success(\n root: AXPWidgetNode,\n node: AXPWidgetNode,\n knownPath?: string,\n): AXEAiFormbuilderLayoutJsonMutationResult {\n const json = JSON.stringify(root);\n const name = typeof node.name === 'string' ? node.name.trim() : '';\n const outline = axeBuildDesignerOutline(root);\n const hit = name\n ? outline.find((item) => item.name === name)\n : knownPath\n ? outline.find((item) => item.path === knownPath)\n : undefined;\n return {\n applied: true,\n errors: [],\n json,\n ...(name ? { name } : {}),\n ...(hit?.path || knownPath ? { path: hit?.path ?? knownPath } : {}),\n };\n}\n\nfunction fail(errors: string[]): AXEAiFormbuilderLayoutJsonMutationResult {\n return { applied: false, errors };\n}\n\nfunction missingWidgetRefError(kind: string, name?: string, path?: string): string {\n const nameText = axeReadStringArg(name);\n const pathText = axeReadStringArg(path);\n if (nameText || pathText) {\n return `No ${kind} found for ${nameText ? `name \"${nameText}\"` : `path \"${pathText}\"`}. Call OutlineLayoutForAi with the same json.`;\n }\n return `Provide ${kind}Name or ${kind}Path from OutlineLayoutForAi.`;\n}\n\n//#endregion\n","import { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\n\nimport { Injectable } from '@angular/core';\nimport { axeParseAndValidateLayoutJson, axeResolveLayoutJsonInput } from './validate-layout-json.util';\n\n//#region ----- Types -----\n\n/** Result payload for {@link AXEAiFormbuilderValidateLayoutJsonForAiCommand}. */\nexport interface AXEAiFormbuilderValidateLayoutJsonForAiCommandData {\n valid: boolean;\n errors: string[];\n normalizedJson?: string;\n}\n\nexport interface AXEAiFormbuilderValidateLayoutJsonForAiCommandInput {\n json?: string | unknown;\n layoutJson?: string | unknown;\n}\n\n//#endregion\n\n//#region ----- Command -----\n\n@Injectable({ providedIn: 'root' })\nexport class AXEAiFormbuilderValidateLayoutJsonForAiCommand\n implements\n AXPCommand<AXEAiFormbuilderValidateLayoutJsonForAiCommandInput, AXEAiFormbuilderValidateLayoutJsonForAiCommandData>\n{\n async execute(\n input: AXEAiFormbuilderValidateLayoutJsonForAiCommandInput,\n ): AXPCommandExecuteResultPromise<AXEAiFormbuilderValidateLayoutJsonForAiCommandData> {\n const raw = axeResolveLayoutJsonInput(input);\n const data = axeParseAndValidateLayoutJson(raw);\n return {\n success: true,\n kind: 'object',\n data,\n ...(data.valid ? {} : { message: { text: data.errors[0] ?? 'Invalid layout JSON.' } }),\n };\n }\n}\n\n//#endregion\n","/**\n * Build-time only. Do not import from Angular modules.\n * Source: validate-layout-json-for-ai.command.ts — AXEAiFormbuilderValidateLayoutJsonForAiCommand.execute\n */\n\nimport { AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS, defineCommand } from '@acorex-platform/framework-shared/runtime';\nexport const axeAiFormbuilderValidateLayoutJsonForAiCommandDefinition = defineCommand({\n key: 'AiFormbuilder:ValidateLayoutJsonForAi',\n title: 'Validate widget layout JSON for AI (form template designer)',\n description:\n 'Parses a JSON string and checks it is a single root AXPWidgetNode (object with string type, optional children/options). Rejects raw CSS/DOM-style keys.',\n executionMode: 'frontend',\n inputs: [\n {\n name: 'json',\n title: 'Layout JSON string',\n description:\n 'Stringified widget tree: one root object with \"type\" (registry name). Optional markdown/json fences are stripped.',\n interface: { name: 'large-text-editor' },\n validations: [{ rule: 'required' }],\n },\n ],\n outcomes: {\n mode: 'static',\n values: ['success', 'failure'],\n },\n ai: {\n shortDescription:\n 'Validate specialist JSON is parseable and shaped like AXPWidgetNode before returning it to chat.',\n tags: ['ai-formbuilder', 'layout', 'ai', 'validation'],\n },\n capabilities: ['ai'],\n categories: [AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS],\n});\n","//#region ----- Imports -----\n\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { inject, Injectable } from '@angular/core';\nimport { AXEAiFormbuilderDesignerAiAssistService } from '../ai-formbuilder-designer-ai-assist.service';\nimport { axeResolveLayoutJsonInput } from './validate-layout-json.util';\n\n//#endregion\n\n//#region ----- Types -----\n\nexport interface AXEAiFormbuilderApplyLayoutJsonForAiCommandInput {\n json?: string | unknown;\n layoutJson?: string | unknown;\n}\n\nexport interface AXEAiFormbuilderApplyLayoutJsonForAiCommandData {\n applied: boolean;\n errors: string[];\n}\n\n//#endregion\n\n//#region ----- Command -----\n\n/** Applies validated designer JSON to the open form-template canvas. */\n@Injectable({ providedIn: 'root' })\nexport class AXEAiFormbuilderApplyLayoutJsonForAiCommand\n implements\n AXPCommand<AXEAiFormbuilderApplyLayoutJsonForAiCommandInput, AXEAiFormbuilderApplyLayoutJsonForAiCommandData>\n{\n //#region ----- Services & Dependencies -----\n\n private readonly assist = inject(AXEAiFormbuilderDesignerAiAssistService);\n\n //#endregion\n\n async execute(\n input: AXEAiFormbuilderApplyLayoutJsonForAiCommandInput,\n ): AXPCommandExecuteResultPromise<AXEAiFormbuilderApplyLayoutJsonForAiCommandData> {\n const raw = axeResolveLayoutJsonInput(input);\n const data = await this.assist.applyLayoutJson(raw);\n return {\n success: true,\n kind: 'object',\n data,\n ...(data.applied ? {} : { message: { text: data.errors[0] ?? 'Layout was not applied.' } }),\n };\n }\n}\n\n//#endregion\n","/**\n * Build-time only. Do not import from Angular modules.\n * Source: apply-layout-json-for-ai.command.ts — AXEAiFormbuilderApplyLayoutJsonForAiCommand.execute\n */\n\nimport { AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS, defineCommand } from '@acorex-platform/framework-shared/runtime';\n\nexport const axeAiFormbuilderApplyLayoutJsonForAiCommandDefinition = defineCommand({\n key: 'AiFormbuilder:ApplyLayoutJsonForAi',\n title: 'Apply widget layout JSON to the form designer',\n description:\n 'Validates a root AXPWidgetNode and loads it onto the open Form Template designer canvas (document-layout or page-layout). Prefer Page:RunAction apply-layout on form-designer-assistant for live canvas writes. Does not save — the user uses File → Save.',\n executionMode: 'frontend',\n inputs: [\n {\n name: 'json',\n title: 'Layout JSON string',\n description:\n 'Stringified designer widget tree. Root must be document-layout (form template) or page-layout (widget template).',\n interface: { name: 'large-text-editor' },\n validations: [{ rule: 'required' }],\n },\n ],\n outcomes: {\n mode: 'static',\n values: ['success', 'failure'],\n },\n ai: {\n shortDescription:\n 'Write validated designer JSON onto the open form-template canvas so the user sees the change immediately.',\n tags: ['ai-formbuilder', 'layout', 'ai', 'apply'],\n },\n capabilities: ['ai'],\n categories: [AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS],\n});\n","//#region ----- Imports -----\n\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { Injectable } from '@angular/core';\nimport {\n axeOutlineLayoutJson,\n type AXEAiFormbuilderLayoutJsonOutlineResult,\n} from '../ai-formbuilder-layout-json.util';\n\n//#endregion\n\n//#region ----- Types -----\n\nexport interface AXEAiFormbuilderOutlineLayoutForAiCommandInput {\n json?: unknown;\n layoutJson?: unknown;\n}\n\nexport type AXEAiFormbuilderOutlineLayoutForAiCommandData = AXEAiFormbuilderLayoutJsonOutlineResult;\n\n//#endregion\n\n//#region ----- Command -----\n\n@Injectable({ providedIn: 'root' })\nexport class AXEAiFormbuilderOutlineLayoutForAiCommand\n implements\n AXPCommand<AXEAiFormbuilderOutlineLayoutForAiCommandInput, AXEAiFormbuilderOutlineLayoutForAiCommandData>\n{\n async execute(\n input: AXEAiFormbuilderOutlineLayoutForAiCommandInput = {},\n ): AXPCommandExecuteResultPromise<AXEAiFormbuilderOutlineLayoutForAiCommandData> {\n const data = axeOutlineLayoutJson(input);\n return {\n success: true,\n kind: 'object',\n data,\n ...(data.errors[0] ? { message: { text: data.errors[0] } } : {}),\n };\n }\n}\n\n//#endregion\n","/**\n * Build-time only. Do not import from Angular modules.\n * Source: outline-layout-for-ai.command.ts — AXEAiFormbuilderOutlineLayoutForAiCommand.execute\n */\n\nimport { AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS, defineCommand } from '@acorex-platform/framework-shared/runtime';\n\nexport const axeAiFormbuilderOutlineLayoutForAiCommandDefinition = defineCommand({\n key: 'AiFormbuilder:OutlineLayoutForAi',\n title: 'Outline a layout JSON tree',\n description:\n 'Returns a compact list of widgets (name, type, label, parent, path) from an AXPWidgetNode JSON tree. Does not touch the live designer. Pass the same json to Add/Update/Remove/Move.',\n executionMode: 'frontend',\n inputs: [\n {\n name: 'json',\n title: 'Layout JSON',\n description: 'AXPWidgetNode tree (string or object). Chat block-layout or designer document-layout.',\n interface: { name: 'large-text-editor' },\n validations: [{ rule: 'required' }],\n },\n ],\n outcomes: {\n mode: 'static',\n values: ['success', 'failure'],\n },\n ai: {\n shortDescription: 'List widgets in a layout JSON tree by name/type/path without rewriting the tree.',\n tags: ['ai-formbuilder', 'layout', 'ai', 'outline', 'json'],\n },\n capabilities: ['ai'],\n categories: [AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS],\n});\n","//#region ----- Imports -----\n\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { Injectable } from '@angular/core';\nimport {\n axeAddWidgetToLayoutJson,\n type AXEAiFormbuilderLayoutJsonMutationResult,\n} from '../ai-formbuilder-layout-json.util';\n\n//#endregion\n\n//#region ----- Types -----\n\nexport interface AXEAiFormbuilderAddWidgetForAiCommandInput {\n json?: unknown;\n layoutJson?: unknown;\n parentName?: string;\n parentPath?: string;\n widget?: unknown;\n index?: unknown;\n}\n\nexport type AXEAiFormbuilderAddWidgetForAiCommandData = AXEAiFormbuilderLayoutJsonMutationResult;\n\n//#endregion\n\n//#region ----- Command -----\n\n@Injectable({ providedIn: 'root' })\nexport class AXEAiFormbuilderAddWidgetForAiCommand\n implements\n AXPCommand<AXEAiFormbuilderAddWidgetForAiCommandInput, AXEAiFormbuilderAddWidgetForAiCommandData>\n{\n async execute(\n input: AXEAiFormbuilderAddWidgetForAiCommandInput,\n ): AXPCommandExecuteResultPromise<AXEAiFormbuilderAddWidgetForAiCommandData> {\n const data = axeAddWidgetToLayoutJson(input);\n return {\n success: true,\n kind: 'object',\n data,\n ...(data.applied ? {} : { message: { text: data.errors[0] ?? 'The widget was not added.' } }),\n };\n }\n}\n\n//#endregion\n","/**\n * Build-time only. Do not import from Angular modules.\n * Source: add-widget-for-ai.command.ts — AXEAiFormbuilderAddWidgetForAiCommand.execute\n */\n\nimport { AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS, defineCommand } from '@acorex-platform/framework-shared/runtime';\n\nexport const axeAiFormbuilderAddWidgetForAiCommandDefinition = defineCommand({\n key: 'AiFormbuilder:AddWidgetForAi',\n title: 'Add a widget in layout JSON',\n description:\n 'Inserts one AXPWidgetNode under a parent inside a layout JSON tree and returns the updated json. Does not touch the live designer. Address the parent by name or path from OutlineLayoutForAi.',\n executionMode: 'frontend',\n inputs: [\n {\n name: 'json',\n title: 'Layout JSON',\n description: 'Current AXPWidgetNode tree (string or object).',\n interface: { name: 'large-text-editor' },\n validations: [{ rule: 'required' }],\n },\n {\n name: 'parentName',\n title: 'Parent widget name',\n description: 'name from OutlineLayoutForAi. Prefer this over parentPath.',\n interface: { name: 'text-editor' },\n },\n {\n name: 'parentPath',\n title: 'Parent widget path',\n description: 'path from OutlineLayoutForAi when the parent has no name.',\n interface: { name: 'text-editor' },\n },\n {\n name: 'widget',\n title: 'Widget node',\n description: 'One AXPWidgetNode object (type plus options/children). Not the full tree.',\n interface: { name: 'json' },\n validations: [{ rule: 'required' }],\n },\n {\n name: 'index',\n title: 'Insert index',\n description: 'Optional child index under the parent. Omit to append.',\n interface: { name: 'number-editor' },\n },\n ],\n outcomes: {\n mode: 'static',\n values: ['success', 'failure'],\n },\n ai: {\n shortDescription: 'Add one widget under a named parent in a layout JSON tree and return the new json.',\n tags: ['ai-formbuilder', 'layout', 'ai', 'add', 'json'],\n },\n capabilities: ['ai'],\n categories: [AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS],\n});\n","//#region ----- Imports -----\n\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { Injectable } from '@angular/core';\nimport {\n axeUpdateWidgetInLayoutJson,\n type AXEAiFormbuilderLayoutJsonMutationResult,\n} from '../ai-formbuilder-layout-json.util';\n\n//#endregion\n\n//#region ----- Types -----\n\nexport interface AXEAiFormbuilderUpdateWidgetForAiCommandInput {\n json?: unknown;\n layoutJson?: unknown;\n name?: string;\n path?: string;\n options?: unknown;\n validations?: unknown;\n triggers?: unknown;\n visible?: unknown;\n}\n\nexport type AXEAiFormbuilderUpdateWidgetForAiCommandData = AXEAiFormbuilderLayoutJsonMutationResult;\n\n//#endregion\n\n//#region ----- Command -----\n\n@Injectable({ providedIn: 'root' })\nexport class AXEAiFormbuilderUpdateWidgetForAiCommand\n implements\n AXPCommand<AXEAiFormbuilderUpdateWidgetForAiCommandInput, AXEAiFormbuilderUpdateWidgetForAiCommandData>\n{\n async execute(\n input: AXEAiFormbuilderUpdateWidgetForAiCommandInput,\n ): AXPCommandExecuteResultPromise<AXEAiFormbuilderUpdateWidgetForAiCommandData> {\n const data = axeUpdateWidgetInLayoutJson(input);\n return {\n success: true,\n kind: 'object',\n data,\n ...(data.applied ? {} : { message: { text: data.errors[0] ?? 'The widget was not updated.' } }),\n };\n }\n}\n\n//#endregion\n","/**\n * Build-time only. Do not import from Angular modules.\n * Source: update-widget-for-ai.command.ts — AXEAiFormbuilderUpdateWidgetForAiCommand.execute\n */\n\nimport { AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS, defineCommand } from '@acorex-platform/framework-shared/runtime';\n\nexport const axeAiFormbuilderUpdateWidgetForAiCommandDefinition = defineCommand({\n key: 'AiFormbuilder:UpdateWidgetForAi',\n title: 'Update a widget in layout JSON',\n description:\n 'Patches options, validations, triggers, and/or visible on one widget inside a layout JSON tree and returns the updated json. triggers and visible sit on the node root, not inside options. Does not touch the live designer.',\n executionMode: 'frontend',\n inputs: [\n {\n name: 'json',\n title: 'Layout JSON',\n description: 'Current AXPWidgetNode tree (string or object).',\n interface: { name: 'large-text-editor' },\n validations: [{ rule: 'required' }],\n },\n {\n name: 'name',\n title: 'Widget name',\n description: 'name from OutlineLayoutForAi. Prefer this over path.',\n interface: { name: 'text-editor' },\n },\n {\n name: 'path',\n title: 'Widget path',\n description: 'path from OutlineLayoutForAi when the widget has no name.',\n interface: { name: 'text-editor' },\n },\n {\n name: 'options',\n title: 'Options patch',\n description: 'Partial options object merged onto the widget (label, hint, cols, …).',\n interface: { name: 'json' },\n },\n {\n name: 'validations',\n title: 'Validations',\n description: 'Replaces options.validations on the widget (e.g. [{ \"rule\": \"required\" }]).',\n interface: { name: 'json' },\n },\n {\n name: 'triggers',\n title: 'Triggers',\n description: 'Replaces node.triggers: [{ event, action }] expression strings. Empty array clears.',\n interface: { name: 'json' },\n },\n {\n name: 'visible',\n title: 'Visible',\n description: 'Replaces node.visible (boolean or \"{{ context.eval(...) }}\").',\n interface: { name: 'text-editor' },\n },\n ],\n outcomes: {\n mode: 'static',\n values: ['success', 'failure'],\n },\n ai: {\n shortDescription: 'Patch options, validations, triggers, or visible on one widget in a layout JSON tree.',\n tags: ['ai-formbuilder', 'layout', 'ai', 'update', 'json'],\n },\n capabilities: ['ai'],\n categories: [AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS],\n});\n","//#region ----- Imports -----\n\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { Injectable } from '@angular/core';\nimport {\n axeRemoveWidgetFromLayoutJson,\n type AXEAiFormbuilderLayoutJsonMutationResult,\n} from '../ai-formbuilder-layout-json.util';\n\n//#endregion\n\n//#region ----- Types -----\n\nexport interface AXEAiFormbuilderRemoveWidgetForAiCommandInput {\n json?: unknown;\n layoutJson?: unknown;\n name?: string;\n path?: string;\n}\n\nexport type AXEAiFormbuilderRemoveWidgetForAiCommandData = AXEAiFormbuilderLayoutJsonMutationResult;\n\n//#endregion\n\n//#region ----- Command -----\n\n@Injectable({ providedIn: 'root' })\nexport class AXEAiFormbuilderRemoveWidgetForAiCommand\n implements\n AXPCommand<AXEAiFormbuilderRemoveWidgetForAiCommandInput, AXEAiFormbuilderRemoveWidgetForAiCommandData>\n{\n async execute(\n input: AXEAiFormbuilderRemoveWidgetForAiCommandInput,\n ): AXPCommandExecuteResultPromise<AXEAiFormbuilderRemoveWidgetForAiCommandData> {\n const data = axeRemoveWidgetFromLayoutJson(input);\n return {\n success: true,\n kind: 'object',\n data,\n ...(data.applied ? {} : { message: { text: data.errors[0] ?? 'The widget was not removed.' } }),\n };\n }\n}\n\n//#endregion\n","/**\n * Build-time only. Do not import from Angular modules.\n * Source: remove-widget-for-ai.command.ts — AXEAiFormbuilderRemoveWidgetForAiCommand.execute\n */\n\nimport { AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS, defineCommand } from '@acorex-platform/framework-shared/runtime';\n\nexport const axeAiFormbuilderRemoveWidgetForAiCommandDefinition = defineCommand({\n key: 'AiFormbuilder:RemoveWidgetForAi',\n title: 'Remove a widget from layout JSON',\n description:\n 'Removes one widget from a layout JSON tree and returns the updated json. Does not touch the live designer. Cannot remove the root. Address the widget by name or path from OutlineLayoutForAi.',\n executionMode: 'frontend',\n inputs: [\n {\n name: 'json',\n title: 'Layout JSON',\n description: 'Current AXPWidgetNode tree (string or object).',\n interface: { name: 'large-text-editor' },\n validations: [{ rule: 'required' }],\n },\n {\n name: 'name',\n title: 'Widget name',\n description: 'name from OutlineLayoutForAi. Prefer this over path.',\n interface: { name: 'text-editor' },\n },\n {\n name: 'path',\n title: 'Widget path',\n description: 'path from OutlineLayoutForAi when the widget has no name.',\n interface: { name: 'text-editor' },\n },\n ],\n outcomes: {\n mode: 'static',\n values: ['success', 'failure'],\n },\n ai: {\n shortDescription: 'Remove one widget from a layout JSON tree and return the new json.',\n tags: ['ai-formbuilder', 'layout', 'ai', 'remove', 'json'],\n },\n capabilities: ['ai'],\n categories: [AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS],\n});\n","//#region ----- Imports -----\n\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { Injectable } from '@angular/core';\nimport {\n axeMoveWidgetInLayoutJson,\n type AXEAiFormbuilderLayoutJsonMutationResult,\n} from '../ai-formbuilder-layout-json.util';\n\n//#endregion\n\n//#region ----- Types -----\n\nexport interface AXEAiFormbuilderMoveWidgetForAiCommandInput {\n json?: unknown;\n layoutJson?: unknown;\n name?: string;\n path?: string;\n parentName?: string;\n parentPath?: string;\n index?: unknown;\n}\n\nexport type AXEAiFormbuilderMoveWidgetForAiCommandData = AXEAiFormbuilderLayoutJsonMutationResult;\n\n//#endregion\n\n//#region ----- Command -----\n\n@Injectable({ providedIn: 'root' })\nexport class AXEAiFormbuilderMoveWidgetForAiCommand\n implements\n AXPCommand<AXEAiFormbuilderMoveWidgetForAiCommandInput, AXEAiFormbuilderMoveWidgetForAiCommandData>\n{\n async execute(\n input: AXEAiFormbuilderMoveWidgetForAiCommandInput,\n ): AXPCommandExecuteResultPromise<AXEAiFormbuilderMoveWidgetForAiCommandData> {\n const data = axeMoveWidgetInLayoutJson(input);\n return {\n success: true,\n kind: 'object',\n data,\n ...(data.applied ? {} : { message: { text: data.errors[0] ?? 'The widget was not moved.' } }),\n };\n }\n}\n\n//#endregion\n","/**\n * Build-time only. Do not import from Angular modules.\n * Source: move-widget-for-ai.command.ts — AXEAiFormbuilderMoveWidgetForAiCommand.execute\n */\n\nimport { AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS, defineCommand } from '@acorex-platform/framework-shared/runtime';\n\nexport const axeAiFormbuilderMoveWidgetForAiCommandDefinition = defineCommand({\n key: 'AiFormbuilder:MoveWidgetForAi',\n title: 'Move a widget in layout JSON',\n description:\n 'Moves one widget to another parent and/or index inside a layout JSON tree and returns the updated json. Does not touch the live designer. Address widgets by name or path from OutlineLayoutForAi.',\n executionMode: 'frontend',\n inputs: [\n {\n name: 'json',\n title: 'Layout JSON',\n description: 'Current AXPWidgetNode tree (string or object).',\n interface: { name: 'large-text-editor' },\n validations: [{ rule: 'required' }],\n },\n {\n name: 'name',\n title: 'Widget name',\n description: 'name from OutlineLayoutForAi. Prefer this over path.',\n interface: { name: 'text-editor' },\n },\n {\n name: 'path',\n title: 'Widget path',\n description: 'path from OutlineLayoutForAi when the widget has no name.',\n interface: { name: 'text-editor' },\n },\n {\n name: 'parentName',\n title: 'New parent name',\n description: 'Destination parent name from OutlineLayoutForAi. Omit to reorder under the current parent.',\n interface: { name: 'text-editor' },\n },\n {\n name: 'parentPath',\n title: 'New parent path',\n description: 'Destination parent path when the parent has no name.',\n interface: { name: 'text-editor' },\n },\n {\n name: 'index',\n title: 'Insert index',\n description: 'Child index under the destination parent.',\n interface: { name: 'number-editor' },\n },\n ],\n outcomes: {\n mode: 'static',\n values: ['success', 'failure'],\n },\n ai: {\n shortDescription: 'Move one widget in a layout JSON tree and return the new json.',\n tags: ['ai-formbuilder', 'layout', 'ai', 'move', 'json'],\n },\n capabilities: ['ai'],\n categories: [AXP_COMMAND_DEFINITION_CATEGORY_AI_TOOLS],\n});\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["stripJsonFences","missingWidgetRefError"],"mappings":"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"}
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@acorex-platform/extension-ai-formbuilder-client",
3
- "version": "0.0.46",
3
+ "version": "0.0.48",
4
4
  "sideEffects": false,
5
5
  "peerDependencies": {
6
- "@acorex-platform/module-conversation-client": "0.0.46",
6
+ "@acorex-platform/module-conversation-client": "0.0.48",
7
7
  "@angular/common": "^21.0.0 || ^22.0.0",
8
8
  "@angular/core": "^21.0.0 || ^22.0.0"
9
9
  },
@@ -1,5 +1,7 @@
1
+ import { AXPSettingDefinitionProvider, AXPSettingDefinitionProviderContext } from '@acorex-platform/framework-client/common';
1
2
  import * as i0 from '@angular/core';
2
3
  import { DestroyRef } from '@angular/core';
4
+ import * as i1 from '@acorex-platform/module-ai-management-client';
3
5
  import { AXPHookProvider } from '@acorex-platform/framework-client/core';
4
6
  import { AXPLayoutDesignerHeaderMenuSubmenuPayload, AXPLayoutDesignerFooterEndPayload } from '@acorex-platform/framework-client/layout/designer';
5
7
  import { AXPCommand, AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';
@@ -36,13 +38,31 @@ declare const AXE_AI_FORMBUILDER_PAGE_ACTION_MOVE_WIDGET = "move-widget";
36
38
  /** Seeded Form Designer assist (`AiManagement.Assist.name` = form-designer-assistant). Must match `AXMAiFormDesignerAssistId`. */
37
39
  declare const AXE_AI_FORMBUILDER_DESIGNER_ASSIST_ID = "b0000001-0000-4000-8000-000000000004";
38
40
 
41
+ /**
42
+ * Tenant setting for the assist opened from the form layout designer.
43
+ * Registered under Intelligence (`ai-settings`), not a separate settings group.
44
+ */
45
+ declare enum AXEAiFormbuilderDesignerSettings {
46
+ /**
47
+ * Assist primary key (`Assist.id`).
48
+ * When empty, the designer opens the seeded form-designer-assistant.
49
+ */
50
+ AssistId = "AiFormbuilder:Setting:Designer.AssistId"
51
+ }
52
+
53
+ declare class AXEAiFormbuilderDesignerSettingProvider implements AXPSettingDefinitionProvider {
54
+ provide(context: AXPSettingDefinitionProviderContext): Promise<void>;
55
+ static ɵfac: i0.ɵɵFactoryDeclaration<AXEAiFormbuilderDesignerSettingProvider, never>;
56
+ static ɵprov: i0.ɵɵInjectableDeclaration<AXEAiFormbuilderDesignerSettingProvider>;
57
+ }
58
+
39
59
  /**
40
60
  * Optional AI assist on the form-template designer (Help menu + footer magic icon).
41
61
  * Register next to {@link AXEAIConversationExtensionModule} in the application.
42
62
  */
43
63
  declare class AXEAIFormBuilderExtensionModule {
44
64
  static ɵfac: i0.ɵɵFactoryDeclaration<AXEAIFormBuilderExtensionModule, never>;
45
- static ɵmod: i0.ɵɵNgModuleDeclaration<AXEAIFormBuilderExtensionModule, never, never, never>;
65
+ static ɵmod: i0.ɵɵNgModuleDeclaration<AXEAIFormBuilderExtensionModule, never, [typeof i1.AXMAiManagementModule], never>;
46
66
  static ɵinj: i0.ɵɵInjectorDeclaration<AXEAIFormBuilderExtensionModule>;
47
67
  }
48
68
 
@@ -65,6 +85,7 @@ declare class AXEAiFormbuilderDesignerAiAssistService {
65
85
  private readonly entityService;
66
86
  private readonly pageContext;
67
87
  private readonly realtimeBus;
88
+ private readonly settings;
68
89
  private readonly destroyRef;
69
90
  private designer;
70
91
  private lastAppliedJson;
@@ -76,7 +97,8 @@ declare class AXEAiFormbuilderDesignerAiAssistService {
76
97
  */
77
98
  bindDesigner(designer: unknown, owner?: DestroyRef): void;
78
99
  /**
79
- * Toggles contextual assist for the designer's current template (close if open, otherwise open).
100
+ * Toggles contextual assist for the designer's current template.
101
+ * Close hides the live window; the next open shows that same instance.
80
102
  */
81
103
  toggleFromDesigner(designer: unknown): Promise<boolean>;
82
104
  /**
@@ -135,6 +157,8 @@ declare class AXEAiFormbuilderDesignerAiAssistService {
135
157
  applied: boolean;
136
158
  errors: string[];
137
159
  };
160
+ private designerLeaveBound;
161
+ private bindCloseWhenDesignerLeaves;
138
162
  private buildPageSnapshot;
139
163
  private detectApplyWipe;
140
164
  private runPageAction;
@@ -144,6 +168,10 @@ declare class AXEAiFormbuilderDesignerAiAssistService {
144
168
  private loadTemplateColumns;
145
169
  private resolveWidgetRef;
146
170
  private asAssistDisplayText;
171
+ /**
172
+ * Tenant setting from Intelligence → Form Designer. Blank falls back to the seeded form designer assist.
173
+ */
174
+ private resolveDesignerAssistId;
147
175
  static ɵfac: i0.ɵɵFactoryDeclaration<AXEAiFormbuilderDesignerAiAssistService, never>;
148
176
  static ɵprov: i0.ɵɵInjectableDeclaration<AXEAiFormbuilderDesignerAiAssistService>;
149
177
  }
@@ -563,5 +591,5 @@ declare const axeAiFormbuilderMoveWidgetForAiCommandDefinition: {
563
591
  categories: _acorex_platform_framework_shared_core.AXPDefinitionCategory[];
564
592
  };
565
593
 
566
- export { AXEAIFormBuilderExtensionModule, AXEAiFormbuilderAddWidgetForAiCommand, AXEAiFormbuilderApplyLayoutJsonForAiCommand, AXEAiFormbuilderDesignerAiAssistService, AXEAiFormbuilderDesignerFooterHookProvider, AXEAiFormbuilderDesignerHelpMenuHookProvider, AXEAiFormbuilderMoveWidgetForAiCommand, AXEAiFormbuilderOutlineLayoutForAiCommand, AXEAiFormbuilderRemoveWidgetForAiCommand, AXEAiFormbuilderUpdateWidgetForAiCommand, AXEAiFormbuilderValidateLayoutJsonForAiCommand, AXE_AI_FORMBUILDER_ADD_WIDGET_COMMAND, AXE_AI_FORMBUILDER_APPLY_LAYOUT_COMMAND, AXE_AI_FORMBUILDER_ASSIST_ACTION, AXE_AI_FORMBUILDER_ASSIST_KIND, AXE_AI_FORMBUILDER_ASSIST_SCENARIO, AXE_AI_FORMBUILDER_DESIGNER_ASSIST_ID, AXE_AI_FORMBUILDER_DESIGNER_DRAFT_ENTITY_ID, AXE_AI_FORMBUILDER_DESIGNER_ENTITY_TYPE, AXE_AI_FORMBUILDER_MOVE_WIDGET_COMMAND, AXE_AI_FORMBUILDER_OUTLINE_LAYOUT_COMMAND, AXE_AI_FORMBUILDER_PAGE_ACTION_ADD_WIDGET, AXE_AI_FORMBUILDER_PAGE_ACTION_APPLY_LAYOUT, AXE_AI_FORMBUILDER_PAGE_ACTION_MOVE_WIDGET, AXE_AI_FORMBUILDER_PAGE_ACTION_REMOVE_WIDGET, AXE_AI_FORMBUILDER_PAGE_ACTION_UPDATE_WIDGET, AXE_AI_FORMBUILDER_PAGE_CONTEXT_ID, AXE_AI_FORMBUILDER_REMOVE_WIDGET_COMMAND, AXE_AI_FORMBUILDER_UPDATE_WIDGET_COMMAND, AXE_AI_FORMBUILDER_VALIDATE_LAYOUT_COMMAND, axeAddWidgetToLayoutJson, axeAiFormbuilderAddWidgetForAiCommandDefinition, axeAiFormbuilderApplyLayoutJsonForAiCommandDefinition, axeAiFormbuilderMoveWidgetForAiCommandDefinition, axeAiFormbuilderOutlineLayoutForAiCommandDefinition, axeAiFormbuilderRemoveWidgetForAiCommandDefinition, axeAiFormbuilderUpdateWidgetForAiCommandDefinition, axeAiFormbuilderValidateLayoutJsonForAiCommandDefinition, axeMoveWidgetInLayoutJson, axeOutlineLayoutJson, axeRemoveWidgetFromLayoutJson, axeUpdateWidgetInLayoutJson };
594
+ export { AXEAIFormBuilderExtensionModule, AXEAiFormbuilderAddWidgetForAiCommand, AXEAiFormbuilderApplyLayoutJsonForAiCommand, AXEAiFormbuilderDesignerAiAssistService, AXEAiFormbuilderDesignerFooterHookProvider, AXEAiFormbuilderDesignerHelpMenuHookProvider, AXEAiFormbuilderDesignerSettingProvider, AXEAiFormbuilderDesignerSettings, AXEAiFormbuilderMoveWidgetForAiCommand, AXEAiFormbuilderOutlineLayoutForAiCommand, AXEAiFormbuilderRemoveWidgetForAiCommand, AXEAiFormbuilderUpdateWidgetForAiCommand, AXEAiFormbuilderValidateLayoutJsonForAiCommand, AXE_AI_FORMBUILDER_ADD_WIDGET_COMMAND, AXE_AI_FORMBUILDER_APPLY_LAYOUT_COMMAND, AXE_AI_FORMBUILDER_ASSIST_ACTION, AXE_AI_FORMBUILDER_ASSIST_KIND, AXE_AI_FORMBUILDER_ASSIST_SCENARIO, AXE_AI_FORMBUILDER_DESIGNER_ASSIST_ID, AXE_AI_FORMBUILDER_DESIGNER_DRAFT_ENTITY_ID, AXE_AI_FORMBUILDER_DESIGNER_ENTITY_TYPE, AXE_AI_FORMBUILDER_MOVE_WIDGET_COMMAND, AXE_AI_FORMBUILDER_OUTLINE_LAYOUT_COMMAND, AXE_AI_FORMBUILDER_PAGE_ACTION_ADD_WIDGET, AXE_AI_FORMBUILDER_PAGE_ACTION_APPLY_LAYOUT, AXE_AI_FORMBUILDER_PAGE_ACTION_MOVE_WIDGET, AXE_AI_FORMBUILDER_PAGE_ACTION_REMOVE_WIDGET, AXE_AI_FORMBUILDER_PAGE_ACTION_UPDATE_WIDGET, AXE_AI_FORMBUILDER_PAGE_CONTEXT_ID, AXE_AI_FORMBUILDER_REMOVE_WIDGET_COMMAND, AXE_AI_FORMBUILDER_UPDATE_WIDGET_COMMAND, AXE_AI_FORMBUILDER_VALIDATE_LAYOUT_COMMAND, axeAddWidgetToLayoutJson, axeAiFormbuilderAddWidgetForAiCommandDefinition, axeAiFormbuilderApplyLayoutJsonForAiCommandDefinition, axeAiFormbuilderMoveWidgetForAiCommandDefinition, axeAiFormbuilderOutlineLayoutForAiCommandDefinition, axeAiFormbuilderRemoveWidgetForAiCommandDefinition, axeAiFormbuilderUpdateWidgetForAiCommandDefinition, axeAiFormbuilderValidateLayoutJsonForAiCommandDefinition, axeMoveWidgetInLayoutJson, axeOutlineLayoutJson, axeRemoveWidgetFromLayoutJson, axeUpdateWidgetInLayoutJson };
567
595
  export type { AXEAiFormbuilderAddWidgetForAiCommandData, AXEAiFormbuilderAddWidgetForAiCommandInput, AXEAiFormbuilderApplyLayoutJsonForAiCommandData, AXEAiFormbuilderApplyLayoutJsonForAiCommandInput, AXEAiFormbuilderLayoutJsonMutationResult, AXEAiFormbuilderLayoutJsonOutlineResult, AXEAiFormbuilderMoveWidgetForAiCommandData, AXEAiFormbuilderMoveWidgetForAiCommandInput, AXEAiFormbuilderOutlineLayoutForAiCommandData, AXEAiFormbuilderOutlineLayoutForAiCommandInput, AXEAiFormbuilderRemoveWidgetForAiCommandData, AXEAiFormbuilderRemoveWidgetForAiCommandInput, AXEAiFormbuilderUpdateWidgetForAiCommandData, AXEAiFormbuilderUpdateWidgetForAiCommandInput, AXEAiFormbuilderValidateLayoutJsonForAiCommandData, AXEAiFormbuilderValidateLayoutJsonForAiCommandInput };