@praxisui/dynamic-form 8.0.0-beta.2 → 8.0.0-beta.20

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.
package/index.d.ts CHANGED
@@ -7,12 +7,12 @@ import { MatDialog } from '@angular/material/dialog';
7
7
  import { MatSnackBar } from '@angular/material/snack-bar';
8
8
  import { CdkDragStart, CdkDragMove, CdkDragEnd, CdkDragDrop } from '@angular/cdk/drag-drop';
9
9
  import * as _praxisui_core from '@praxisui/core';
10
- import { AsyncConfigStorage, FormLayout, FieldMetadata, FormLayoutRule, FormRuleTargetType as FormRuleTargetType$1, PraxisJsonLogicService, FormSection, FormRow, FormColumn, FormConfig, FormActionButton, AiCapability, BackConfig, ApiEndpoint, ApiUrlEntry, FormHooksLayout, EndpointConfig, FormSubmitEvent, FormReadyEvent, FormValueChangeEvent, SyncResult, FormInitializationError, LoadingState, FormCustomActionEvent, FormActionConfirmationEvent, RichContentDocument, JsonLogicRecord, GenericCrudService, ConnectionStorage, DynamicFormService, ErrorMessageService, SchemaNormalizerService, ComponentMetadataRegistry, GlobalConfigService, ComponentKeyService, LoadingOrchestrator, ApiUrlConfig, PraxisLoadingRenderer, FormHooksRegistry, FormHookPreset, LoggerService, FormSectionHeaderAction, FormSectionHeaderConfig, FormConfigState, FieldDefinition, ComponentDocMeta, Breakpoint, IconPickerService, SurfaceOpenPayload, AiCapabilityCategory, AiValueKind, AiCapabilityCatalog } from '@praxisui/core';
10
+ import { AsyncConfigStorage, FormLayout, FieldMetadata, FormLayoutRule, FormRuleTargetType as FormRuleTargetType$1, PraxisJsonLogicService, FormSection, FormRow, FormColumn, FormConfig, FormLayoutItem, FormActionButton, AiCapability, BackConfig, RichBlockHostCapabilities, ApiEndpoint, ApiUrlEntry, FormHooksLayout, EndpointConfig, FormSubmitEvent, FormReadyEvent, FormValueChangeEvent, SyncResult, FormInitializationError, LoadingState, FormCustomActionEvent, FormActionConfirmationEvent, RichContentDocument, JsonLogicRecord, GenericCrudService, ConnectionStorage, DynamicFormService, ErrorMessageService, SchemaNormalizerService, ComponentMetadataRegistry, GlobalConfigService, ComponentKeyService, LoadingOrchestrator, ApiUrlConfig, PraxisLoadingRenderer, FormHooksRegistry, FormHookPreset, LoggerService, FormSectionHeaderAction, FormSectionHeaderConfig, FormConfigState, GlobalActionCatalogEntry, FieldDefinition, ComponentDocMeta, Breakpoint, DomainRuleRequestOptions, DomainRuleService, DomainRuleMaterialization, IconPickerService, GlobalActionRef, SurfaceOpenPayload, AiCapabilityCategory, AiValueKind, AiCapabilityCatalog, ComponentAuthoringManifest } from '@praxisui/core';
11
11
  import * as rxjs from 'rxjs';
12
12
  import { Observable, BehaviorSubject } from 'rxjs';
13
13
  import { SettingsPanelService, SettingsValueProvider } from '@praxisui/settings-panel';
14
14
  import { KeyboardShortcutService } from '@praxisui/dynamic-fields';
15
- import { BaseAiAdapter, PatchResult } from '@praxisui/ai';
15
+ import { BaseAiAdapter, AiResponseCompileResult, PatchResult } from '@praxisui/ai';
16
16
  import { RuleBuilderConfig, RuleBuilderState } from '@praxisui/visual-builder';
17
17
 
18
18
  declare class FormLayoutService {
@@ -44,6 +44,15 @@ declare class FormContextService {
44
44
  static ɵprov: i0.ɵɵInjectableDeclaration<FormContextService>;
45
45
  }
46
46
 
47
+ type RuleApplicationDiagnosticCode = 'missing-targets' | 'missing-effect' | 'unsupported-target-type' | 'field-target-not-found' | 'target-not-found' | 'invalid-condition' | 'unsupported-property' | 'rule-evaluation-error';
48
+ interface RuleApplicationDiagnostic {
49
+ ruleId?: string;
50
+ ruleName?: string;
51
+ code: RuleApplicationDiagnosticCode;
52
+ targetType?: FormLayoutRule['targetType'];
53
+ targetId?: string;
54
+ details?: string[];
55
+ }
47
56
  /**
48
57
  * Structured properties resulting from rule evaluation.
49
58
  */
@@ -53,6 +62,13 @@ interface RuleApplicationResult {
53
62
  actionProps: Record<string, Record<string, any>>;
54
63
  rowProps: Record<string, Record<string, any>>;
55
64
  columnProps: Record<string, Record<string, any>>;
65
+ visualBlockProps: Record<string, Record<string, any>>;
66
+ diagnostics: RuleApplicationDiagnostic[];
67
+ }
68
+ type RuleApplicationTargetType = NonNullable<FormLayoutRule['targetType']>;
69
+ type RuleApplicationTargetIndex = Partial<Record<RuleApplicationTargetType, ReadonlySet<string>>>;
70
+ interface RuleApplicationContext {
71
+ targetIndex?: RuleApplicationTargetIndex;
56
72
  }
57
73
  declare class FormRulesService {
58
74
  private readonly jsonLogic;
@@ -64,8 +80,11 @@ declare class FormRulesService {
64
80
  * @param formRules The array of rules to process.
65
81
  * @returns A RuleEvaluationResult object containing the visibility and required states for the fields.
66
82
  */
67
- applyRules(formGroup: FormGroup, formRules: FormLayoutRule[]): RuleApplicationResult;
83
+ applyRules(formGroup: FormGroup, formRules: FormLayoutRule[], context?: RuleApplicationContext): RuleApplicationResult;
84
+ private ruleTargetExists;
85
+ private normalizeRuleTargetId;
68
86
  private evaluateCondition;
87
+ private addUnsupportedPropertyDiagnostics;
69
88
  private setPath;
70
89
  private deletePath;
71
90
  static ɵfac: i0.ɵɵFactoryDeclaration<FormRulesService, never>;
@@ -96,6 +115,7 @@ interface Operation {
96
115
  sectionId?: string;
97
116
  rowId?: string;
98
117
  columnId?: string;
118
+ itemId?: string;
99
119
  fieldName?: string;
100
120
  sectionIndex?: number;
101
121
  rowIndex?: number;
@@ -106,6 +126,7 @@ interface Operation {
106
126
  sectionId?: string;
107
127
  rowId?: string;
108
128
  columnId?: string;
129
+ itemId?: string;
109
130
  fieldName?: string;
110
131
  sectionIndex?: number;
111
132
  rowIndex?: number;
@@ -156,6 +177,23 @@ interface ValidationReport {
156
177
  valid: boolean;
157
178
  errors: string[];
158
179
  }
180
+ type LocalFieldInsertionDiagnosticCode = 'missing-field-name' | 'missing-control-type' | 'field-name-already-exists' | 'schema-field-name-collision' | 'invalid-local-field-source';
181
+ interface LocalFieldInsertionDiagnostic {
182
+ code: LocalFieldInsertionDiagnosticCode;
183
+ severity: 'error' | 'warning';
184
+ message: string;
185
+ fieldName?: string;
186
+ }
187
+ interface InsertLocalFieldOptions {
188
+ atIndex?: number;
189
+ schemaFieldNames?: Iterable<string>;
190
+ correlationId?: string;
191
+ origin?: string;
192
+ }
193
+ interface InsertLocalFieldResult extends LayoutResult {
194
+ applied: boolean;
195
+ diagnostics: LocalFieldInsertionDiagnostic[];
196
+ }
159
197
  declare class DynamicFormLayoutService {
160
198
  private readonly changesSubject;
161
199
  readonly changes$: rxjs.Observable<LayoutChange>;
@@ -178,6 +216,14 @@ declare class DynamicFormLayoutService {
178
216
  private capitalizeFirstLetter;
179
217
  private assertIndex;
180
218
  private mutate;
219
+ private getFieldName;
220
+ private findFieldLayoutItemIndex;
221
+ private getLayoutInsertIndexForFieldIndex;
222
+ private applyLayoutItemsToColumn;
223
+ private insertFieldLayoutItem;
224
+ private removeFieldLayoutItem;
225
+ private hasLayoutItems;
226
+ private moveFieldLayoutItem;
181
227
  moveSection(config: FormConfig, fromIndex: number, toIndex: number): LayoutResult;
182
228
  insertSection(config: FormConfig, section: any, atIndex?: number): LayoutResult;
183
229
  removeSection(config: FormConfig, index: number, _policy?: RemovePolicy): LayoutResult;
@@ -235,6 +281,44 @@ declare class DynamicFormLayoutService {
235
281
  rowId: string;
236
282
  columnId: string;
237
283
  }, field: any, atIndex?: number): LayoutResult;
284
+ insertLocalFieldById(config: FormConfig, target: {
285
+ sectionId: string;
286
+ rowId: string;
287
+ columnId: string;
288
+ }, field: FieldMetadata, options?: InsertLocalFieldOptions): InsertLocalFieldResult;
289
+ insertLayoutItemById(config: FormConfig, target: {
290
+ sectionId: string;
291
+ rowId: string;
292
+ columnId: string;
293
+ }, item: FormLayoutItem, atIndex?: number): LayoutResult;
294
+ private prepareLocalFieldMetadata;
295
+ private validateLocalFieldInsertion;
296
+ moveLayoutItemById(config: FormConfig, from: {
297
+ sectionId: string;
298
+ rowId: string;
299
+ columnId: string;
300
+ itemId: string;
301
+ }, to: {
302
+ sectionId: string;
303
+ rowId: string;
304
+ columnId: string;
305
+ toIndex: number;
306
+ }, options?: {
307
+ policy?: RemovePolicy;
308
+ correlationId?: string;
309
+ origin?: string;
310
+ }): LayoutResult;
311
+ updateLayoutItemById(config: FormConfig, target: {
312
+ sectionId: string;
313
+ rowId: string;
314
+ columnId: string;
315
+ itemId: string;
316
+ }, item: FormLayoutItem): LayoutResult;
317
+ removeLayoutItemById(config: FormConfig, sectionId: string, rowId: string, columnId: string, itemId: string, options?: {
318
+ policy?: RemovePolicy;
319
+ correlationId?: string;
320
+ origin?: string;
321
+ }): LayoutResult;
238
322
  removeFieldById(config: FormConfig, sectionId: string, rowId: string, columnId: string, fieldName: string, options?: {
239
323
  policy?: RemovePolicy;
240
324
  correlationId?: string;
@@ -349,6 +433,7 @@ declare class PraxisFormActionsComponent implements OnChanges, OnDestroy {
349
433
  getInvalidSubmitHint(): string;
350
434
  private applyOverrides;
351
435
  private registerActionShortcuts;
436
+ private resolveButtonActionId;
352
437
  private isSecondaryButton;
353
438
  static ɵfac: i0.ɵɵFactoryDeclaration<PraxisFormActionsComponent, never>;
354
439
  static ɵcmp: i0.ɵɵComponentDeclaration<PraxisFormActionsComponent, "praxis-form-actions", never, { "actions": { "alias": "actions"; "required": false; }; "editorialVisualContext": { "alias": "editorialVisualContext"; "required": false; }; "isSubmitting": { "alias": "isSubmitting"; "required": false; }; "formIsValid": { "alias": "formIsValid"; "required": false; }; "submitError": { "alias": "submitError"; "required": false; }; "invalidRequiredFieldLabels": { "alias": "invalidRequiredFieldLabels"; "required": false; }; "formId": { "alias": "formId"; "required": false; }; "actionOverrides": { "alias": "actionOverrides"; "required": false; }; }, { "action": "action"; }, never, never, true, never>;
@@ -374,13 +459,25 @@ declare class FormAiAdapter extends BaseAiAdapter<FormConfig> {
374
459
  getCapabilities(): AiCapability[];
375
460
  getTaskPresets(): Record<string, string[]>;
376
461
  getRuntimeState(): Record<string, any>;
462
+ getAuthoringContext(): Record<string, any>;
463
+ compileAiResponse(response: Record<string, unknown>): AiResponseCompileResult | null;
377
464
  createSnapshot(): FormConfig;
378
465
  restoreSnapshot(snapshot: FormConfig): Promise<void>;
379
466
  applyPatch(patch: Partial<FormConfig>, intent?: string): Promise<PatchResult>;
380
467
  getContextDescription(): string;
381
468
  private applyConfig;
382
469
  private smartMergeFormConfig;
470
+ private extractIncomingRules;
471
+ private extractVisualBlockGuidanceOperationRule;
472
+ private coerceSingleOperationResponse;
473
+ private operationInputRecord;
474
+ private normalizeVisualBlockGuidanceOperationInput;
475
+ private visualBlockGuidanceParamsToRule;
476
+ private normalizeLlmRule;
477
+ private mergeRulesById;
383
478
  private cloneConfig;
479
+ private asRecord;
480
+ private toNonEmptyString;
384
481
  private isFilled;
385
482
  }
386
483
 
@@ -481,6 +578,13 @@ interface DynamicFormApplyPlan {
481
578
  diagnostics: EditorDiagnostic[];
482
579
  }
483
580
 
581
+ interface PraxisDynamicFormDomainRulesOptions {
582
+ enabled?: boolean;
583
+ targetArtifactKey?: string | null;
584
+ targetLayer?: string | null;
585
+ targetArtifactType?: string | null;
586
+ status?: string | null;
587
+ }
484
588
  interface DynamicFieldRenderErrorEvent {
485
589
  phase: 'executeRendering' | 'detectChanges';
486
590
  fieldName: string;
@@ -506,6 +610,21 @@ type ResolvedSectionHeaderVisual = {
506
610
  text?: string;
507
611
  ariaLabel: string;
508
612
  };
613
+ interface FormColumnFieldsRenderItem {
614
+ kind: 'fields';
615
+ id: string;
616
+ fields: FieldMetadata[];
617
+ }
618
+ interface FormColumnRichContentRenderItem {
619
+ kind: 'richContent';
620
+ id: string;
621
+ document: RichContentDocument;
622
+ layout: 'block' | 'inline';
623
+ rootClassName?: string | null;
624
+ className?: string | null;
625
+ style?: Record<string, any> | null;
626
+ }
627
+ type FormColumnRenderItem = FormColumnFieldsRenderItem | FormColumnRichContentRenderItem;
509
628
  declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
510
629
  private crud;
511
630
  private http;
@@ -537,12 +656,15 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
537
656
  private hookPresets?;
538
657
  private logger?;
539
658
  private readonly i18n;
659
+ private readonly injector;
660
+ private readonly globalActions;
540
661
  private readonly DEBUG;
541
662
  private effectiveActionsCache?;
542
663
  private effectiveActionsCacheBase?;
543
664
  private effectiveActionsCacheOverride?;
544
665
  private invalidRequiredFieldLabelsCache;
545
666
  private invalidRequiredFieldLabelsSignature;
667
+ readonly richContentHostCapabilities: RichBlockHostCapabilities;
546
668
  resourcePath?: string;
547
669
  resourceId?: string | number;
548
670
  initialValue?: Record<string, unknown> | null;
@@ -617,6 +739,8 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
617
739
  disabledModeGlobal: boolean | null;
618
740
  presentationModeGlobal: boolean | null;
619
741
  visibleGlobal: boolean | null;
742
+ /** Opt-in loader for shared domain rule materializations persisted outside FormConfig. */
743
+ domainRules: PraxisDynamicFormDomainRulesOptions | boolean | null;
620
744
  get effectivePresentation(): boolean;
621
745
  get effectiveReadonly(): boolean;
622
746
  get effectiveDisabledMode(): boolean | null;
@@ -649,6 +773,8 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
649
773
  }>;
650
774
  /** Forwarded from DynamicFieldLoader to allow host-side observability. */
651
775
  fieldRenderError: EventEmitter<DynamicFieldRenderErrorEvent>;
776
+ /** Emits runtime rule diagnostics so hosts can surface or log invalid rules. */
777
+ ruleDiagnosticsChange: EventEmitter<RuleApplicationDiagnostic[]>;
652
778
  isLoading: boolean;
653
779
  submitting: boolean;
654
780
  submitError: string | null;
@@ -667,6 +793,11 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
667
793
  actionRuleProps: Record<string, Record<string, any>>;
668
794
  private rowRuleProps;
669
795
  private columnRuleProps;
796
+ private visualBlockRuleProps;
797
+ private materializedFormRules;
798
+ private materializedFormRulesLoadSignature;
799
+ ruleApplicationDiagnostics: RuleApplicationDiagnostic[];
800
+ private ruleApplicationDiagnosticsSignature;
670
801
  private pendingEntityId;
671
802
  private loadedEntityId;
672
803
  private hydratedEntityId;
@@ -677,6 +808,7 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
677
808
  private schemaRootHooks?;
678
809
  private destroy$;
679
810
  private formValueChangesSubscription;
811
+ private dependencyPolicySubscription;
680
812
  private formBuildCycleId;
681
813
  private suppressedValueChangeBuildId;
682
814
  private pendingBootstrapValueChangeBuildId;
@@ -804,10 +936,21 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
804
936
  private loadEntity;
805
937
  private buildFormFromConfig;
806
938
  private resetFormValueChangesSubscription;
939
+ private resetDependencyPolicySubscription;
940
+ private setupEntityLookupDependencyPolicies;
941
+ private applyEntityLookupDependencyPolicy;
942
+ private isEntityLookupField;
943
+ private resolveFieldDependencyNames;
944
+ private allowEntityLookupLegacyRetention;
945
+ private hasMeaningfulDependencyValue;
946
+ private setEntityLookupDependencyConflict;
947
+ private clearEntityLookupDependencyConflict;
948
+ private resolveEntityLookupDependencyValidationMessage;
807
949
  private scheduleValueChangeBootstrapRelease;
808
950
  private hasInteractiveFormState;
809
951
  private captureFormRuntimeState;
810
952
  private getDirtyFieldNames;
953
+ private collectDirtyFieldNames;
811
954
  private buildCurrentFormRuntimeContext;
812
955
  private buildRestoreTargetContext;
813
956
  private isCompatibleRuntimeStateContext;
@@ -818,6 +961,12 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
818
961
  * Some core builds do not enforce required start/end for dateRange fields.
819
962
  */
820
963
  private applyDateRangeRequiredValidators;
964
+ /**
965
+ * Backward-compatible required validation for multiple entity lookups.
966
+ * Some form-control builders treat `required` correctly for single lookups but
967
+ * do not mark empty collections as required when `multiple=true`.
968
+ */
969
+ private applyEntityLookupCollectionRequiredValidators;
821
970
  private isMountAnimationDisabled;
822
971
  private triggerMountAnimation;
823
972
  protected getMountDurationVar(): string | null;
@@ -828,7 +977,12 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
828
977
  private saveConnection;
829
978
  disconnect(): void;
830
979
  onToolbarRequestClose(): void;
980
+ private getActiveFormRules;
981
+ private refreshMaterializedFormRules;
982
+ private resolveDomainRulesOptions;
831
983
  private evaluateAndApplyRules;
984
+ private buildRuleApplicationTargetIndex;
985
+ private setRuleApplicationDiagnostics;
832
986
  isSectionCollapsed(section?: FormSection): boolean;
833
987
  isSectionCollapsible(section?: FormSection): boolean;
834
988
  private getSectionRuleProps;
@@ -888,11 +1042,19 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
888
1042
  toggleSectionCollapse(event: Event, section: FormSection): void;
889
1043
  sectionPanelId(section: FormSection, index: number): string;
890
1044
  getSectionCollapsedSummary(section: FormSection): string;
1045
+ getColumnItems(column: FormColumn): FormLayoutItem[];
1046
+ getColumnRenderItems(column: FormColumn): FormColumnRenderItem[];
891
1047
  getColumnFields(column: {
892
- fields: string[];
1048
+ fields?: string[];
1049
+ items?: FormLayoutItem[];
893
1050
  id?: string;
894
1051
  }): FieldMetadata[];
1052
+ getRichContentLayoutItemDocument(item: FormLayoutItem): RichContentDocument | null;
1053
+ getRichContentLayoutItemLayout(item: FormLayoutItem): 'block' | 'inline';
1054
+ private getVisualBlockRuleProps;
1055
+ private isRichContentLayoutItemVisible;
895
1056
  private getColumnFieldsSignature;
1057
+ private getColumnItemsSignature;
896
1058
  private getColumnRuleProps;
897
1059
  private buildFieldRuleMetadataOverrides;
898
1060
  private normalizeRuleFieldOptions;
@@ -910,7 +1072,12 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
910
1072
  private _getConfirmationMessageForAliases;
911
1073
  private _showConfirmationDialog;
912
1074
  onFormAction(event: PraxisFormActionEvent): void;
1075
+ private dispatchRichContentAction;
1076
+ private isRichContentActionAvailable;
1077
+ private hasRichContentCapability;
1078
+ private buildRichContentActionContext;
913
1079
  private _executeAction;
1080
+ private getFormActionEventId;
914
1081
  onSubmit(): Promise<void>;
915
1082
  private navigateAfterSave;
916
1083
  private shouldConfirmCancelOnDirty;
@@ -978,6 +1145,7 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
978
1145
  private getControlTypeName;
979
1146
  private applyNullDeletionPatch;
980
1147
  private stripNullMarkersFromPatch;
1148
+ private mergeMetadataObjectPatch;
981
1149
  private deleteMetadataPath;
982
1150
  private getMetadataPath;
983
1151
  /**
@@ -1069,7 +1237,7 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
1069
1237
  private applyPresentationVars;
1070
1238
  private applyPresentationConfig;
1071
1239
  static ɵfac: i0.ɵɵFactoryDeclaration<PraxisDynamicForm, [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }]>;
1072
- static ɵcmp: i0.ɵɵComponentDeclaration<PraxisDynamicForm, "praxis-dynamic-form", never, { "resourcePath": { "alias": "resourcePath"; "required": false; }; "resourceId": { "alias": "resourceId"; "required": false; }; "initialValue": { "alias": "initialValue"; "required": false; }; "editorialContext": { "alias": "editorialContext"; "required": false; }; "mode": { "alias": "mode"; "required": false; }; "config": { "alias": "config"; "required": false; }; "actions": { "alias": "actions"; "required": false; }; "schemaSource": { "alias": "schemaSource"; "required": false; }; "schemaUrl": { "alias": "schemaUrl"; "required": false; }; "submitUrl": { "alias": "submitUrl"; "required": false; }; "submitMethod": { "alias": "submitMethod"; "required": false; }; "responseSchemaUrl": { "alias": "responseSchemaUrl"; "required": false; }; "apiEndpointKey": { "alias": "apiEndpointKey"; "required": false; }; "apiUrlEntry": { "alias": "apiUrlEntry"; "required": false; }; "enableCustomization": { "alias": "enableCustomization"; "required": false; }; "formId": { "alias": "formId"; "required": false; }; "componentInstanceId": { "alias": "componentInstanceId"; "required": false; }; "layout": { "alias": "layout"; "required": false; }; "backConfig": { "alias": "backConfig"; "required": false; }; "hooks": { "alias": "hooks"; "required": false; }; "removeEmptyContainersOnSave": { "alias": "removeEmptyContainersOnSave"; "required": false; }; "reactiveValidation": { "alias": "reactiveValidation"; "required": false; }; "reactiveValidationDebounceMs": { "alias": "reactiveValidationDebounceMs"; "required": false; }; "notifyIfOutdated": { "alias": "notifyIfOutdated"; "required": false; }; "snoozeMs": { "alias": "snoozeMs"; "required": false; }; "autoOpenSettingsOnOutdated": { "alias": "autoOpenSettingsOnOutdated"; "required": false; }; "readonlyModeGlobal": { "alias": "readonlyModeGlobal"; "required": false; }; "disabledModeGlobal": { "alias": "disabledModeGlobal"; "required": false; }; "presentationModeGlobal": { "alias": "presentationModeGlobal"; "required": false; }; "visibleGlobal": { "alias": "visibleGlobal"; "required": false; }; "customEndpoints": { "alias": "customEndpoints"; "required": false; }; }, { "formSubmit": "formSubmit"; "formCancel": "formCancel"; "formReset": "formReset"; "configChange": "configChange"; "formReady": "formReady"; "valueChange": "valueChange"; "syncCompleted": "syncCompleted"; "initializationError": "initializationError"; "loadingStateChange": "loadingStateChange"; "enableCustomizationChange": "enableCustomizationChange"; "customAction": "customAction"; "actionConfirmation": "actionConfirmation"; "schemaStatusChange": "schemaStatusChange"; "fieldRenderError": "fieldRenderError"; }, never, never, true, never>;
1240
+ static ɵcmp: i0.ɵɵComponentDeclaration<PraxisDynamicForm, "praxis-dynamic-form", never, { "resourcePath": { "alias": "resourcePath"; "required": false; }; "resourceId": { "alias": "resourceId"; "required": false; }; "initialValue": { "alias": "initialValue"; "required": false; }; "editorialContext": { "alias": "editorialContext"; "required": false; }; "mode": { "alias": "mode"; "required": false; }; "config": { "alias": "config"; "required": false; }; "actions": { "alias": "actions"; "required": false; }; "schemaSource": { "alias": "schemaSource"; "required": false; }; "schemaUrl": { "alias": "schemaUrl"; "required": false; }; "submitUrl": { "alias": "submitUrl"; "required": false; }; "submitMethod": { "alias": "submitMethod"; "required": false; }; "responseSchemaUrl": { "alias": "responseSchemaUrl"; "required": false; }; "apiEndpointKey": { "alias": "apiEndpointKey"; "required": false; }; "apiUrlEntry": { "alias": "apiUrlEntry"; "required": false; }; "enableCustomization": { "alias": "enableCustomization"; "required": false; }; "formId": { "alias": "formId"; "required": false; }; "componentInstanceId": { "alias": "componentInstanceId"; "required": false; }; "layout": { "alias": "layout"; "required": false; }; "backConfig": { "alias": "backConfig"; "required": false; }; "hooks": { "alias": "hooks"; "required": false; }; "removeEmptyContainersOnSave": { "alias": "removeEmptyContainersOnSave"; "required": false; }; "reactiveValidation": { "alias": "reactiveValidation"; "required": false; }; "reactiveValidationDebounceMs": { "alias": "reactiveValidationDebounceMs"; "required": false; }; "notifyIfOutdated": { "alias": "notifyIfOutdated"; "required": false; }; "snoozeMs": { "alias": "snoozeMs"; "required": false; }; "autoOpenSettingsOnOutdated": { "alias": "autoOpenSettingsOnOutdated"; "required": false; }; "readonlyModeGlobal": { "alias": "readonlyModeGlobal"; "required": false; }; "disabledModeGlobal": { "alias": "disabledModeGlobal"; "required": false; }; "presentationModeGlobal": { "alias": "presentationModeGlobal"; "required": false; }; "visibleGlobal": { "alias": "visibleGlobal"; "required": false; }; "domainRules": { "alias": "domainRules"; "required": false; }; "customEndpoints": { "alias": "customEndpoints"; "required": false; }; }, { "formSubmit": "formSubmit"; "formCancel": "formCancel"; "formReset": "formReset"; "configChange": "configChange"; "formReady": "formReady"; "valueChange": "valueChange"; "syncCompleted": "syncCompleted"; "initializationError": "initializationError"; "loadingStateChange": "loadingStateChange"; "enableCustomizationChange": "enableCustomizationChange"; "customAction": "customAction"; "actionConfirmation": "actionConfirmation"; "schemaStatusChange": "schemaStatusChange"; "fieldRenderError": "fieldRenderError"; "ruleDiagnosticsChange": "ruleDiagnosticsChange"; }, never, never, true, never>;
1073
1241
  }
1074
1242
 
1075
1243
  declare class FormConfigService {
@@ -1147,6 +1315,38 @@ declare class JsonConfigEditorComponent implements OnInit, OnDestroy {
1147
1315
  static ɵcmp: i0.ɵɵComponentDeclaration<JsonConfigEditorComponent, "form-json-config-editor", never, { "config": { "alias": "config"; "required": false; }; "document": { "alias": "document"; "required": false; }; }, { "configChange": "configChange"; "documentChange": "documentChange"; "validationChange": "validationChange"; "editorEvent": "editorEvent"; }, never, never, true, never>;
1148
1316
  }
1149
1317
 
1318
+ interface VisualBlockRuleNodeOption {
1319
+ id: string;
1320
+ label: string;
1321
+ kind: string;
1322
+ roles: Array<'text' | 'title' | 'message'>;
1323
+ }
1324
+
1325
+ type RuleAuthoringStatus = 'valid' | 'invalid-target' | 'invalid-condition' | 'unsupported-property' | 'sanitized-property' | 'runtime-only' | 'visual-builder-compatible' | 'llm-generated-pending-review';
1326
+ interface FormRulePropertyIssue {
1327
+ property: string;
1328
+ reason: 'unsupported-property' | 'invalid-value' | 'sanitized-value';
1329
+ }
1330
+ interface FormRuleTargetDiagnostic {
1331
+ type: NonNullable<FormLayoutRule['targetType']>;
1332
+ id: string;
1333
+ exists: boolean;
1334
+ }
1335
+ interface FormRuleDiagnostics {
1336
+ ruleId: string;
1337
+ ruleName?: string;
1338
+ status: RuleAuthoringStatus[];
1339
+ targetRefs: FormRuleTargetDiagnostic[];
1340
+ conditionRefs: string[];
1341
+ acceptedProperties: string[];
1342
+ rejectedProperties: string[];
1343
+ acceptedPropertiesWhenFalse: string[];
1344
+ rejectedPropertiesWhenFalse: string[];
1345
+ propertyIssues?: FormRulePropertyIssue[];
1346
+ propertyIssuesWhenFalse?: FormRulePropertyIssue[];
1347
+ runtimeOnlyReason?: string;
1348
+ }
1349
+
1150
1350
  declare class PraxisDynamicFormConfigEditor implements SettingsValueProvider, OnInit, OnDestroy {
1151
1351
  private storage;
1152
1352
  private configService;
@@ -1157,6 +1357,15 @@ declare class PraxisDynamicFormConfigEditor implements SettingsValueProvider, On
1157
1357
  ruleBuilderConfig: RuleBuilderConfig;
1158
1358
  ruleBuilderState?: RuleBuilderState;
1159
1359
  currentRules: FormLayoutRule[];
1360
+ ruleDiagnostics: FormRuleDiagnostics[];
1361
+ visualBlockNodeOptions: Record<string, VisualBlockRuleNodeOption[]>;
1362
+ ruleDiagnosticsSummary: {
1363
+ total: number;
1364
+ invalid: number;
1365
+ runtimeOnly: number;
1366
+ unsupported: number;
1367
+ pendingReview: number;
1368
+ };
1160
1369
  private initialConfig;
1161
1370
  private initialDocument;
1162
1371
  private readonly openedWithCanonicalDocument;
@@ -1200,13 +1409,16 @@ declare class PraxisDynamicFormConfigEditor implements SettingsValueProvider, On
1200
1409
  };
1201
1410
  private destroy$;
1202
1411
  private hasProcessedInitialRuleState;
1412
+ private jsonEditorIsValid;
1413
+ private globalActionValidationIssues;
1414
+ private readonly globalActionCatalog;
1203
1415
  isDirty$: BehaviorSubject<boolean>;
1204
1416
  isValid$: BehaviorSubject<boolean>;
1205
1417
  isBusy$: BehaviorSubject<boolean>;
1206
1418
  private lastRulesSignature;
1207
1419
  private readonly DEBUG;
1208
1420
  private debugLog;
1209
- constructor(storage: AsyncConfigStorage, configService: FormConfigService, settingsPanel: SettingsPanelService, cdr: ChangeDetectorRef, injectedData?: any);
1421
+ constructor(storage: AsyncConfigStorage, configService: FormConfigService, settingsPanel: SettingsPanelService, cdr: ChangeDetectorRef, globalActionCatalogSource?: ReadonlyArray<GlobalActionCatalogEntry[]>, injectedData?: any);
1210
1422
  ngOnInit(): void;
1211
1423
  reset(): void;
1212
1424
  updateDirtyState(reason?: string): void;
@@ -1216,7 +1428,24 @@ declare class PraxisDynamicFormConfigEditor implements SettingsValueProvider, On
1216
1428
  onJsonValidationChange(result: JsonValidationResult): void;
1217
1429
  onJsonEditorEvent(_event: JsonEditorEvent): void;
1218
1430
  onConfigChange(newConfig: FormConfig): void;
1431
+ private updateValidityState;
1432
+ private collectGlobalActionValidationIssues;
1433
+ private collectGlobalActionValidationTargets;
1434
+ private findGlobalActionCatalogEntry;
1435
+ private buildGlobalActionCatalog;
1219
1436
  onRulesChanged(state: RuleBuilderState): void;
1437
+ onRulePropertiesChanged(rules: FormLayoutRule[]): void;
1438
+ private computeRuleDiagnosticsSummary;
1439
+ getRuleStatusLabel(diagnostic: FormRuleDiagnostics): string;
1440
+ getRuleStatusTone(diagnostic: FormRuleDiagnostics): 'ok' | 'warn' | 'error';
1441
+ canAcceptPendingLlmRule(diagnostic: FormRuleDiagnostics): boolean;
1442
+ canApplyRulePropertyFix(diagnostic: FormRuleDiagnostics): boolean;
1443
+ applyRulePropertyFix(ruleId: string): void;
1444
+ acceptPendingLlmRule(ruleId: string): void;
1445
+ getRuleDiagnosticDetails(diagnostic: FormRuleDiagnostics): string[];
1446
+ private getRulePropertyIssueNames;
1447
+ private markLlmRuleAccepted;
1448
+ private refreshRuleDiagnostics;
1220
1449
  get jsonDocument(): DynamicFormAuthoringDocument;
1221
1450
  onBackConfigChange(): void;
1222
1451
  isBindingsBlockPersisted(): boolean;
@@ -1229,7 +1458,15 @@ declare class PraxisDynamicFormConfigEditor implements SettingsValueProvider, On
1229
1458
  onPresentationPrefsChange(reason: string): void;
1230
1459
  onSchemaPrefsChange(reason: string): void;
1231
1460
  private createRuleBuilderConfig;
1461
+ private getVisualBuilderRulePropertySchema;
1232
1462
  private mapMetadataToSchema;
1463
+ private getVisualBlockTargetLabel;
1464
+ private getRuleFieldLabel;
1465
+ private getRuleFieldDescription;
1466
+ private refreshVisualBlockNodeOptions;
1467
+ private collectVisualBlockNodeOptions;
1468
+ private getVisualBlockNodeRoles;
1469
+ private findRichContentNodeText;
1233
1470
  private mapDataTypeToFieldType;
1234
1471
  ngOnDestroy(): void;
1235
1472
  onLayoutSelect(event: any): void;
@@ -1248,7 +1485,7 @@ declare class PraxisDynamicFormConfigEditor implements SettingsValueProvider, On
1248
1485
  private toPresentationSnapshot;
1249
1486
  private toSchemaPrefsSnapshot;
1250
1487
  private toBackConfigSnapshot;
1251
- static ɵfac: i0.ɵɵFactoryDeclaration<PraxisDynamicFormConfigEditor, [null, null, null, null, { optional: true; }]>;
1488
+ static ɵfac: i0.ɵɵFactoryDeclaration<PraxisDynamicFormConfigEditor, [null, null, null, null, { optional: true; }, { optional: true; }]>;
1252
1489
  static ɵcmp: i0.ɵɵComponentDeclaration<PraxisDynamicFormConfigEditor, "praxis-dynamic-form-config-editor", never, {}, {}, never, never, true, never>;
1253
1490
  }
1254
1491
  interface FormConfigLike {
@@ -1323,11 +1560,53 @@ declare class LayoutPrefsService {
1323
1560
  static ɵprov: i0.ɵɵInjectableDeclaration<LayoutPrefsService>;
1324
1561
  }
1325
1562
 
1563
+ type VisualBlockPresetId = 'text' | 'notice' | 'divider' | 'infoCard' | 'callout' | 'keyValueList' | 'recordSummary' | 'lookupCard' | 'disclosure' | 'emptyState';
1564
+ interface VisualBlockPreset {
1565
+ id: VisualBlockPresetId;
1566
+ labelKey: string;
1567
+ icon: string;
1568
+ }
1569
+
1326
1570
  interface FieldDropEvent {
1327
1571
  event: CdkDragDrop<any>;
1328
1572
  sectionIndex: number;
1329
1573
  rowIndex: number;
1330
1574
  }
1575
+ interface VisualBlockEvent {
1576
+ sectionIndex: number;
1577
+ rowIndex: number;
1578
+ columnIndex: number;
1579
+ itemId: string;
1580
+ }
1581
+ interface AddVisualBlockEvent {
1582
+ sectionIndex: number;
1583
+ rowIndex: number;
1584
+ columnIndex: number;
1585
+ presetId: VisualBlockPresetId;
1586
+ }
1587
+ interface AddApiFieldEvent {
1588
+ sectionIndex: number;
1589
+ rowIndex: number;
1590
+ columnIndex: number;
1591
+ fieldName: string;
1592
+ }
1593
+ interface AddLocalFieldEvent {
1594
+ sectionIndex: number;
1595
+ rowIndex: number;
1596
+ columnIndex: number;
1597
+ }
1598
+ interface EditFieldEvent {
1599
+ sectionIndex: number;
1600
+ rowIndex: number;
1601
+ columnIndex: number;
1602
+ fieldName: string;
1603
+ }
1604
+ interface MoveVisualBlockEvent extends VisualBlockEvent {
1605
+ direction: -1 | 1;
1606
+ }
1607
+ interface MoveVisualBlockToColumnEvent extends VisualBlockEvent {
1608
+ targetColumnIndex: number;
1609
+ }
1331
1610
  /**
1332
1611
  * Editor component for configuring sections, rows and fields of a dynamic form.
1333
1612
  * Provides a collapsible palette of available fields.
@@ -1337,13 +1616,19 @@ declare class LayoutEditorComponent implements OnInit {
1337
1616
  configChange: EventEmitter<FormConfig>;
1338
1617
  paletteCollapsed: boolean;
1339
1618
  protected readonly prefs: LayoutPrefsService;
1619
+ private readonly layoutService;
1620
+ private readonly settingsPanel;
1621
+ private readonly i18n;
1622
+ private visualBlockIdSequence;
1623
+ private localFieldSequence;
1340
1624
  protected readonly colorTokens: typeof LayoutColorToken;
1341
1625
  selected: {
1342
- type: 'section' | 'row' | 'column' | 'field';
1626
+ type: 'section' | 'row' | 'column' | 'field' | 'visualBlock';
1343
1627
  sectionIndex?: number;
1344
1628
  rowIndex?: number;
1345
1629
  columnIndex?: number;
1346
1630
  fieldName?: string;
1631
+ itemId?: string;
1347
1632
  } | null;
1348
1633
  gapGlobal: number;
1349
1634
  setGapGlobal(val: number | string): void;
@@ -1368,6 +1653,7 @@ declare class LayoutEditorComponent implements OnInit {
1368
1653
  * Fields that are not yet placed in any section/column of the layout.
1369
1654
  */
1370
1655
  get availableFields(): FieldMetadata[];
1656
+ t(key: string, params?: Record<string, string | number | boolean | null | undefined>): string;
1371
1657
  get columnDropListIds(): string[];
1372
1658
  getColumnId(sectionIndex: number, rowIndex: number, columnIndex: number): string;
1373
1659
  private parseColumnId;
@@ -1378,10 +1664,30 @@ declare class LayoutEditorComponent implements OnInit {
1378
1664
  selectRow(sectionIndex: number, rowIndex: number): void;
1379
1665
  selectColumn(sectionIndex: number, rowIndex: number, columnIndex: number): void;
1380
1666
  dropField({ event }: FieldDropEvent): void;
1667
+ private getColumnLayoutItemByIndex;
1668
+ private getColumnTargetByIndex;
1669
+ private getLayoutItemTargetByIndex;
1381
1670
  dropSection(event: CdkDragDrop<FormSection[]>): void;
1382
1671
  addSection(): void;
1383
1672
  removeSection(index: number): void;
1384
1673
  onSectionUpdated(index: number, updatedSection: FormSection): void;
1674
+ addVisualBlockToColumn(event: AddVisualBlockEvent): void;
1675
+ private createVisualBlockItemId;
1676
+ addApiFieldToColumn(event: AddApiFieldEvent): void;
1677
+ addLocalFieldToColumn(event: AddLocalFieldEvent): void;
1678
+ openFieldMetadataEditor(event: EditFieldEvent): void;
1679
+ private openFieldMetadataEditorInternal;
1680
+ private applyFieldMetadataPatch;
1681
+ private createLocalFieldName;
1682
+ openVisualBlockEditor(event: {
1683
+ sectionIndex: number;
1684
+ rowIndex: number;
1685
+ columnIndex: number;
1686
+ itemId: string;
1687
+ }): void;
1688
+ moveVisualBlock(event: MoveVisualBlockEvent): void;
1689
+ moveVisualBlockToColumn(event: MoveVisualBlockToColumnEvent): void;
1690
+ removeVisualBlock(event: VisualBlockEvent): void;
1385
1691
  private emitNewConfig;
1386
1692
  onApplyStyleToAll(patch: Partial<FormSection>): void;
1387
1693
  trackBySection(index: number, s: FormSection & {
@@ -1394,15 +1700,17 @@ declare class LayoutEditorComponent implements OnInit {
1394
1700
  declare class RowConfiguratorComponent implements OnChanges {
1395
1701
  row: FormRow;
1396
1702
  fieldMetadata: FieldMetadata[];
1703
+ availableFields: FieldMetadata[];
1397
1704
  sectionIndex: number;
1398
1705
  rowIndex: number;
1399
1706
  isLastRow: boolean;
1400
1707
  selected: {
1401
- type: 'section' | 'row' | 'column' | 'field';
1708
+ type: 'section' | 'row' | 'column' | 'field' | 'visualBlock';
1402
1709
  sectionIndex?: number;
1403
1710
  rowIndex?: number;
1404
1711
  columnIndex?: number;
1405
1712
  fieldName?: string;
1713
+ itemId?: string;
1406
1714
  } | null;
1407
1715
  availableFieldsListId: string | null;
1408
1716
  connectedDropListIds: string[];
@@ -1412,8 +1720,51 @@ declare class RowConfiguratorComponent implements OnChanges {
1412
1720
  remove: EventEmitter<void>;
1413
1721
  applyRowGapAll: EventEmitter<number>;
1414
1722
  fieldDrop: EventEmitter<CdkDragDrop<any, any, any>>;
1723
+ addVisualBlock: EventEmitter<{
1724
+ rowIndex: number;
1725
+ columnIndex: number;
1726
+ presetId: VisualBlockPresetId;
1727
+ }>;
1728
+ addApiField: EventEmitter<{
1729
+ rowIndex: number;
1730
+ columnIndex: number;
1731
+ fieldName: string;
1732
+ }>;
1733
+ addLocalField: EventEmitter<{
1734
+ rowIndex: number;
1735
+ columnIndex: number;
1736
+ }>;
1737
+ editField: EventEmitter<{
1738
+ rowIndex: number;
1739
+ columnIndex: number;
1740
+ fieldName: string;
1741
+ }>;
1742
+ editVisualBlock: EventEmitter<{
1743
+ rowIndex: number;
1744
+ columnIndex: number;
1745
+ itemId: string;
1746
+ }>;
1747
+ moveVisualBlock: EventEmitter<{
1748
+ rowIndex: number;
1749
+ columnIndex: number;
1750
+ itemId: string;
1751
+ direction: -1 | 1;
1752
+ }>;
1753
+ moveVisualBlockToColumn: EventEmitter<{
1754
+ rowIndex: number;
1755
+ columnIndex: number;
1756
+ targetColumnIndex: number;
1757
+ itemId: string;
1758
+ }>;
1759
+ removeVisualBlock: EventEmitter<{
1760
+ rowIndex: number;
1761
+ columnIndex: number;
1762
+ itemId: string;
1763
+ }>;
1415
1764
  select: EventEmitter<any>;
1416
1765
  activeDropIndex: number | null;
1766
+ protected readonly visualBlockPresets: readonly VisualBlockPreset[];
1767
+ private readonly i18n;
1417
1768
  private hoverTimer;
1418
1769
  protected readonly breakpoints: Breakpoint[];
1419
1770
  previewBreakpoint: Breakpoint;
@@ -1426,11 +1777,26 @@ declare class RowConfiguratorComponent implements OnChanges {
1426
1777
  ngOnChanges(changes: SimpleChanges): void;
1427
1778
  private rebuildConnectedColumnsCache;
1428
1779
  getFieldByName(fieldName: string): FieldMetadata;
1429
- drop(event: CdkDragDrop<string[]>): void;
1780
+ getColumnLayoutItems(column: FormColumn): FormLayoutItem[];
1781
+ trackLayoutItem(_: number, item: FormLayoutItem): string;
1782
+ hasColumnContent(column: FormColumn): boolean;
1783
+ getVisualBlockLabel(item: FormLayoutItem): string;
1784
+ private findRichContentLabel;
1785
+ private findRichNodeLabel;
1786
+ t(key: string, params?: Record<string, string | number | boolean | null | undefined>): string;
1787
+ getFieldLabel(field: FieldMetadata): string;
1788
+ selectVisualBlock(columnIndex: number, item: FormLayoutItem, event: Event): void;
1789
+ openVisualBlockEditor(columnIndex: number, item: FormLayoutItem, event: Event): void;
1790
+ moveVisualBlockItem(columnIndex: number, item: FormLayoutItem, direction: -1 | 1, event: Event): void;
1791
+ canMoveVisualBlockToColumn(columnIndex: number, direction: -1 | 1): boolean;
1792
+ moveVisualBlockToAdjacentColumn(columnIndex: number, item: FormLayoutItem, direction: -1 | 1, event: Event): void;
1793
+ removeVisualBlockItem(columnIndex: number, item: FormLayoutItem, event: Event): void;
1794
+ drop(event: CdkDragDrop<FormLayoutItem[], FormLayoutItem[] | FieldMetadata[], FormLayoutItem | FieldMetadata>): void;
1430
1795
  selectRow(): void;
1431
1796
  openColumnConfig(index: number): void;
1432
1797
  selectColumn(index: number, event: MouseEvent): void;
1433
- selectField(fieldName: string, event: MouseEvent): void;
1798
+ selectField(fieldName: string, columnIndex: number, event: MouseEvent): void;
1799
+ openFieldEditor(fieldName: string, columnIndex: number, event: Event): void;
1434
1800
  openRowMenu(): void;
1435
1801
  onMenuClosed(): void;
1436
1802
  onDropEnter(index: number): void;
@@ -1444,6 +1810,9 @@ declare class RowConfiguratorComponent implements OnChanges {
1444
1810
  removeRow(): void;
1445
1811
  moveColumn(index: number, direction: number): void;
1446
1812
  clearColumn(index: number): void;
1813
+ addVisualBlockToColumn(index: number, presetId: VisualBlockPresetId): void;
1814
+ addApiFieldToColumn(index: number, fieldName: string): void;
1815
+ addLocalFieldToColumn(index: number): void;
1447
1816
  addFieldToColumn(index: number): void;
1448
1817
  getColumnId(index: number): string;
1449
1818
  private generateId;
@@ -1467,7 +1836,7 @@ declare class RowConfiguratorComponent implements OnChanges {
1467
1836
  adjustOffset(columnIndex: number, delta: number): void;
1468
1837
  getSuggestedSpan(columnIndex: number): number | null;
1469
1838
  static ɵfac: i0.ɵɵFactoryDeclaration<RowConfiguratorComponent, never>;
1470
- static ɵcmp: i0.ɵɵComponentDeclaration<RowConfiguratorComponent, "praxis-row-configurator", never, { "row": { "alias": "row"; "required": false; }; "fieldMetadata": { "alias": "fieldMetadata"; "required": false; }; "sectionIndex": { "alias": "sectionIndex"; "required": false; }; "rowIndex": { "alias": "rowIndex"; "required": false; }; "isLastRow": { "alias": "isLastRow"; "required": false; }; "selected": { "alias": "selected"; "required": false; }; "availableFieldsListId": { "alias": "availableFieldsListId"; "required": false; }; "connectedDropListIds": { "alias": "connectedDropListIds"; "required": false; }; "gapGlobal": { "alias": "gapGlobal"; "required": false; }; }, { "rowChange": "rowChange"; "remove": "remove"; "applyRowGapAll": "applyRowGapAll"; "fieldDrop": "fieldDrop"; "select": "select"; }, never, never, true, never>;
1839
+ static ɵcmp: i0.ɵɵComponentDeclaration<RowConfiguratorComponent, "praxis-row-configurator", never, { "row": { "alias": "row"; "required": false; }; "fieldMetadata": { "alias": "fieldMetadata"; "required": false; }; "availableFields": { "alias": "availableFields"; "required": false; }; "sectionIndex": { "alias": "sectionIndex"; "required": false; }; "rowIndex": { "alias": "rowIndex"; "required": false; }; "isLastRow": { "alias": "isLastRow"; "required": false; }; "selected": { "alias": "selected"; "required": false; }; "availableFieldsListId": { "alias": "availableFieldsListId"; "required": false; }; "connectedDropListIds": { "alias": "connectedDropListIds"; "required": false; }; "gapGlobal": { "alias": "gapGlobal"; "required": false; }; }, { "rowChange": "rowChange"; "remove": "remove"; "applyRowGapAll": "applyRowGapAll"; "fieldDrop": "fieldDrop"; "addVisualBlock": "addVisualBlock"; "addApiField": "addApiField"; "addLocalField": "addLocalField"; "editField": "editField"; "editVisualBlock": "editVisualBlock"; "moveVisualBlock": "moveVisualBlock"; "moveVisualBlockToColumn": "moveVisualBlockToColumn"; "removeVisualBlock": "removeVisualBlock"; "select": "select"; }, never, never, true, never>;
1471
1840
  }
1472
1841
 
1473
1842
  declare class FieldConfiguratorComponent {
@@ -1490,6 +1859,30 @@ declare const PRAXIS_DYNAMIC_FORM_COMPONENT_METADATA: ComponentDocMeta;
1490
1859
  /** Provider para auto-registrar metadados do componente Dynamic Form. */
1491
1860
  declare function providePraxisDynamicFormMetadata(): Provider;
1492
1861
 
1862
+ interface DomainRuleFormRulesRequestOptions extends DomainRuleRequestOptions {
1863
+ targetLayer?: string;
1864
+ targetArtifactType?: string;
1865
+ status?: string;
1866
+ }
1867
+ type DomainRuleMaterializedFormLayoutRule = FormLayoutRule & {
1868
+ metadata?: Record<string, unknown>;
1869
+ };
1870
+ declare class DomainRuleFormRulesService {
1871
+ private readonly domainRules;
1872
+ constructor(domainRules: DomainRuleService);
1873
+ listRulesForForm(targetArtifactKey: string, options?: DomainRuleFormRulesRequestOptions): Observable<DomainRuleMaterializedFormLayoutRule[]>;
1874
+ materializationsToFormRules(materializations: DomainRuleMaterialization[] | null | undefined): DomainRuleMaterializedFormLayoutRule[];
1875
+ materializationToFormRule(materialization: DomainRuleMaterialization): DomainRuleMaterializedFormLayoutRule | null;
1876
+ private asDirectFormRule;
1877
+ private visualBlockGuidanceToRule;
1878
+ private withDomainMetadata;
1879
+ private asRecord;
1880
+ private asStringArray;
1881
+ private resolveString;
1882
+ static ɵfac: i0.ɵɵFactoryDeclaration<DomainRuleFormRulesService, never>;
1883
+ static ɵprov: i0.ɵɵInjectableDeclaration<DomainRuleFormRulesService>;
1884
+ }
1885
+
1493
1886
  declare function isRuleSatisfied(rule: FormLayoutRule, data: unknown): boolean;
1494
1887
  /**
1495
1888
  * Applies all visibility rules to the provided data and
@@ -1581,6 +1974,7 @@ type ActionCatalogOption = {
1581
1974
  id: string;
1582
1975
  label: string;
1583
1976
  description?: string;
1977
+ payloadSchema?: GlobalActionCatalogEntry['payloadSchema'];
1584
1978
  param?: {
1585
1979
  required?: boolean;
1586
1980
  label?: string;
@@ -1634,7 +2028,6 @@ declare class SectionEditorComponent implements OnInit, AfterViewInit, OnDestroy
1634
2028
  isBusy$: BehaviorSubject<boolean>;
1635
2029
  private readonly globalActionCatalogSource;
1636
2030
  private readonly i18n;
1637
- readonly legacyActionSpecs: _praxisui_core.GlobalActionSpec[];
1638
2031
  readonly globalActionCatalog: ActionCatalogOption[];
1639
2032
  readonly customActionValue = "__custom__";
1640
2033
  private destroy$;
@@ -1654,12 +2047,12 @@ declare class SectionEditorComponent implements OnInit, AfterViewInit, OnDestroy
1654
2047
  label?: string;
1655
2048
  }): string;
1656
2049
  getHeaderActionSpecById(id: string): ActionCatalogOption | undefined;
1657
- getHeaderActionSelectValue(value?: string): string;
1658
- getHeaderActionParam(value?: string): string;
1659
- getHeaderActionCustomValue(value?: string): string;
1660
- getHeaderGlobalActionSchema(value?: string): _praxisui_core.GlobalActionUiSchema | undefined;
1661
- getHeaderSurfaceOpenActionPayload(value?: string): SurfaceOpenPayload;
1662
- isHeaderActionParamMissing(value?: string): boolean;
2050
+ getHeaderActionSelectValue(value?: string, globalAction?: GlobalActionRef): string;
2051
+ getHeaderActionParam(value?: string, globalAction?: GlobalActionRef): string;
2052
+ getHeaderActionCustomValue(value?: string, globalAction?: GlobalActionRef): string;
2053
+ getHeaderGlobalActionSchema(value?: string, globalAction?: GlobalActionRef): _praxisui_core.GlobalActionUiSchema | undefined;
2054
+ getHeaderSurfaceOpenActionPayload(value?: string, globalAction?: GlobalActionRef): SurfaceOpenPayload;
2055
+ isHeaderActionParamMissing(value?: string, globalAction?: GlobalActionRef): boolean;
1663
2056
  onHeaderActionSelectChange(index: number, value: string): void;
1664
2057
  onHeaderActionParamChange(index: number, value: string): void;
1665
2058
  onHeaderActionCustomChange(index: number, value: string): void;
@@ -1693,6 +2086,7 @@ declare class SectionEditorComponent implements OnInit, AfterViewInit, OnDestroy
1693
2086
  private normalizeHeaderActions;
1694
2087
  private mapCatalogEntryToActionSpec;
1695
2088
  private getActionCatalogDescription;
2089
+ private normalizeHeaderGlobalAction;
1696
2090
  private headerActionStyleValidator;
1697
2091
  private stringifyHeaderActionStyle;
1698
2092
  private parseHeaderActionStyle;
@@ -1881,7 +2275,8 @@ declare enum FormRuleTargetType {
1881
2275
  Section = "section",
1882
2276
  Action = "action",
1883
2277
  Row = "row",
1884
- Column = "column"
2278
+ Column = "column",
2279
+ VisualBlock = "visualBlock"
1885
2280
  }
1886
2281
  declare enum FormRuleContext {
1887
2282
  Visibility = "visibility",
@@ -1973,5 +2368,49 @@ declare const FORM_COMPONENT_AI_CAPABILITIES: CapabilityCatalog;
1973
2368
  */
1974
2369
  declare function getFormAiCatalog(formConfig?: FormConfig): AiCapabilityCatalog;
1975
2370
 
1976
- export { ActionsEditorComponent, CanvasStateService, CanvasToolbarComponent, ColumnEditorComponent, DynamicFormLayoutService, FORM_AI_CAPABILITIES, FORM_COMPONENT_AI_CAPABILITIES, FieldConfiguratorComponent, FieldEditorComponent, FormConfigService, FormContextService, FormLayoutService, JsonConfigEditorComponent, LayoutColorToken, LayoutEditorComponent, LayoutPrefsService, PRAXIS_DYNAMIC_FORM_COMPONENT_METADATA, PRAXIS_FILTER_FORM_COMPONENT_METADATA, PraxisDynamicForm, PraxisDynamicFormConfigEditor, PraxisFilterForm, PraxisFormActionsComponent, RowConfiguratorComponent, RowEditorComponent, SETTINGS_PANEL_DYNAMIC_FORM_PROVIDER, SectionEditorComponent, TASK_PRESETS, applyVisibilityRules, buildDynamicFormApplyPlan, createDynamicFormAuthoringDocument, formLayoutRulesToBuilderState, getFormAiCatalog, getFormCapabilities, getFormEnum, isRuleSatisfied, normalizeDateArrays, normalizeDynamicFormAuthoringDocument, parseLegacyOrDynamicFormDocument, providePraxisDynamicFormMetadata, providePraxisFilterFormMetadata, provideSettingsPanelDynamicForm, ruleBuilderStateToFormLayoutRules, serializeDynamicFormAuthoringDocument, stripLegacyFieldMetadata, toCanonicalDynamicFormConfig, validateDynamicFormAuthoringDocument, validateDynamicFormAuthoringInput };
1977
- export type { CanvasElement, CanvasElementType, CanvasPathPart, Capability$1 as Capability, CapabilityCatalog$1 as CapabilityCatalog, CapabilityCategory$1 as CapabilityCategory, DynamicFieldRenderErrorEvent, DynamicFormApplyPlan, DynamicFormAuthoringDocument, DynamicFormBindings, DynamicFormContextSnapshot, DynamicFormMode, DynamicFormPresentationSnapshot, DynamicFormProjectionContext, DynamicFormResolvedRuntimeContract, DynamicFormRuntimeContext, DynamicFormRuntimeValueSource, DynamicFormSchemaPrefsSnapshot, DynamicFormValidationContext, EditorDiagnostic, EditorDocument, FieldPath, FieldPathContainer, FieldPathWithIndex, Capability as FormComponentCapability, CapabilityCatalog as FormComponentCapabilityCatalog, CapabilityCategory as FormComponentCapabilityCategory, ValueKind as FormComponentValueKind, FormConfigLike, IdPath, JsonEditorEvent, JsonValidationResult, LayoutChange, LayoutResult, Operation, Path, PathWithIndex, PraxisFormActionEvent, RemovePolicy, ValidationReport, ValueKind$1 as ValueKind };
2371
+ type DynamicFormRuleTargetType = NonNullable<FormLayoutRule['targetType']>;
2372
+ interface DynamicFormRuleAuthoringField {
2373
+ name: string;
2374
+ label?: string;
2375
+ type?: string;
2376
+ source?: string;
2377
+ submitPolicy?: string;
2378
+ }
2379
+ interface DynamicFormRuleAuthoringTarget {
2380
+ id: string;
2381
+ label?: string;
2382
+ }
2383
+ interface DynamicFormRuleAuthoringVisualBlockNode {
2384
+ id: string;
2385
+ label: string;
2386
+ kind: string;
2387
+ roles: Array<'text' | 'title' | 'message'>;
2388
+ }
2389
+ type DynamicFormRuleAuthoringTargets = Record<DynamicFormRuleTargetType, string[]>;
2390
+ type DynamicFormRuleAuthoringTargetDetails = Record<DynamicFormRuleTargetType, DynamicFormRuleAuthoringTarget[]>;
2391
+ type DynamicFormAllowedRuleProperties = Record<DynamicFormRuleTargetType, string[]>;
2392
+ interface DynamicFormRuleAuthoringContext {
2393
+ component: 'praxis-dynamic-form';
2394
+ capabilityCatalogVersion: string;
2395
+ fields: DynamicFormRuleAuthoringField[];
2396
+ targets: DynamicFormRuleAuthoringTargets;
2397
+ targetDetails: DynamicFormRuleAuthoringTargetDetails;
2398
+ allowedRuleProperties: DynamicFormAllowedRuleProperties;
2399
+ visualBlockNodes: Record<string, DynamicFormRuleAuthoringVisualBlockNode[]>;
2400
+ existingRules: FormLayoutRule[];
2401
+ diagnostics: FormRuleDiagnostics[];
2402
+ guardrails: string[];
2403
+ }
2404
+ declare function buildDynamicFormRuleAuthoringContext(config: Pick<FormConfig, 'fieldMetadata' | 'sections' | 'actions' | 'formRules'>): DynamicFormRuleAuthoringContext;
2405
+
2406
+ /**
2407
+ * Manifesto de authoring canônico para o componente praxis-dynamic-form.
2408
+ * Este arquivo define as operações permitidas pela IA para editar formulários.
2409
+ *
2410
+ * @version 1.5.0
2411
+ * @status COMPLIANT - Alinhado com contrato v2, gate de aceitação e semântica local/schema-backed.
2412
+ */
2413
+ declare const PRAXIS_DYNAMIC_FORM_AUTHORING_MANIFEST: ComponentAuthoringManifest;
2414
+
2415
+ export { ActionsEditorComponent, CanvasStateService, CanvasToolbarComponent, ColumnEditorComponent, DomainRuleFormRulesService, DynamicFormLayoutService, FORM_AI_CAPABILITIES, FORM_COMPONENT_AI_CAPABILITIES, FieldConfiguratorComponent, FieldEditorComponent, FormConfigService, FormContextService, FormLayoutService, FormRulesService, JsonConfigEditorComponent, LayoutColorToken, LayoutEditorComponent, LayoutPrefsService, PRAXIS_DYNAMIC_FORM_AUTHORING_MANIFEST, PRAXIS_DYNAMIC_FORM_COMPONENT_METADATA, PRAXIS_FILTER_FORM_COMPONENT_METADATA, PraxisDynamicForm, PraxisDynamicFormConfigEditor, PraxisFilterForm, PraxisFormActionsComponent, RowConfiguratorComponent, RowEditorComponent, SETTINGS_PANEL_DYNAMIC_FORM_PROVIDER, SectionEditorComponent, TASK_PRESETS, applyVisibilityRules, buildDynamicFormApplyPlan, buildDynamicFormRuleAuthoringContext, createDynamicFormAuthoringDocument, formLayoutRulesToBuilderState, getFormAiCatalog, getFormCapabilities, getFormEnum, isRuleSatisfied, normalizeDateArrays, normalizeDynamicFormAuthoringDocument, parseLegacyOrDynamicFormDocument, providePraxisDynamicFormMetadata, providePraxisFilterFormMetadata, provideSettingsPanelDynamicForm, ruleBuilderStateToFormLayoutRules, serializeDynamicFormAuthoringDocument, stripLegacyFieldMetadata, toCanonicalDynamicFormConfig, validateDynamicFormAuthoringDocument, validateDynamicFormAuthoringInput };
2416
+ export type { CanvasElement, CanvasElementType, CanvasPathPart, Capability$1 as Capability, CapabilityCatalog$1 as CapabilityCatalog, CapabilityCategory$1 as CapabilityCategory, DomainRuleFormRulesRequestOptions, DomainRuleMaterializedFormLayoutRule, DynamicFieldRenderErrorEvent, DynamicFormAllowedRuleProperties, DynamicFormApplyPlan, DynamicFormAuthoringDocument, DynamicFormBindings, DynamicFormContextSnapshot, DynamicFormMode, DynamicFormPresentationSnapshot, DynamicFormProjectionContext, DynamicFormResolvedRuntimeContract, DynamicFormRuleAuthoringContext, DynamicFormRuleAuthoringField, DynamicFormRuleAuthoringTarget, DynamicFormRuleAuthoringTargetDetails, DynamicFormRuleAuthoringTargets, DynamicFormRuleAuthoringVisualBlockNode, DynamicFormRuleTargetType, DynamicFormRuntimeContext, DynamicFormRuntimeValueSource, DynamicFormSchemaPrefsSnapshot, DynamicFormValidationContext, EditorDiagnostic, EditorDocument, FieldPath, FieldPathContainer, FieldPathWithIndex, Capability as FormComponentCapability, CapabilityCatalog as FormComponentCapabilityCatalog, CapabilityCategory as FormComponentCapabilityCategory, ValueKind as FormComponentValueKind, FormConfigLike, IdPath, InsertLocalFieldOptions, InsertLocalFieldResult, JsonEditorEvent, JsonValidationResult, LayoutChange, LayoutResult, LocalFieldInsertionDiagnostic, LocalFieldInsertionDiagnosticCode, Operation, Path, PathWithIndex, PraxisDynamicFormDomainRulesOptions, PraxisFormActionEvent, RemovePolicy, RuleApplicationContext, RuleApplicationDiagnostic, RuleApplicationDiagnosticCode, RuleApplicationResult, RuleApplicationTargetIndex, RuleApplicationTargetType, ValidationReport, ValueKind$1 as ValueKind };