@praxisui/dynamic-form 8.0.0-beta.9 → 8.0.0-beta.90

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.
@@ -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, JsonLogicExpression, GlobalActionCatalogEntry, PraxisRuntimeConditionalEffectRule, PraxisRuntimeGlobalActionEffect, GlobalActionField, FieldDefinition, ComponentDocMeta, Breakpoint, DomainRuleRequestOptions, DomainRuleService, DomainRuleMaterialization, IconPickerService, GlobalActionRef, SurfaceOpenPayload, AiCapabilityCategory, AiCapabilityCatalog, AiValueKind, 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
+ import { BaseAiAdapter, AiResponseCompileResult, PatchResult, PraxisAssistantShellLayout, PraxisAssistantTurnViewState, PraxisAssistantShellLabels, PraxisAssistantSessionSnapshot, PraxisAssistantShellQuickReply, PraxisAssistantShellMessage } from '@praxisui/ai';
14
15
  import { KeyboardShortcutService } from '@praxisui/dynamic-fields';
15
- import { BaseAiAdapter, 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' | 'invalid-value-expression' | 'computed-value-iteration-limit' | '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,15 @@ 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
+ fieldValues: Record<string, any>;
67
+ formData: Record<string, any>;
68
+ diagnostics: RuleApplicationDiagnostic[];
69
+ }
70
+ type RuleApplicationTargetType = NonNullable<FormLayoutRule['targetType']>;
71
+ type RuleApplicationTargetIndex = Partial<Record<RuleApplicationTargetType, ReadonlySet<string>>>;
72
+ interface RuleApplicationContext {
73
+ targetIndex?: RuleApplicationTargetIndex;
56
74
  }
57
75
  declare class FormRulesService {
58
76
  private readonly jsonLogic;
@@ -64,8 +82,15 @@ declare class FormRulesService {
64
82
  * @param formRules The array of rules to process.
65
83
  * @returns A RuleEvaluationResult object containing the visibility and required states for the fields.
66
84
  */
67
- applyRules(formGroup: FormGroup, formRules: FormLayoutRule[]): RuleApplicationResult;
85
+ applyRules(formGroup: FormGroup, formRules: FormLayoutRule[], context?: RuleApplicationContext): RuleApplicationResult;
86
+ private ruleTargetExists;
87
+ private normalizeRuleTargetId;
68
88
  private evaluateCondition;
89
+ private evaluateRuleValue;
90
+ private evaluateJsonLogicValue;
91
+ private resolveComputedRuleFormData;
92
+ private areRuleValuesEqual;
93
+ private addUnsupportedPropertyDiagnostics;
69
94
  private setPath;
70
95
  private deletePath;
71
96
  static ɵfac: i0.ɵɵFactoryDeclaration<FormRulesService, never>;
@@ -96,6 +121,7 @@ interface Operation {
96
121
  sectionId?: string;
97
122
  rowId?: string;
98
123
  columnId?: string;
124
+ itemId?: string;
99
125
  fieldName?: string;
100
126
  sectionIndex?: number;
101
127
  rowIndex?: number;
@@ -106,6 +132,7 @@ interface Operation {
106
132
  sectionId?: string;
107
133
  rowId?: string;
108
134
  columnId?: string;
135
+ itemId?: string;
109
136
  fieldName?: string;
110
137
  sectionIndex?: number;
111
138
  rowIndex?: number;
@@ -156,6 +183,23 @@ interface ValidationReport {
156
183
  valid: boolean;
157
184
  errors: string[];
158
185
  }
186
+ type LocalFieldInsertionDiagnosticCode = 'missing-field-name' | 'missing-control-type' | 'field-name-already-exists' | 'schema-field-name-collision' | 'invalid-local-field-source';
187
+ interface LocalFieldInsertionDiagnostic {
188
+ code: LocalFieldInsertionDiagnosticCode;
189
+ severity: 'error' | 'warning';
190
+ message: string;
191
+ fieldName?: string;
192
+ }
193
+ interface InsertLocalFieldOptions {
194
+ atIndex?: number;
195
+ schemaFieldNames?: Iterable<string>;
196
+ correlationId?: string;
197
+ origin?: string;
198
+ }
199
+ interface InsertLocalFieldResult extends LayoutResult {
200
+ applied: boolean;
201
+ diagnostics: LocalFieldInsertionDiagnostic[];
202
+ }
159
203
  declare class DynamicFormLayoutService {
160
204
  private readonly changesSubject;
161
205
  readonly changes$: rxjs.Observable<LayoutChange>;
@@ -178,6 +222,14 @@ declare class DynamicFormLayoutService {
178
222
  private capitalizeFirstLetter;
179
223
  private assertIndex;
180
224
  private mutate;
225
+ private getFieldName;
226
+ private findFieldLayoutItemIndex;
227
+ private getLayoutInsertIndexForFieldIndex;
228
+ private applyLayoutItemsToColumn;
229
+ private insertFieldLayoutItem;
230
+ private removeFieldLayoutItem;
231
+ private hasLayoutItems;
232
+ private moveFieldLayoutItem;
181
233
  moveSection(config: FormConfig, fromIndex: number, toIndex: number): LayoutResult;
182
234
  insertSection(config: FormConfig, section: any, atIndex?: number): LayoutResult;
183
235
  removeSection(config: FormConfig, index: number, _policy?: RemovePolicy): LayoutResult;
@@ -235,6 +287,44 @@ declare class DynamicFormLayoutService {
235
287
  rowId: string;
236
288
  columnId: string;
237
289
  }, field: any, atIndex?: number): LayoutResult;
290
+ insertLocalFieldById(config: FormConfig, target: {
291
+ sectionId: string;
292
+ rowId: string;
293
+ columnId: string;
294
+ }, field: FieldMetadata, options?: InsertLocalFieldOptions): InsertLocalFieldResult;
295
+ insertLayoutItemById(config: FormConfig, target: {
296
+ sectionId: string;
297
+ rowId: string;
298
+ columnId: string;
299
+ }, item: FormLayoutItem, atIndex?: number): LayoutResult;
300
+ private prepareLocalFieldMetadata;
301
+ private validateLocalFieldInsertion;
302
+ moveLayoutItemById(config: FormConfig, from: {
303
+ sectionId: string;
304
+ rowId: string;
305
+ columnId: string;
306
+ itemId: string;
307
+ }, to: {
308
+ sectionId: string;
309
+ rowId: string;
310
+ columnId: string;
311
+ toIndex: number;
312
+ }, options?: {
313
+ policy?: RemovePolicy;
314
+ correlationId?: string;
315
+ origin?: string;
316
+ }): LayoutResult;
317
+ updateLayoutItemById(config: FormConfig, target: {
318
+ sectionId: string;
319
+ rowId: string;
320
+ columnId: string;
321
+ itemId: string;
322
+ }, item: FormLayoutItem): LayoutResult;
323
+ removeLayoutItemById(config: FormConfig, sectionId: string, rowId: string, columnId: string, itemId: string, options?: {
324
+ policy?: RemovePolicy;
325
+ correlationId?: string;
326
+ origin?: string;
327
+ }): LayoutResult;
238
328
  removeFieldById(config: FormConfig, sectionId: string, rowId: string, columnId: string, fieldName: string, options?: {
239
329
  policy?: RemovePolicy;
240
330
  correlationId?: string;
@@ -349,6 +439,7 @@ declare class PraxisFormActionsComponent implements OnChanges, OnDestroy {
349
439
  getInvalidSubmitHint(): string;
350
440
  private applyOverrides;
351
441
  private registerActionShortcuts;
442
+ private resolveButtonActionId;
352
443
  private isSecondaryButton;
353
444
  static ɵfac: i0.ɵɵFactoryDeclaration<PraxisFormActionsComponent, never>;
354
445
  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>;
@@ -361,6 +452,10 @@ declare class PraxisFormActionsComponent implements OnChanges, OnDestroy {
361
452
  interface FormAiHost {
362
453
  config: FormConfig;
363
454
  form: FormGroup;
455
+ mode?: 'create' | 'edit' | 'view';
456
+ enableCustomization?: boolean;
457
+ readonlyModeGlobal?: boolean | null;
458
+ effectiveReadonly?: boolean;
364
459
  applyConfigFromAdapter(config: FormConfig): void;
365
460
  }
366
461
 
@@ -374,13 +469,36 @@ declare class FormAiAdapter extends BaseAiAdapter<FormConfig> {
374
469
  getCapabilities(): AiCapability[];
375
470
  getTaskPresets(): Record<string, string[]>;
376
471
  getRuntimeState(): Record<string, any>;
472
+ getAuthoringContext(): Record<string, any>;
473
+ compileAiResponse(response: Record<string, unknown>): AiResponseCompileResult | null;
377
474
  createSnapshot(): FormConfig;
378
475
  restoreSnapshot(snapshot: FormConfig): Promise<void>;
379
476
  applyPatch(patch: Partial<FormConfig>, intent?: string): Promise<PatchResult>;
380
477
  getContextDescription(): string;
381
478
  private applyConfig;
382
479
  private smartMergeFormConfig;
480
+ private extractIncomingRules;
481
+ private extractComponentEditOperationPatch;
482
+ private applyComponentEditOperation;
483
+ private applyLocalFieldAdd;
484
+ private applyFieldMetadataPatch;
485
+ private appendFieldToLayout;
486
+ private resolveFieldName;
487
+ private matchesText;
488
+ private normalizeSearchText;
489
+ private toBoolean;
490
+ private toSubmitPolicy;
491
+ private extractVisualBlockGuidanceOperationRule;
492
+ private coerceSingleOperationResponse;
493
+ private coerceOperationResponses;
494
+ private operationInputRecord;
495
+ private normalizeVisualBlockGuidanceOperationInput;
496
+ private visualBlockGuidanceParamsToRule;
497
+ private normalizeLlmRule;
498
+ private mergeRulesById;
383
499
  private cloneConfig;
500
+ private asRecord;
501
+ private toNonEmptyString;
384
502
  private isFilled;
385
503
  }
386
504
 
@@ -481,6 +599,18 @@ interface DynamicFormApplyPlan {
481
599
  diagnostics: EditorDiagnostic[];
482
600
  }
483
601
 
602
+ interface DynamicFormConfigPatchChangeEvent {
603
+ inputPatch: {
604
+ config: FormConfig;
605
+ };
606
+ }
607
+ interface PraxisDynamicFormDomainRulesOptions {
608
+ enabled?: boolean;
609
+ targetArtifactKey?: string | null;
610
+ targetLayer?: string | null;
611
+ targetArtifactType?: string | null;
612
+ status?: string | null;
613
+ }
484
614
  interface DynamicFieldRenderErrorEvent {
485
615
  phase: 'executeRendering' | 'detectChanges';
486
616
  fieldName: string;
@@ -506,6 +636,21 @@ type ResolvedSectionHeaderVisual = {
506
636
  text?: string;
507
637
  ariaLabel: string;
508
638
  };
639
+ interface FormColumnFieldsRenderItem {
640
+ kind: 'fields';
641
+ id: string;
642
+ fields: FieldMetadata[];
643
+ }
644
+ interface FormColumnRichContentRenderItem {
645
+ kind: 'richContent';
646
+ id: string;
647
+ document: RichContentDocument;
648
+ layout: 'block' | 'inline';
649
+ rootClassName?: string | null;
650
+ className?: string | null;
651
+ style?: Record<string, any> | null;
652
+ }
653
+ type FormColumnRenderItem = FormColumnFieldsRenderItem | FormColumnRichContentRenderItem;
509
654
  declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
510
655
  private crud;
511
656
  private http;
@@ -537,12 +682,20 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
537
682
  private hookPresets?;
538
683
  private logger?;
539
684
  private readonly i18n;
685
+ private readonly injector;
686
+ private readonly aiApi;
687
+ private readonly assistantSessions;
688
+ private readonly aiTurnOrchestrator;
689
+ private readonly jsonLogic;
690
+ private readonly aiAssistantSessionEffect;
691
+ private readonly globalActions;
540
692
  private readonly DEBUG;
541
693
  private effectiveActionsCache?;
542
694
  private effectiveActionsCacheBase?;
543
695
  private effectiveActionsCacheOverride?;
544
696
  private invalidRequiredFieldLabelsCache;
545
697
  private invalidRequiredFieldLabelsSignature;
698
+ readonly richContentHostCapabilities: RichBlockHostCapabilities;
546
699
  resourcePath?: string;
547
700
  resourceId?: string | number;
548
701
  initialValue?: Record<string, unknown> | null;
@@ -564,6 +717,8 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
564
717
  schemaSource: 'resource' | 'filter';
565
718
  /** Canonical schema URL published by the backend surface catalog. */
566
719
  schemaUrl?: string | null;
720
+ /** Canonical read URL published by backend view/read-projection surfaces. */
721
+ readUrl?: string | null;
567
722
  /** Canonical submit URL published by the backend surface catalog. */
568
723
  submitUrl?: string | null;
569
724
  /** Canonical submit method published by the backend surface catalog. */
@@ -590,11 +745,14 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
590
745
  *
591
746
  * // Formulário em modo EDIT de dados + customização DESABILITADA
592
747
  * <praxis-dynamic-form mode="edit" [enableCustomization]="false">
593
- */
748
+ */
594
749
  enableCustomization: boolean;
750
+ /** Shows Praxis AI assistant triggers for this form instance. */
751
+ showAiAssistant: boolean;
595
752
  /** Identifier for persisting layouts */
596
753
  formId?: string;
597
754
  componentInstanceId?: string;
755
+ configPersistenceStrategy: 'local-first' | 'input-first';
598
756
  /** Optional layout to use instead of generated one */
599
757
  layout?: FormLayout;
600
758
  /** Optional navigation back config (from CRUD host) */
@@ -617,6 +775,8 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
617
775
  disabledModeGlobal: boolean | null;
618
776
  presentationModeGlobal: boolean | null;
619
777
  visibleGlobal: boolean | null;
778
+ /** Opt-in loader for shared domain rule materializations persisted outside FormConfig. */
779
+ domainRules: PraxisDynamicFormDomainRulesOptions | boolean | null;
620
780
  get effectivePresentation(): boolean;
621
781
  get effectiveReadonly(): boolean;
622
782
  get effectiveDisabledMode(): boolean | null;
@@ -632,6 +792,7 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
632
792
  formCancel: EventEmitter<void>;
633
793
  formReset: EventEmitter<void>;
634
794
  configChange: EventEmitter<FormConfig>;
795
+ configPatchChange: EventEmitter<DynamicFormConfigPatchChangeEvent>;
635
796
  formReady: EventEmitter<FormReadyEvent>;
636
797
  valueChange: EventEmitter<FormValueChangeEvent>;
637
798
  syncCompleted: EventEmitter<SyncResult>;
@@ -649,6 +810,8 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
649
810
  }>;
650
811
  /** Forwarded from DynamicFieldLoader to allow host-side observability. */
651
812
  fieldRenderError: EventEmitter<DynamicFieldRenderErrorEvent>;
813
+ /** Emits runtime rule diagnostics so hosts can surface or log invalid rules. */
814
+ ruleDiagnosticsChange: EventEmitter<RuleApplicationDiagnostic[]>;
652
815
  isLoading: boolean;
653
816
  submitting: boolean;
654
817
  submitError: string | null;
@@ -659,6 +822,13 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
659
822
  private isInitialized;
660
823
  form: FormGroup;
661
824
  aiAdapter: FormAiAdapter;
825
+ aiAssistantOpen: boolean;
826
+ aiAssistantPrompt: string;
827
+ aiAssistantLayout: PraxisAssistantShellLayout;
828
+ aiAssistantViewState: PraxisAssistantTurnViewState;
829
+ readonly aiAssistantLabels: Partial<PraxisAssistantShellLabels>;
830
+ private aiAssistantController;
831
+ private aiAssistantStateSubscription;
662
832
  fieldVisibility: {
663
833
  [fieldName: string]: boolean;
664
834
  };
@@ -667,6 +837,12 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
667
837
  actionRuleProps: Record<string, Record<string, any>>;
668
838
  private rowRuleProps;
669
839
  private columnRuleProps;
840
+ private visualBlockRuleProps;
841
+ private materializedFormRules;
842
+ private materializedFormRulesLoadSignature;
843
+ private readonly formCommandRuleStates;
844
+ ruleApplicationDiagnostics: RuleApplicationDiagnostic[];
845
+ private ruleApplicationDiagnosticsSignature;
670
846
  private pendingEntityId;
671
847
  private loadedEntityId;
672
848
  private hydratedEntityId;
@@ -677,6 +853,7 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
677
853
  private schemaRootHooks?;
678
854
  private destroy$;
679
855
  private formValueChangesSubscription;
856
+ private dependencyPolicySubscription;
680
857
  private formBuildCycleId;
681
858
  private suppressedValueChangeBuildId;
682
859
  private pendingBootstrapValueChangeBuildId;
@@ -768,6 +945,8 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
768
945
  private buildSubmitRequest;
769
946
  private normalizeSubmitMethod;
770
947
  private resolveSubmitHref;
948
+ private resolveReadHref;
949
+ private resolveEntityAwareHref;
771
950
  private resolveApiHref;
772
951
  private resolveApiOrigin;
773
952
  private resolveApiEntry;
@@ -787,6 +966,7 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
787
966
  private hasSchemaBackedRuntime;
788
967
  private hasRenderableConfig;
789
968
  private initializeStandaloneConfig;
969
+ private initializeDisconnectedEmptyState;
790
970
  private reloadForModeChange;
791
971
  ngOnInit(): void;
792
972
  ngOnChanges(changes: SimpleChanges): void;
@@ -800,24 +980,45 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
800
980
  private createDefaultConfig;
801
981
  private createConfigFromHostConfig;
802
982
  private reconcileLoadedConfigWithServerSchema;
983
+ private hostConfigHasAuthoredLocalFieldsNotInLocalConfig;
803
984
  private syncWithServer;
804
985
  private loadEntity;
805
986
  private buildFormFromConfig;
806
987
  private resetFormValueChangesSubscription;
988
+ private resetDependencyPolicySubscription;
989
+ private setupEntityLookupDependencyPolicies;
990
+ private applyEntityLookupDependencyPolicy;
991
+ private isEntityLookupField;
992
+ private resolveFieldDependencyNames;
993
+ private allowEntityLookupLegacyRetention;
994
+ private hasMeaningfulDependencyValue;
995
+ private setEntityLookupDependencyConflict;
996
+ private clearEntityLookupDependencyConflict;
997
+ private resolveEntityLookupDependencyValidationMessage;
807
998
  private scheduleValueChangeBootstrapRelease;
808
999
  private hasInteractiveFormState;
809
1000
  private captureFormRuntimeState;
810
1001
  private getDirtyFieldNames;
1002
+ private collectDirtyFieldNames;
811
1003
  private buildCurrentFormRuntimeContext;
812
1004
  private buildRestoreTargetContext;
813
1005
  private isCompatibleRuntimeStateContext;
814
1006
  private restoreFormRuntimeState;
815
1007
  private getNormalizedInitialValue;
1008
+ private normalizeFormPatchValue;
1009
+ private isDateControlMetadata;
1010
+ private coerceDateControlValue;
816
1011
  /**
817
1012
  * Backward-compatible required validation for DATE_RANGE controls.
818
1013
  * Some core builds do not enforce required start/end for dateRange fields.
819
1014
  */
820
1015
  private applyDateRangeRequiredValidators;
1016
+ /**
1017
+ * Backward-compatible required validation for multiple entity lookups.
1018
+ * Some form-control builders treat `required` correctly for single lookups but
1019
+ * do not mark empty collections as required when `multiple=true`.
1020
+ */
1021
+ private applyEntityLookupCollectionRequiredValidators;
821
1022
  private isMountAnimationDisabled;
822
1023
  private triggerMountAnimation;
823
1024
  protected getMountDurationVar(): string | null;
@@ -828,7 +1029,19 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
828
1029
  private saveConnection;
829
1030
  disconnect(): void;
830
1031
  onToolbarRequestClose(): void;
1032
+ private getActiveFormRules;
1033
+ private refreshMaterializedFormRules;
1034
+ private resolveDomainRulesOptions;
831
1035
  private evaluateAndApplyRules;
1036
+ private applyRuleComputedFieldValues;
1037
+ private evaluateAndDispatchFormCommandRules;
1038
+ private evaluateFormCommandCondition;
1039
+ private executeFormCommandGlobalAction;
1040
+ private isPotentiallyDestructiveFormCommandAction;
1041
+ private resolveFormCommandPath;
1042
+ private areRuleValuesEqual;
1043
+ private buildRuleApplicationTargetIndex;
1044
+ private setRuleApplicationDiagnostics;
832
1045
  isSectionCollapsed(section?: FormSection): boolean;
833
1046
  isSectionCollapsible(section?: FormSection): boolean;
834
1047
  private getSectionRuleProps;
@@ -846,6 +1059,8 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
846
1059
  getSectionHeaderAlign(section: FormSection): 'start' | 'center' | undefined;
847
1060
  getSectionGapBottom(section: FormSection): number | null;
848
1061
  getSectionTitleGapBottom(section: FormSection): number | null;
1062
+ getEffectiveSectionTitleGapBottom(section: FormSection): number;
1063
+ isSectionHeaderTitleOnly(section: FormSection): boolean;
849
1064
  getSectionDescriptionGapBottom(section: FormSection): number | null;
850
1065
  getSectionHeaderActionColor(action: FormSectionHeaderAction): 'primary' | 'accent' | 'warn' | undefined;
851
1066
  getSectionHeaderActionTooltip(action: FormSectionHeaderAction): string;
@@ -888,11 +1103,19 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
888
1103
  toggleSectionCollapse(event: Event, section: FormSection): void;
889
1104
  sectionPanelId(section: FormSection, index: number): string;
890
1105
  getSectionCollapsedSummary(section: FormSection): string;
1106
+ getColumnItems(column: FormColumn): FormLayoutItem[];
1107
+ getColumnRenderItems(column: FormColumn): FormColumnRenderItem[];
891
1108
  getColumnFields(column: {
892
- fields: string[];
1109
+ fields?: string[];
1110
+ items?: FormLayoutItem[];
893
1111
  id?: string;
894
1112
  }): FieldMetadata[];
1113
+ getRichContentLayoutItemDocument(item: FormLayoutItem): RichContentDocument | null;
1114
+ getRichContentLayoutItemLayout(item: FormLayoutItem): 'block' | 'inline';
1115
+ private getVisualBlockRuleProps;
1116
+ private isRichContentLayoutItemVisible;
895
1117
  private getColumnFieldsSignature;
1118
+ private getColumnItemsSignature;
896
1119
  private getColumnRuleProps;
897
1120
  private buildFieldRuleMetadataOverrides;
898
1121
  private normalizeRuleFieldOptions;
@@ -910,7 +1133,12 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
910
1133
  private _getConfirmationMessageForAliases;
911
1134
  private _showConfirmationDialog;
912
1135
  onFormAction(event: PraxisFormActionEvent): void;
1136
+ private dispatchRichContentAction;
1137
+ private isRichContentActionAvailable;
1138
+ private hasRichContentCapability;
1139
+ private buildRichContentActionContext;
913
1140
  private _executeAction;
1141
+ private getFormActionEventId;
914
1142
  onSubmit(): Promise<void>;
915
1143
  private navigateAfterSave;
916
1144
  private shouldConfirmCancelOnDirty;
@@ -924,6 +1152,35 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
924
1152
  * IMPORTANTE: Independe completamente do mode do formulário
925
1153
  */
926
1154
  toggleEditMode(): void;
1155
+ openAiAssistant(): void;
1156
+ openAiAssistantFromSession(session: PraxisAssistantSessionSnapshot): void;
1157
+ closeAiAssistant(): void;
1158
+ onAiAssistantPromptChange(prompt: string): void;
1159
+ onAiAssistantSubmit(prompt: string): void;
1160
+ onAiAssistantApply(): void;
1161
+ onAiAssistantRetry(): void;
1162
+ onAiAssistantCancel(): void;
1163
+ onAiAssistantQuickReply(reply: PraxisAssistantShellQuickReply): void;
1164
+ onAiAssistantEditMessage(message: PraxisAssistantShellMessage): void;
1165
+ onAiAssistantResendMessage(message: PraxisAssistantShellMessage): void;
1166
+ onAiAssistantLayoutChange(layout: PraxisAssistantShellLayout): void;
1167
+ aiAssistantTriggerTestId(position: string): string;
1168
+ private initializeAiAssistantController;
1169
+ private buildAiAssistantContextItems;
1170
+ private buildAiAssistantContextSnapshot;
1171
+ private syncAiAssistantSession;
1172
+ private hasAiAssistantSessionState;
1173
+ private resolveAiAssistantSessionId;
1174
+ private resolveAiAssistantOwnerId;
1175
+ private resolveAiAssistantRouteKey;
1176
+ private resolveAiAssistantSummary;
1177
+ private resolveAiAssistantBadge;
1178
+ private resolveAiAssistantIcon;
1179
+ private resolveAiAssistantSelectedTarget;
1180
+ private toAiAssistantTargetKind;
1181
+ private toAiAssistantTargetId;
1182
+ private toAiAssistantTargetLabel;
1183
+ private toAiAssistantPath;
927
1184
  openConfigEditor(): Promise<void>;
928
1185
  onElementMouseEnter(event: MouseEvent, type: CanvasElementType, data: any, element?: HTMLElement): void;
929
1186
  onElementMouseLeave(event: MouseEvent): void;
@@ -969,6 +1226,7 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
969
1226
  private openRowEditor;
970
1227
  private openColumnEditor;
971
1228
  openSectionEditor(section: any, focusTarget?: 'title' | 'description'): void;
1229
+ private applySectionEditorValue;
972
1230
  private resolveControlTypeEditorial;
973
1231
  private getControlTypeIcon;
974
1232
  /**
@@ -1007,6 +1265,11 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
1007
1265
  field: FieldMetadata;
1008
1266
  element: HTMLElement;
1009
1267
  }): void;
1268
+ onFieldFocus(payload: {
1269
+ field: FieldMetadata;
1270
+ element: HTMLElement;
1271
+ }): void;
1272
+ private selectCanvasField;
1010
1273
  onDragStarted(event: {
1011
1274
  field: FieldMetadata;
1012
1275
  index: number;
@@ -1051,6 +1314,8 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
1051
1314
  private captureCurrentSchemaPrefsSnapshot;
1052
1315
  private executeDynamicFormEditorApplyPlan;
1053
1316
  private attachRuntimeMetadataToDynamicFormConfig;
1317
+ private emitConfigPatchChange;
1318
+ private cloneFormConfigForPatch;
1054
1319
  private parsePresentationCssNumber;
1055
1320
  private clearDynamicFormEditorPersistence;
1056
1321
  private clearStoredPresentationSnapshots;
@@ -1070,7 +1335,7 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
1070
1335
  private applyPresentationVars;
1071
1336
  private applyPresentationConfig;
1072
1337
  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; }]>;
1073
- 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>;
1338
+ 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; }; "readUrl": { "alias": "readUrl"; "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; }; "showAiAssistant": { "alias": "showAiAssistant"; "required": false; }; "formId": { "alias": "formId"; "required": false; }; "componentInstanceId": { "alias": "componentInstanceId"; "required": false; }; "configPersistenceStrategy": { "alias": "configPersistenceStrategy"; "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"; "configPatchChange": "configPatchChange"; "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>;
1074
1339
  }
1075
1340
 
1076
1341
  declare class FormConfigService {
@@ -1148,6 +1413,53 @@ declare class JsonConfigEditorComponent implements OnInit, OnDestroy {
1148
1413
  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>;
1149
1414
  }
1150
1415
 
1416
+ interface VisualBlockRuleNodeOption {
1417
+ id: string;
1418
+ label: string;
1419
+ kind: string;
1420
+ roles: Array<'text' | 'title' | 'message'>;
1421
+ }
1422
+
1423
+ type RuleAuthoringStatus = 'valid' | 'invalid-target' | 'invalid-condition' | 'unsupported-property' | 'sanitized-property' | 'runtime-only' | 'visual-builder-compatible' | 'llm-generated-pending-review';
1424
+ interface FormRulePropertyIssue {
1425
+ property: string;
1426
+ reason: 'unsupported-property' | 'invalid-value' | 'sanitized-value';
1427
+ }
1428
+ interface FormRuleTargetDiagnostic {
1429
+ type: NonNullable<FormLayoutRule['targetType']>;
1430
+ id: string;
1431
+ exists: boolean;
1432
+ }
1433
+ interface FormRuleDiagnostics {
1434
+ ruleId: string;
1435
+ ruleName?: string;
1436
+ status: RuleAuthoringStatus[];
1437
+ targetRefs: FormRuleTargetDiagnostic[];
1438
+ conditionRefs: string[];
1439
+ acceptedProperties: string[];
1440
+ rejectedProperties: string[];
1441
+ acceptedPropertiesWhenFalse: string[];
1442
+ rejectedPropertiesWhenFalse: string[];
1443
+ propertyIssues?: FormRulePropertyIssue[];
1444
+ propertyIssuesWhenFalse?: FormRulePropertyIssue[];
1445
+ runtimeOnlyReason?: string;
1446
+ }
1447
+
1448
+ interface CommandRulePreviewModel {
1449
+ state: 'ready' | 'invalid';
1450
+ executionMode: 'preview-only';
1451
+ actionId: string;
1452
+ condition: JsonLogicExpression | null;
1453
+ payload?: unknown;
1454
+ payloadExpr?: string;
1455
+ policy: {
1456
+ trigger: 'on-condition-enter';
1457
+ distinct: boolean;
1458
+ distinctBy?: string;
1459
+ runOnInitialEvaluation?: boolean;
1460
+ };
1461
+ diagnostics: string[];
1462
+ }
1151
1463
  declare class PraxisDynamicFormConfigEditor implements SettingsValueProvider, OnInit, OnDestroy {
1152
1464
  private storage;
1153
1465
  private configService;
@@ -1158,6 +1470,26 @@ declare class PraxisDynamicFormConfigEditor implements SettingsValueProvider, On
1158
1470
  ruleBuilderConfig: RuleBuilderConfig;
1159
1471
  ruleBuilderState?: RuleBuilderState;
1160
1472
  currentRules: FormLayoutRule[];
1473
+ selectedCommandRuleId: string;
1474
+ commandRuleCondition: JsonLogicExpression | null;
1475
+ commandRuleConditionJson: string;
1476
+ commandRuleActionId: string;
1477
+ commandRulePayloadJson: string;
1478
+ private commandRulePayloadExpr;
1479
+ commandRuleDistinct: boolean;
1480
+ commandRuleDistinctBy: string;
1481
+ commandRuleRunOnInitialEvaluation: boolean;
1482
+ commandRuleAuthoringError: string | null;
1483
+ commandRulePayloadFieldErrors: Record<string, string>;
1484
+ ruleDiagnostics: FormRuleDiagnostics[];
1485
+ visualBlockNodeOptions: Record<string, VisualBlockRuleNodeOption[]>;
1486
+ ruleDiagnosticsSummary: {
1487
+ total: number;
1488
+ invalid: number;
1489
+ runtimeOnly: number;
1490
+ unsupported: number;
1491
+ pendingReview: number;
1492
+ };
1161
1493
  private initialConfig;
1162
1494
  private initialDocument;
1163
1495
  private readonly openedWithCanonicalDocument;
@@ -1201,13 +1533,16 @@ declare class PraxisDynamicFormConfigEditor implements SettingsValueProvider, On
1201
1533
  };
1202
1534
  private destroy$;
1203
1535
  private hasProcessedInitialRuleState;
1536
+ private jsonEditorIsValid;
1537
+ private globalActionValidationIssues;
1538
+ readonly globalActionCatalog: GlobalActionCatalogEntry[];
1204
1539
  isDirty$: BehaviorSubject<boolean>;
1205
1540
  isValid$: BehaviorSubject<boolean>;
1206
1541
  isBusy$: BehaviorSubject<boolean>;
1207
1542
  private lastRulesSignature;
1208
1543
  private readonly DEBUG;
1209
1544
  private debugLog;
1210
- constructor(storage: AsyncConfigStorage, configService: FormConfigService, settingsPanel: SettingsPanelService, cdr: ChangeDetectorRef, injectedData?: any);
1545
+ constructor(storage: AsyncConfigStorage, configService: FormConfigService, settingsPanel: SettingsPanelService, cdr: ChangeDetectorRef, globalActionCatalogSource?: ReadonlyArray<GlobalActionCatalogEntry[]>, injectedData?: any);
1211
1546
  ngOnInit(): void;
1212
1547
  reset(): void;
1213
1548
  updateDirtyState(reason?: string): void;
@@ -1217,7 +1552,53 @@ declare class PraxisDynamicFormConfigEditor implements SettingsValueProvider, On
1217
1552
  onJsonValidationChange(result: JsonValidationResult): void;
1218
1553
  onJsonEditorEvent(_event: JsonEditorEvent): void;
1219
1554
  onConfigChange(newConfig: FormConfig): void;
1555
+ private updateValidityState;
1556
+ private collectGlobalActionValidationIssues;
1557
+ private collectGlobalActionValidationTargets;
1558
+ private findGlobalActionCatalogEntry;
1559
+ private buildGlobalActionCatalog;
1220
1560
  onRulesChanged(state: RuleBuilderState): void;
1561
+ onRulePropertiesChanged(rules: FormLayoutRule[]): void;
1562
+ get commandRules(): PraxisRuntimeConditionalEffectRule<PraxisRuntimeGlobalActionEffect>[];
1563
+ get selectedCommandRule(): PraxisRuntimeConditionalEffectRule<PraxisRuntimeGlobalActionEffect> | undefined;
1564
+ onCommandRuleSelectionChange(): void;
1565
+ onCommandActionChange(): void;
1566
+ onCommandConditionChanged(condition: JsonLogicExpression | null): void;
1567
+ addCommandRule(): void;
1568
+ applyCommandRule(): void;
1569
+ deleteCommandRule(): void;
1570
+ get commandRuleActionSchema(): _praxisui_core.GlobalActionUiSchema | undefined;
1571
+ shouldShowCommandActionField(field: GlobalActionField): boolean;
1572
+ isCommandActionFieldRequired(field: GlobalActionField): boolean;
1573
+ isCommandActionFieldMissing(field: GlobalActionField): boolean;
1574
+ hasCommandActionFieldError(key: string): boolean;
1575
+ getCommandActionFieldError(key: string): string;
1576
+ get commandRulePreview(): CommandRulePreviewModel;
1577
+ getCommandActionFieldValue(field: GlobalActionField): any;
1578
+ onCommandActionFieldChange(field: GlobalActionField, value: any): void;
1579
+ private initializeCommandRuleEditor;
1580
+ private loadCommandRuleEditor;
1581
+ private updateCommandRules;
1582
+ private parseCommandRuleCondition;
1583
+ private parseOptionalJson;
1584
+ private parseCommandPayloadObject;
1585
+ private collectCommandActionFieldValues;
1586
+ private setCommandActionFieldError;
1587
+ private clearCommandActionFieldError;
1588
+ private nextCommandRuleId;
1589
+ private getDefaultCommandActionId;
1590
+ private formatGlobalActionIssue;
1591
+ private computeRuleDiagnosticsSummary;
1592
+ getRuleStatusLabel(diagnostic: FormRuleDiagnostics): string;
1593
+ getRuleStatusTone(diagnostic: FormRuleDiagnostics): 'ok' | 'warn' | 'error';
1594
+ canAcceptPendingLlmRule(diagnostic: FormRuleDiagnostics): boolean;
1595
+ canApplyRulePropertyFix(diagnostic: FormRuleDiagnostics): boolean;
1596
+ applyRulePropertyFix(ruleId: string): void;
1597
+ acceptPendingLlmRule(ruleId: string): void;
1598
+ getRuleDiagnosticDetails(diagnostic: FormRuleDiagnostics): string[];
1599
+ private getRulePropertyIssueNames;
1600
+ private markLlmRuleAccepted;
1601
+ private refreshRuleDiagnostics;
1221
1602
  get jsonDocument(): DynamicFormAuthoringDocument;
1222
1603
  onBackConfigChange(): void;
1223
1604
  isBindingsBlockPersisted(): boolean;
@@ -1230,7 +1611,15 @@ declare class PraxisDynamicFormConfigEditor implements SettingsValueProvider, On
1230
1611
  onPresentationPrefsChange(reason: string): void;
1231
1612
  onSchemaPrefsChange(reason: string): void;
1232
1613
  private createRuleBuilderConfig;
1614
+ private getVisualBuilderRulePropertySchema;
1233
1615
  private mapMetadataToSchema;
1616
+ private getVisualBlockTargetLabel;
1617
+ private getRuleFieldLabel;
1618
+ private getRuleFieldDescription;
1619
+ private refreshVisualBlockNodeOptions;
1620
+ private collectVisualBlockNodeOptions;
1621
+ private getVisualBlockNodeRoles;
1622
+ private findRichContentNodeText;
1234
1623
  private mapDataTypeToFieldType;
1235
1624
  ngOnDestroy(): void;
1236
1625
  onLayoutSelect(event: any): void;
@@ -1249,7 +1638,7 @@ declare class PraxisDynamicFormConfigEditor implements SettingsValueProvider, On
1249
1638
  private toPresentationSnapshot;
1250
1639
  private toSchemaPrefsSnapshot;
1251
1640
  private toBackConfigSnapshot;
1252
- static ɵfac: i0.ɵɵFactoryDeclaration<PraxisDynamicFormConfigEditor, [null, null, null, null, { optional: true; }]>;
1641
+ static ɵfac: i0.ɵɵFactoryDeclaration<PraxisDynamicFormConfigEditor, [null, null, null, null, { optional: true; }, { optional: true; }]>;
1253
1642
  static ɵcmp: i0.ɵɵComponentDeclaration<PraxisDynamicFormConfigEditor, "praxis-dynamic-form-config-editor", never, {}, {}, never, never, true, never>;
1254
1643
  }
1255
1644
  interface FormConfigLike {
@@ -1287,6 +1676,7 @@ declare class PraxisFilterForm implements OnChanges, OnDestroy {
1287
1676
  private hasExplicitDefaultValue;
1288
1677
  onFormSubmit(): void;
1289
1678
  getColumnFields(column: FormColumn): FieldMetadata[];
1679
+ getColumnClasses(column: FormColumn): string | null;
1290
1680
  get fieldMetadata(): FieldMetadata[];
1291
1681
  get hasLayout(): boolean;
1292
1682
  trackBySection(i: number, section: FormSection): string;
@@ -1301,6 +1691,37 @@ declare const PRAXIS_FILTER_FORM_COMPONENT_METADATA: ComponentDocMeta;
1301
1691
  /** Provider to register PraxisFilterForm metadata. */
1302
1692
  declare function providePraxisFilterFormMetadata(): Provider;
1303
1693
 
1694
+ interface PraxisFilterFormWidgetEditorInputs {
1695
+ config?: FormConfig | null;
1696
+ formId?: string;
1697
+ resourcePath?: string;
1698
+ mode?: DynamicFormMode | string;
1699
+ [key: string]: unknown;
1700
+ }
1701
+ interface PraxisFilterFormWidgetEditorValue {
1702
+ inputs: PraxisFilterFormWidgetEditorInputs;
1703
+ }
1704
+ declare class PraxisFilterFormWidgetConfigEditor implements SettingsValueProvider, AfterViewInit, OnDestroy {
1705
+ inputs: PraxisFilterFormWidgetEditorInputs | null;
1706
+ widgetKey?: string;
1707
+ formEditor?: PraxisDynamicFormConfigEditor;
1708
+ readonly isDirty$: BehaviorSubject<boolean>;
1709
+ readonly isValid$: BehaviorSubject<boolean>;
1710
+ readonly isBusy$: BehaviorSubject<boolean>;
1711
+ private readonly subscription;
1712
+ ngAfterViewInit(): void;
1713
+ ngOnDestroy(): void;
1714
+ getSettingsValue(): PraxisFilterFormWidgetEditorValue;
1715
+ onSave(): PraxisFilterFormWidgetEditorValue;
1716
+ reset(): void;
1717
+ private initializeChildEditor;
1718
+ private buildValue;
1719
+ private createDocumentFromInputs;
1720
+ private normalizeMode;
1721
+ static ɵfac: i0.ɵɵFactoryDeclaration<PraxisFilterFormWidgetConfigEditor, never>;
1722
+ static ɵcmp: i0.ɵɵComponentDeclaration<PraxisFilterFormWidgetConfigEditor, "praxis-filter-form-widget-config-editor", never, { "inputs": { "alias": "inputs"; "required": false; }; "widgetKey": { "alias": "widgetKey"; "required": false; }; }, {}, never, never, true, never>;
1723
+ }
1724
+
1304
1725
  /** Tokens for theme colors used across the layout editor. */
1305
1726
  declare enum LayoutColorToken {
1306
1727
  Surface = "--md-sys-color-surface",
@@ -1324,11 +1745,53 @@ declare class LayoutPrefsService {
1324
1745
  static ɵprov: i0.ɵɵInjectableDeclaration<LayoutPrefsService>;
1325
1746
  }
1326
1747
 
1748
+ type VisualBlockPresetId = 'text' | 'notice' | 'divider' | 'infoCard' | 'callout' | 'keyValueList' | 'recordSummary' | 'lookupCard' | 'disclosure' | 'emptyState';
1749
+ interface VisualBlockPreset {
1750
+ id: VisualBlockPresetId;
1751
+ labelKey: string;
1752
+ icon: string;
1753
+ }
1754
+
1327
1755
  interface FieldDropEvent {
1328
1756
  event: CdkDragDrop<any>;
1329
1757
  sectionIndex: number;
1330
1758
  rowIndex: number;
1331
1759
  }
1760
+ interface VisualBlockEvent {
1761
+ sectionIndex: number;
1762
+ rowIndex: number;
1763
+ columnIndex: number;
1764
+ itemId: string;
1765
+ }
1766
+ interface AddVisualBlockEvent {
1767
+ sectionIndex: number;
1768
+ rowIndex: number;
1769
+ columnIndex: number;
1770
+ presetId: VisualBlockPresetId;
1771
+ }
1772
+ interface AddApiFieldEvent {
1773
+ sectionIndex: number;
1774
+ rowIndex: number;
1775
+ columnIndex: number;
1776
+ fieldName: string;
1777
+ }
1778
+ interface AddLocalFieldEvent {
1779
+ sectionIndex: number;
1780
+ rowIndex: number;
1781
+ columnIndex: number;
1782
+ }
1783
+ interface EditFieldEvent {
1784
+ sectionIndex: number;
1785
+ rowIndex: number;
1786
+ columnIndex: number;
1787
+ fieldName: string;
1788
+ }
1789
+ interface MoveVisualBlockEvent extends VisualBlockEvent {
1790
+ direction: -1 | 1;
1791
+ }
1792
+ interface MoveVisualBlockToColumnEvent extends VisualBlockEvent {
1793
+ targetColumnIndex: number;
1794
+ }
1332
1795
  /**
1333
1796
  * Editor component for configuring sections, rows and fields of a dynamic form.
1334
1797
  * Provides a collapsible palette of available fields.
@@ -1338,13 +1801,19 @@ declare class LayoutEditorComponent implements OnInit {
1338
1801
  configChange: EventEmitter<FormConfig>;
1339
1802
  paletteCollapsed: boolean;
1340
1803
  protected readonly prefs: LayoutPrefsService;
1804
+ private readonly layoutService;
1805
+ private readonly settingsPanel;
1806
+ private readonly i18n;
1807
+ private visualBlockIdSequence;
1808
+ private localFieldSequence;
1341
1809
  protected readonly colorTokens: typeof LayoutColorToken;
1342
1810
  selected: {
1343
- type: 'section' | 'row' | 'column' | 'field';
1811
+ type: 'section' | 'row' | 'column' | 'field' | 'visualBlock';
1344
1812
  sectionIndex?: number;
1345
1813
  rowIndex?: number;
1346
1814
  columnIndex?: number;
1347
1815
  fieldName?: string;
1816
+ itemId?: string;
1348
1817
  } | null;
1349
1818
  gapGlobal: number;
1350
1819
  setGapGlobal(val: number | string): void;
@@ -1369,6 +1838,7 @@ declare class LayoutEditorComponent implements OnInit {
1369
1838
  * Fields that are not yet placed in any section/column of the layout.
1370
1839
  */
1371
1840
  get availableFields(): FieldMetadata[];
1841
+ t(key: string, params?: Record<string, string | number | boolean | null | undefined>): string;
1372
1842
  get columnDropListIds(): string[];
1373
1843
  getColumnId(sectionIndex: number, rowIndex: number, columnIndex: number): string;
1374
1844
  private parseColumnId;
@@ -1379,10 +1849,30 @@ declare class LayoutEditorComponent implements OnInit {
1379
1849
  selectRow(sectionIndex: number, rowIndex: number): void;
1380
1850
  selectColumn(sectionIndex: number, rowIndex: number, columnIndex: number): void;
1381
1851
  dropField({ event }: FieldDropEvent): void;
1852
+ private getColumnLayoutItemByIndex;
1853
+ private getColumnTargetByIndex;
1854
+ private getLayoutItemTargetByIndex;
1382
1855
  dropSection(event: CdkDragDrop<FormSection[]>): void;
1383
1856
  addSection(): void;
1384
1857
  removeSection(index: number): void;
1385
1858
  onSectionUpdated(index: number, updatedSection: FormSection): void;
1859
+ addVisualBlockToColumn(event: AddVisualBlockEvent): void;
1860
+ private createVisualBlockItemId;
1861
+ addApiFieldToColumn(event: AddApiFieldEvent): void;
1862
+ addLocalFieldToColumn(event: AddLocalFieldEvent): void;
1863
+ openFieldMetadataEditor(event: EditFieldEvent): void;
1864
+ private openFieldMetadataEditorInternal;
1865
+ private applyFieldMetadataPatch;
1866
+ private createLocalFieldName;
1867
+ openVisualBlockEditor(event: {
1868
+ sectionIndex: number;
1869
+ rowIndex: number;
1870
+ columnIndex: number;
1871
+ itemId: string;
1872
+ }): void;
1873
+ moveVisualBlock(event: MoveVisualBlockEvent): void;
1874
+ moveVisualBlockToColumn(event: MoveVisualBlockToColumnEvent): void;
1875
+ removeVisualBlock(event: VisualBlockEvent): void;
1386
1876
  private emitNewConfig;
1387
1877
  onApplyStyleToAll(patch: Partial<FormSection>): void;
1388
1878
  trackBySection(index: number, s: FormSection & {
@@ -1395,15 +1885,17 @@ declare class LayoutEditorComponent implements OnInit {
1395
1885
  declare class RowConfiguratorComponent implements OnChanges {
1396
1886
  row: FormRow;
1397
1887
  fieldMetadata: FieldMetadata[];
1888
+ availableFields: FieldMetadata[];
1398
1889
  sectionIndex: number;
1399
1890
  rowIndex: number;
1400
1891
  isLastRow: boolean;
1401
1892
  selected: {
1402
- type: 'section' | 'row' | 'column' | 'field';
1893
+ type: 'section' | 'row' | 'column' | 'field' | 'visualBlock';
1403
1894
  sectionIndex?: number;
1404
1895
  rowIndex?: number;
1405
1896
  columnIndex?: number;
1406
1897
  fieldName?: string;
1898
+ itemId?: string;
1407
1899
  } | null;
1408
1900
  availableFieldsListId: string | null;
1409
1901
  connectedDropListIds: string[];
@@ -1413,8 +1905,51 @@ declare class RowConfiguratorComponent implements OnChanges {
1413
1905
  remove: EventEmitter<void>;
1414
1906
  applyRowGapAll: EventEmitter<number>;
1415
1907
  fieldDrop: EventEmitter<CdkDragDrop<any, any, any>>;
1908
+ addVisualBlock: EventEmitter<{
1909
+ rowIndex: number;
1910
+ columnIndex: number;
1911
+ presetId: VisualBlockPresetId;
1912
+ }>;
1913
+ addApiField: EventEmitter<{
1914
+ rowIndex: number;
1915
+ columnIndex: number;
1916
+ fieldName: string;
1917
+ }>;
1918
+ addLocalField: EventEmitter<{
1919
+ rowIndex: number;
1920
+ columnIndex: number;
1921
+ }>;
1922
+ editField: EventEmitter<{
1923
+ rowIndex: number;
1924
+ columnIndex: number;
1925
+ fieldName: string;
1926
+ }>;
1927
+ editVisualBlock: EventEmitter<{
1928
+ rowIndex: number;
1929
+ columnIndex: number;
1930
+ itemId: string;
1931
+ }>;
1932
+ moveVisualBlock: EventEmitter<{
1933
+ rowIndex: number;
1934
+ columnIndex: number;
1935
+ itemId: string;
1936
+ direction: -1 | 1;
1937
+ }>;
1938
+ moveVisualBlockToColumn: EventEmitter<{
1939
+ rowIndex: number;
1940
+ columnIndex: number;
1941
+ targetColumnIndex: number;
1942
+ itemId: string;
1943
+ }>;
1944
+ removeVisualBlock: EventEmitter<{
1945
+ rowIndex: number;
1946
+ columnIndex: number;
1947
+ itemId: string;
1948
+ }>;
1416
1949
  select: EventEmitter<any>;
1417
1950
  activeDropIndex: number | null;
1951
+ protected readonly visualBlockPresets: readonly VisualBlockPreset[];
1952
+ private readonly i18n;
1418
1953
  private hoverTimer;
1419
1954
  protected readonly breakpoints: Breakpoint[];
1420
1955
  previewBreakpoint: Breakpoint;
@@ -1427,11 +1962,26 @@ declare class RowConfiguratorComponent implements OnChanges {
1427
1962
  ngOnChanges(changes: SimpleChanges): void;
1428
1963
  private rebuildConnectedColumnsCache;
1429
1964
  getFieldByName(fieldName: string): FieldMetadata;
1430
- drop(event: CdkDragDrop<string[]>): void;
1965
+ getColumnLayoutItems(column: FormColumn): FormLayoutItem[];
1966
+ trackLayoutItem(_: number, item: FormLayoutItem): string;
1967
+ hasColumnContent(column: FormColumn): boolean;
1968
+ getVisualBlockLabel(item: FormLayoutItem): string;
1969
+ private findRichContentLabel;
1970
+ private findRichNodeLabel;
1971
+ t(key: string, params?: Record<string, string | number | boolean | null | undefined>): string;
1972
+ getFieldLabel(field: FieldMetadata): string;
1973
+ selectVisualBlock(columnIndex: number, item: FormLayoutItem, event: Event): void;
1974
+ openVisualBlockEditor(columnIndex: number, item: FormLayoutItem, event: Event): void;
1975
+ moveVisualBlockItem(columnIndex: number, item: FormLayoutItem, direction: -1 | 1, event: Event): void;
1976
+ canMoveVisualBlockToColumn(columnIndex: number, direction: -1 | 1): boolean;
1977
+ moveVisualBlockToAdjacentColumn(columnIndex: number, item: FormLayoutItem, direction: -1 | 1, event: Event): void;
1978
+ removeVisualBlockItem(columnIndex: number, item: FormLayoutItem, event: Event): void;
1979
+ drop(event: CdkDragDrop<FormLayoutItem[], FormLayoutItem[] | FieldMetadata[], FormLayoutItem | FieldMetadata>): void;
1431
1980
  selectRow(): void;
1432
1981
  openColumnConfig(index: number): void;
1433
1982
  selectColumn(index: number, event: MouseEvent): void;
1434
- selectField(fieldName: string, event: MouseEvent): void;
1983
+ selectField(fieldName: string, columnIndex: number, event: MouseEvent): void;
1984
+ openFieldEditor(fieldName: string, columnIndex: number, event: Event): void;
1435
1985
  openRowMenu(): void;
1436
1986
  onMenuClosed(): void;
1437
1987
  onDropEnter(index: number): void;
@@ -1445,6 +1995,9 @@ declare class RowConfiguratorComponent implements OnChanges {
1445
1995
  removeRow(): void;
1446
1996
  moveColumn(index: number, direction: number): void;
1447
1997
  clearColumn(index: number): void;
1998
+ addVisualBlockToColumn(index: number, presetId: VisualBlockPresetId): void;
1999
+ addApiFieldToColumn(index: number, fieldName: string): void;
2000
+ addLocalFieldToColumn(index: number): void;
1448
2001
  addFieldToColumn(index: number): void;
1449
2002
  getColumnId(index: number): string;
1450
2003
  private generateId;
@@ -1468,7 +2021,7 @@ declare class RowConfiguratorComponent implements OnChanges {
1468
2021
  adjustOffset(columnIndex: number, delta: number): void;
1469
2022
  getSuggestedSpan(columnIndex: number): number | null;
1470
2023
  static ɵfac: i0.ɵɵFactoryDeclaration<RowConfiguratorComponent, never>;
1471
- 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>;
2024
+ 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>;
1472
2025
  }
1473
2026
 
1474
2027
  declare class FieldConfiguratorComponent {
@@ -1486,11 +2039,69 @@ declare class FieldConfiguratorComponent {
1486
2039
  static ɵcmp: i0.ɵɵComponentDeclaration<FieldConfiguratorComponent, "praxis-field-configurator", never, { "field": { "alias": "field"; "required": false; }; }, {}, never, never, true, never>;
1487
2040
  }
1488
2041
 
2042
+ interface PraxisDynamicFormWidgetEditorInputs {
2043
+ config?: FormConfig | null;
2044
+ mode?: DynamicFormMode;
2045
+ formId?: string;
2046
+ componentInstanceId?: string;
2047
+ backConfig?: BackConfig;
2048
+ notifyIfOutdated?: 'inline' | 'snackbar' | 'both' | 'none';
2049
+ snoozeMs?: number;
2050
+ autoOpenSettingsOnOutdated?: boolean;
2051
+ [key: string]: unknown;
2052
+ }
2053
+ interface PraxisDynamicFormWidgetEditorValue {
2054
+ inputs: PraxisDynamicFormWidgetEditorInputs;
2055
+ }
2056
+ declare class PraxisDynamicFormWidgetConfigEditor implements SettingsValueProvider, AfterViewInit, OnDestroy {
2057
+ inputs: PraxisDynamicFormWidgetEditorInputs | null;
2058
+ widgetKey?: string;
2059
+ formEditor?: PraxisDynamicFormConfigEditor;
2060
+ readonly isDirty$: BehaviorSubject<boolean>;
2061
+ readonly isValid$: BehaviorSubject<boolean>;
2062
+ readonly isBusy$: BehaviorSubject<boolean>;
2063
+ private readonly subscription;
2064
+ ngAfterViewInit(): void;
2065
+ ngOnDestroy(): void;
2066
+ getSettingsValue(): PraxisDynamicFormWidgetEditorValue;
2067
+ onSave(): PraxisDynamicFormWidgetEditorValue;
2068
+ reset(): void;
2069
+ private initializeChildEditor;
2070
+ private buildValue;
2071
+ private createDocumentFromInputs;
2072
+ static ɵfac: i0.ɵɵFactoryDeclaration<PraxisDynamicFormWidgetConfigEditor, never>;
2073
+ static ɵcmp: i0.ɵɵComponentDeclaration<PraxisDynamicFormWidgetConfigEditor, "praxis-dynamic-form-widget-config-editor", never, { "inputs": { "alias": "inputs"; "required": false; }; "widgetKey": { "alias": "widgetKey"; "required": false; }; }, {}, never, never, true, never>;
2074
+ }
2075
+
1489
2076
  /** Metadata for PraxisDynamicForm component */
1490
2077
  declare const PRAXIS_DYNAMIC_FORM_COMPONENT_METADATA: ComponentDocMeta;
1491
2078
  /** Provider para auto-registrar metadados do componente Dynamic Form. */
1492
2079
  declare function providePraxisDynamicFormMetadata(): Provider;
1493
2080
 
2081
+ interface DomainRuleFormRulesRequestOptions extends DomainRuleRequestOptions {
2082
+ targetLayer?: string;
2083
+ targetArtifactType?: string;
2084
+ status?: string;
2085
+ }
2086
+ type DomainRuleMaterializedFormLayoutRule = FormLayoutRule & {
2087
+ metadata?: Record<string, unknown>;
2088
+ };
2089
+ declare class DomainRuleFormRulesService {
2090
+ private readonly domainRules;
2091
+ constructor(domainRules: DomainRuleService);
2092
+ listRulesForForm(targetArtifactKey: string, options?: DomainRuleFormRulesRequestOptions): Observable<DomainRuleMaterializedFormLayoutRule[]>;
2093
+ materializationsToFormRules(materializations: DomainRuleMaterialization[] | null | undefined): DomainRuleMaterializedFormLayoutRule[];
2094
+ materializationToFormRule(materialization: DomainRuleMaterialization): DomainRuleMaterializedFormLayoutRule | null;
2095
+ private asDirectFormRule;
2096
+ private visualBlockGuidanceToRule;
2097
+ private withDomainMetadata;
2098
+ private asRecord;
2099
+ private asStringArray;
2100
+ private resolveString;
2101
+ static ɵfac: i0.ɵɵFactoryDeclaration<DomainRuleFormRulesService, never>;
2102
+ static ɵprov: i0.ɵɵInjectableDeclaration<DomainRuleFormRulesService>;
2103
+ }
2104
+
1494
2105
  declare function isRuleSatisfied(rule: FormLayoutRule, data: unknown): boolean;
1495
2106
  /**
1496
2107
  * Applies all visibility rules to the provided data and
@@ -1582,6 +2193,7 @@ type ActionCatalogOption = {
1582
2193
  id: string;
1583
2194
  label: string;
1584
2195
  description?: string;
2196
+ payloadSchema?: GlobalActionCatalogEntry['payloadSchema'];
1585
2197
  param?: {
1586
2198
  required?: boolean;
1587
2199
  label?: string;
@@ -1635,7 +2247,6 @@ declare class SectionEditorComponent implements OnInit, AfterViewInit, OnDestroy
1635
2247
  isBusy$: BehaviorSubject<boolean>;
1636
2248
  private readonly globalActionCatalogSource;
1637
2249
  private readonly i18n;
1638
- readonly legacyActionSpecs: _praxisui_core.GlobalActionSpec[];
1639
2250
  readonly globalActionCatalog: ActionCatalogOption[];
1640
2251
  readonly customActionValue = "__custom__";
1641
2252
  private destroy$;
@@ -1655,12 +2266,12 @@ declare class SectionEditorComponent implements OnInit, AfterViewInit, OnDestroy
1655
2266
  label?: string;
1656
2267
  }): string;
1657
2268
  getHeaderActionSpecById(id: string): ActionCatalogOption | undefined;
1658
- getHeaderActionSelectValue(value?: string): string;
1659
- getHeaderActionParam(value?: string): string;
1660
- getHeaderActionCustomValue(value?: string): string;
1661
- getHeaderGlobalActionSchema(value?: string): _praxisui_core.GlobalActionUiSchema | undefined;
1662
- getHeaderSurfaceOpenActionPayload(value?: string): SurfaceOpenPayload;
1663
- isHeaderActionParamMissing(value?: string): boolean;
2269
+ getHeaderActionSelectValue(value?: string, globalAction?: GlobalActionRef): string;
2270
+ getHeaderActionParam(value?: string, globalAction?: GlobalActionRef): string;
2271
+ getHeaderActionCustomValue(value?: string, globalAction?: GlobalActionRef): string;
2272
+ getHeaderGlobalActionSchema(value?: string, globalAction?: GlobalActionRef): _praxisui_core.GlobalActionUiSchema | undefined;
2273
+ getHeaderSurfaceOpenActionPayload(value?: string, globalAction?: GlobalActionRef): SurfaceOpenPayload;
2274
+ isHeaderActionParamMissing(value?: string, globalAction?: GlobalActionRef): boolean;
1664
2275
  onHeaderActionSelectChange(index: number, value: string): void;
1665
2276
  onHeaderActionParamChange(index: number, value: string): void;
1666
2277
  onHeaderActionCustomChange(index: number, value: string): void;
@@ -1694,6 +2305,7 @@ declare class SectionEditorComponent implements OnInit, AfterViewInit, OnDestroy
1694
2305
  private normalizeHeaderActions;
1695
2306
  private mapCatalogEntryToActionSpec;
1696
2307
  private getActionCatalogDescription;
2308
+ private normalizeHeaderGlobalAction;
1697
2309
  private headerActionStyleValidator;
1698
2310
  private stringifyHeaderActionStyle;
1699
2311
  private parseHeaderActionStyle;
@@ -1882,7 +2494,8 @@ declare enum FormRuleTargetType {
1882
2494
  Section = "section",
1883
2495
  Action = "action",
1884
2496
  Row = "row",
1885
- Column = "column"
2497
+ Column = "column",
2498
+ VisualBlock = "visualBlock"
1886
2499
  }
1887
2500
  declare enum FormRuleContext {
1888
2501
  Visibility = "visibility",
@@ -1974,5 +2587,49 @@ declare const FORM_COMPONENT_AI_CAPABILITIES: CapabilityCatalog;
1974
2587
  */
1975
2588
  declare function getFormAiCatalog(formConfig?: FormConfig): AiCapabilityCatalog;
1976
2589
 
1977
- 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 };
1978
- 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 };
2590
+ type DynamicFormRuleTargetType = NonNullable<FormLayoutRule['targetType']>;
2591
+ interface DynamicFormRuleAuthoringField {
2592
+ name: string;
2593
+ label?: string;
2594
+ type?: string;
2595
+ source?: string;
2596
+ submitPolicy?: string;
2597
+ }
2598
+ interface DynamicFormRuleAuthoringTarget {
2599
+ id: string;
2600
+ label?: string;
2601
+ }
2602
+ interface DynamicFormRuleAuthoringVisualBlockNode {
2603
+ id: string;
2604
+ label: string;
2605
+ kind: string;
2606
+ roles: Array<'text' | 'title' | 'message'>;
2607
+ }
2608
+ type DynamicFormRuleAuthoringTargets = Record<DynamicFormRuleTargetType, string[]>;
2609
+ type DynamicFormRuleAuthoringTargetDetails = Record<DynamicFormRuleTargetType, DynamicFormRuleAuthoringTarget[]>;
2610
+ type DynamicFormAllowedRuleProperties = Record<DynamicFormRuleTargetType, string[]>;
2611
+ interface DynamicFormRuleAuthoringContext {
2612
+ component: 'praxis-dynamic-form';
2613
+ capabilityCatalogVersion: string;
2614
+ fields: DynamicFormRuleAuthoringField[];
2615
+ targets: DynamicFormRuleAuthoringTargets;
2616
+ targetDetails: DynamicFormRuleAuthoringTargetDetails;
2617
+ allowedRuleProperties: DynamicFormAllowedRuleProperties;
2618
+ visualBlockNodes: Record<string, DynamicFormRuleAuthoringVisualBlockNode[]>;
2619
+ existingRules: FormLayoutRule[];
2620
+ diagnostics: FormRuleDiagnostics[];
2621
+ guardrails: string[];
2622
+ }
2623
+ declare function buildDynamicFormRuleAuthoringContext(config: Pick<FormConfig, 'fieldMetadata' | 'sections' | 'actions' | 'formRules'>): DynamicFormRuleAuthoringContext;
2624
+
2625
+ /**
2626
+ * Manifesto de authoring canônico para o componente praxis-dynamic-form.
2627
+ * Este arquivo define as operações permitidas pela IA para editar formulários.
2628
+ *
2629
+ * @version 1.5.0
2630
+ * @status COMPLIANT - Alinhado com contrato v2, gate de aceitação e semântica local/schema-backed.
2631
+ */
2632
+ declare const PRAXIS_DYNAMIC_FORM_AUTHORING_MANIFEST: ComponentAuthoringManifest;
2633
+
2634
+ 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, PraxisDynamicFormWidgetConfigEditor, PraxisFilterForm, PraxisFilterFormWidgetConfigEditor, 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 };
2635
+ export type { CanvasElement, CanvasElementType, CanvasPathPart, Capability$1 as Capability, CapabilityCatalog$1 as CapabilityCatalog, CapabilityCategory$1 as CapabilityCategory, DomainRuleFormRulesRequestOptions, DomainRuleMaterializedFormLayoutRule, DynamicFieldRenderErrorEvent, DynamicFormAllowedRuleProperties, DynamicFormApplyPlan, DynamicFormAuthoringDocument, DynamicFormBindings, DynamicFormConfigPatchChangeEvent, 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, PraxisDynamicFormWidgetEditorInputs, PraxisDynamicFormWidgetEditorValue, PraxisFilterFormWidgetEditorInputs, PraxisFilterFormWidgetEditorValue, PraxisFormActionEvent, RemovePolicy, RuleApplicationContext, RuleApplicationDiagnostic, RuleApplicationDiagnosticCode, RuleApplicationResult, RuleApplicationTargetIndex, RuleApplicationTargetType, ValidationReport, ValueKind$1 as ValueKind };