@praxisui/dynamic-form 10.0.0-rc.4 → 10.0.0-rc.41

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,7 +7,8 @@ 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, FormConfigWithSections, FormLayoutItem, ReactiveDeterminationDefinition, ReactiveDeterminationExecutionEvent, FormActionButton, AiCapability, BackConfig, FormPresentationConfig, EmptyStateTone, EmptyStateVariant, EmptyStateAlignment, EmptyStateDensity, EmptyStateIconContainer, RichBlockHostCapabilities, ApiEndpoint, ApiUrlEntry, DynamicFormLayoutPolicy, FormHooksLayout, EndpointConfig, FormSubmitEvent, FormReadyEvent, FormValueChangeEvent, FormPayloadPreviewEvent, SyncResult, FormInitializationError, LoadingState, FormCustomActionEvent, FormActionConfirmationEvent, RichContentDocument, JsonLogicRecord, GenericCrudService, ConnectionStorage, DynamicFormService, ErrorMessageService, SchemaNormalizerService, ComponentMetadataRegistry, GlobalConfigService, ComponentKeyService, LoadingOrchestrator, ApiUrlConfig, PraxisLoadingRenderer, FormHooksRegistry, FormHookPreset, LoggerService, EnterpriseRuntimeContextService, FormSectionHeaderAction, FormSectionHeaderConfig, FormConfigState, JsonLogicExpression, FormHelpPresentationConfig, GlobalActionCatalogEntry, PraxisRuntimeConditionalEffectRule, PraxisRuntimeGlobalActionEffect, SurfaceOpenPayload, GlobalActionField, PraxisEffectPolicy, FieldDefinition, ComponentDocMeta, Breakpoint, DomainRuleRequestOptions, DomainRuleService, DomainRuleMaterialization, TableConfig, SurfaceOpenActionEditorComponent, IconPickerService, GlobalActionRef, AiCapabilityCategory, AiCapabilityCatalog, AiValueKind, ComponentAuthoringManifest } from '@praxisui/core';
10
+ import { AsyncConfigStorage, FormLayout, FieldMetadata, FormLayoutRule, FormRuleTargetType as FormRuleTargetType$1, PraxisJsonLogicService, FormSection, FormRow, FormColumn, FormConfig, FormConfigWithSections, FormLayoutItem, ReactiveDeterminationDefinition, ReactiveDeterminationExecutionEvent, FormActionButton, DynamicFormMode, AiCapability, DynamicFormLayoutScope, BackConfig, FormPresentationConfig, EmptyStateTone, EmptyStateVariant, EmptyStateAlignment, EmptyStateDensity, EmptyStateIconContainer, FormPresentationPreset, RichBlockHostCapabilities, ApiEndpoint, ApiUrlEntry, FormLayoutMode, FormLayoutOptions, DynamicFormLayoutPolicy, FormHooksLayout, EndpointConfig, FormSubmitEvent, FormReadyEvent, FormValueChangeEvent, FormPayloadPreviewEvent, SyncResult, FormInitializationError, LoadingState, FormCustomActionEvent, FormActionConfirmationEvent, FormLayoutTabItem, RichContentDocument, JsonLogicRecord, GenericCrudService, ConnectionStorage, DynamicFormService, ErrorMessageService, SchemaNormalizerService, ComponentMetadataRegistry, GlobalConfigService, ComponentKeyService, LoadingOrchestrator, ApiUrlConfig, PraxisLoadingRenderer, FormHooksRegistry, FormHookPreset, LoggerService, EnterpriseRuntimeContextService, FormLayoutTabsAppearance, FormSectionHeaderAction, FormSectionHeaderConfig, FormConfigState, JsonLogicExpression, FormHelpPresentationConfig, GlobalActionCatalogEntry, PraxisRuntimeConditionalEffectRule, PraxisRuntimeGlobalActionEffect, SurfaceOpenPayload, GlobalActionField, PraxisEffectPolicy, FieldDefinition, ComponentDocMeta, DiscoveredResourceOption, Breakpoint, DomainRuleRequestOptions, DomainRuleService, DomainRuleMaterialization, SchemaIdParams, CompiledDynamicFormSchema, TableConfig, SurfaceOpenActionEditorComponent, IconPickerService, GlobalActionRef, AiCapabilityCategory, AiCapabilityCatalog, AiValueKind, ComponentAuthoringManifest, GovernedPagePreviewWidgetAdapter, WidgetInstance } from '@praxisui/core';
11
+ export { CompiledDynamicFormSchema, DynamicFormLayoutScope, DynamicFormMode } from '@praxisui/core';
11
12
  import * as rxjs from 'rxjs';
12
13
  import { Observable, Subscription, BehaviorSubject } from 'rxjs';
13
14
  import { SettingsPanelService, SettingsValueProvider } from '@praxisui/settings-panel';
@@ -374,7 +375,7 @@ declare class ReactiveDeterminationRuntimeService {
374
375
  waitForStable(form: FormGroup, timeoutMs?: number): Promise<boolean>;
375
376
  observePending(form: FormGroup, observer: (pending: boolean) => void): Subscription;
376
377
  isOwnedTarget(form: FormGroup, control: AbstractControl): boolean;
377
- connect(form: FormGroup, definitions: ReactiveDeterminationDefinition[], executor: ReactiveDeterminationExecutor, onEvent?: (event: ReactiveDeterminationExecutionEvent) => void, operationTimeoutMs?: number): Subscription;
378
+ connect(form: FormGroup, definitions: ReactiveDeterminationDefinition[], executor: ReactiveDeterminationExecutor, onEvent?: (event: ReactiveDeterminationExecutionEvent) => void, operationTimeoutMs?: number, fieldMetadata?: readonly FieldMetadata[]): Subscription;
378
379
  private resolveControls;
379
380
  private waitForUpstreamDeterminations;
380
381
  private claimTargets;
@@ -508,7 +509,7 @@ declare class PraxisFormActionsComponent implements OnChanges, OnDestroy {
508
509
  interface FormAiHost {
509
510
  config: FormConfig;
510
511
  form: FormGroup;
511
- mode?: 'create' | 'edit' | 'view';
512
+ mode?: DynamicFormMode;
512
513
  enableCustomization?: boolean;
513
514
  readonlyModeGlobal?: boolean | null;
514
515
  effectiveReadonly?: boolean;
@@ -572,9 +573,11 @@ interface EditorDiagnostic {
572
573
  message: string;
573
574
  path?: string;
574
575
  }
575
- type DynamicFormMode = 'create' | 'edit' | 'view';
576
+
576
577
  interface DynamicFormBindings {
577
578
  mode?: DynamicFormMode;
579
+ /** Controls whether saved layout changes apply to all CRUD modes ('shared') or only the active mode ('mode-only'). */
580
+ layoutScope?: DynamicFormLayoutScope;
578
581
  /** Opt-in view placeholder; null explicitly disables it. */
579
582
  emptyState?: PraxisDynamicFormEmptyState | null;
580
583
  /** true: presentation in view; false: fields; null/absent: inherit layout policy. */
@@ -588,7 +591,7 @@ interface DynamicFormSchemaPrefsSnapshot {
588
591
  }
589
592
  interface DynamicFormContextSnapshot {
590
593
  backConfig?: BackConfig;
591
- presentation?: DynamicFormPresentationSnapshot;
594
+ presentation?: DynamicFormPresentationSnapshot | null;
592
595
  schemaPrefs?: DynamicFormSchemaPrefsSnapshot;
593
596
  }
594
597
  interface DynamicFormAuthoringDocument extends EditorDocument<FormConfig, DynamicFormBindings> {
@@ -647,6 +650,7 @@ interface DynamicFormApplyPlan {
647
650
  };
648
651
  diff?: {
649
652
  modeChanged?: boolean;
653
+ layoutScopeChanged?: boolean;
650
654
  presentationChanged?: boolean;
651
655
  schemaPrefsChanged?: boolean;
652
656
  backConfigChanged?: boolean;
@@ -661,6 +665,7 @@ interface DynamicFormConfigPatchChangeEvent {
661
665
  mode?: DynamicFormMode;
662
666
  presentationModeGlobal?: boolean | null;
663
667
  presentation?: DynamicFormPresentationSnapshot | null;
668
+ presentationPreset?: FormPresentationPreset;
664
669
  emptyState?: PraxisDynamicFormEmptyState | null;
665
670
  };
666
671
  }
@@ -769,6 +774,7 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
769
774
  private readonly resourceDiscovery;
770
775
  private readonly aiAssistantSessionEffect;
771
776
  private readonly globalActions;
777
+ private readonly optionRegistry;
772
778
  private readonly DEBUG;
773
779
  private effectiveActionsCache?;
774
780
  private effectiveActionsCacheBase?;
@@ -790,8 +796,11 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
790
796
  * merged context snapshot used to avoid re-binding on every change detection pass.
791
797
  */
792
798
  editorialContext: Record<string, unknown> | null;
793
- mode: 'create' | 'edit' | 'view';
794
- config: FormConfig;
799
+ mode: DynamicFormMode;
800
+ private effectiveConfig;
801
+ private configAssignment;
802
+ get config(): FormConfig;
803
+ set config(value: FormConfig);
795
804
  private hostConfigInputProvided;
796
805
  /** Optional host-level overrides for the rendered form action bar. */
797
806
  actions?: FormConfig['actions'] | null;
@@ -800,7 +809,11 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
800
809
  * 'resource' (padrão) usa o schema do recurso (/{resource}/schemas -> .../all response)
801
810
  * 'filter' usa o schema do DTO de filtro (via /schemas/filtered no POST /filter request)
802
811
  */
803
- schemaSource: 'resource' | 'filter';
812
+ schemaSource: 'resource' | 'filter' | 'action';
813
+ /** Canonical workflow/action identifier when bound to a command surface. */
814
+ actionId?: string | null;
815
+ /** Canonical backend operationId when bound to a command/surface endpoint. */
816
+ operationId?: string | null;
804
817
  /** Canonical schema URL published by the backend surface catalog. */
805
818
  schemaUrl?: string | null;
806
819
  /** Canonical read URL published by backend view/read-projection surfaces. */
@@ -848,9 +861,19 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
848
861
  /** Identifier for persisting layouts */
849
862
  formId?: string;
850
863
  componentInstanceId?: string;
851
- configPersistenceStrategy: 'local-first' | 'input-first';
864
+ configPersistenceStrategy: 'local-first' | 'input-first' | 'volatile';
852
865
  /** Optional layout to use instead of generated one */
853
866
  layout?: FormLayout;
867
+ /**
868
+ * Layout mode for organizing form sections: 'vertical' (default), 'tabs' or 'accordion'.
869
+ * Overrides config.layout.mode when specified.
870
+ */
871
+ layoutMode?: FormLayoutMode;
872
+ /**
873
+ * Layout configuration options for form sections (mode, tabs, defaultTabId, tabsAppearance, accordionMulti, etc.).
874
+ * Merged with and takes precedence over config.layout.
875
+ */
876
+ formLayout?: FormLayoutOptions;
854
877
  /** Metadata-driven layout preset used only when creating an initial config from schema. */
855
878
  generatedLayoutPreset: DynamicFormGeneratedLayoutPreset;
856
879
  /** Opt-in policy for schema-driven transient layout materialization. */
@@ -876,12 +899,50 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
876
899
  presentationModeGlobal: boolean | null;
877
900
  /** Projection of contextSnapshot.presentation; null clears authored style overrides. */
878
901
  presentation?: DynamicFormPresentationSnapshot | null;
902
+ /**
903
+ * Optional presentation preset applied when the form is rendered in presentation mode.
904
+ * Resolves styles for standard patterns: 'corporate-dossier', 'editorial-card', 'compact-presentation' or 'default'.
905
+ */
906
+ presentationPreset?: FormPresentationPreset;
907
+ /**
908
+ * Default visual appearance preset for sections when not explicitly configured at section level.
909
+ * Values: 'card' (default), 'plain' (borderless with divider support), 'step' (stepper badge layout).
910
+ */
911
+ sectionDefaultAppearance?: 'card' | 'plain' | 'step';
912
+ /**
913
+ * Global flag to control divider lines between plain/dossier sections.
914
+ * When true, renders a subtle separator line below each section (except the last).
915
+ */
916
+ sectionDivider?: boolean;
879
917
  visibleGlobal: boolean | null;
880
918
  fieldIconPolicy: 'all' | 'presentation-only' | 'none';
881
919
  /** Opt-in loader for shared domain rule materializations persisted outside FormConfig. */
882
920
  domainRules: PraxisDynamicFormDomainRulesOptions | boolean | null;
883
921
  get effectivePresentation(): boolean;
922
+ /** Normalizes presentation preset aliases and casing to canonical values. */
923
+ normalizePresentationPreset(preset?: string | null): FormPresentationPreset;
924
+ /** Resolved presentation preset for the form container. */
925
+ get effectivePresentationPreset(): FormPresentationPreset;
926
+ /** Resolved presentation preset for a specific section, allowing section-level override. */
927
+ getSectionPresentationPreset(section?: FormSection | null): FormPresentationPreset;
928
+ isCorporateDossierPreset(): boolean;
929
+ isEditorialCardPreset(): boolean;
930
+ isCompactPresentationPreset(): boolean;
931
+ isSectionCorporateDossier(section?: FormSection | null): boolean;
932
+ isSectionEditorialCard(section?: FormSection | null): boolean;
933
+ isSectionCompactPresentation(section?: FormSection | null): boolean;
884
934
  shouldShowContextEmptyState(): boolean;
935
+ private isItemScopedActionSubmitTarget;
936
+ getActionTargetRecordSummary(): {
937
+ id?: string;
938
+ title?: string;
939
+ subtitle?: string;
940
+ badges: Array<{
941
+ label: string;
942
+ value: string;
943
+ tone: 'neutral' | 'info' | 'success' | 'warning' | 'danger';
944
+ }>;
945
+ } | null;
885
946
  private hasResourceContext;
886
947
  private hasLocalRecordContext;
887
948
  get effectiveReadonly(): boolean;
@@ -932,10 +993,19 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
932
993
  reactiveDeterminationExecuted: EventEmitter<ReactiveDeterminationExecutionEvent>;
933
994
  /** Emits only aggregate runtime state; no request or response payload is exposed. */
934
995
  reactiveDeterminationPendingChange: EventEmitter<boolean>;
996
+ /** Emitted when active tab changes in 'tabs' layout mode. */
997
+ tabChange: EventEmitter<string>;
998
+ /** Emitted when a tab is selected in 'tabs' layout mode. */
999
+ tabSelected: EventEmitter<FormLayoutTabItem>;
1000
+ /** Active tab ID when effectiveLayoutMode === 'tabs'. */
1001
+ activeTabId: string | null;
935
1002
  private reactiveDeterminationPending;
936
1003
  isLoading: boolean;
937
1004
  submitting: boolean;
938
1005
  private submitPreparationInProgress;
1006
+ private submitLifecycleSequence;
1007
+ private activeSubmitLifecycle;
1008
+ private activeSubmitAutomatic;
939
1009
  submitError: string | null;
940
1010
  initializationStatus: 'idle' | 'loading' | 'success' | 'error';
941
1011
  currentErrorMessage: string;
@@ -970,6 +1040,9 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
970
1040
  private entitySelectionCleared;
971
1041
  private hydratedEntityId;
972
1042
  private loadedEntityData;
1043
+ private loadedResourceRevision;
1044
+ private resourceRevisionInvalidated;
1045
+ private entityReadAttempt;
973
1046
  protected entityHydrationPending: boolean;
974
1047
  protected entityReadFailed: boolean;
975
1048
  protected entityReadText(key: 'loading' | 'error' | 'retry' | 'region' | 'success'): string;
@@ -982,8 +1055,14 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
982
1055
  private assertSchemaInitializationCurrent;
983
1056
  private isSchemaTransportInterruption;
984
1057
  private schemaCache;
1058
+ private schemaValidationFailed;
1059
+ private initialValueContextInvalidated;
985
1060
  private lastSchemaMeta?;
986
1061
  private readonly schemaMetaPersistenceQueues;
1062
+ private persistenceContextEpoch;
1063
+ private persistenceContextDestroyed;
1064
+ /** Fence delayed work; requests already sent are not retroactively canceled. */
1065
+ private persistenceGuard;
987
1066
  private readonly formConfigPersistenceQueues;
988
1067
  private readonly formConfigPersistenceGenerations;
989
1068
  private readonly formConfigConflictBlockThrough;
@@ -1090,6 +1169,17 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
1090
1169
  private resolveSubmitOperation;
1091
1170
  private buildSubmitRequest;
1092
1171
  private resolveSubmitResourceVersion;
1172
+ /** Identity and server context are captured with the representation, never reconstructed at submit by GET. */
1173
+ private resourceRevisionBinding;
1174
+ private usesAutomaticItemRevision;
1175
+ private isResourceRevisionCurrent;
1176
+ private invalidateAutomaticSubmitUi;
1177
+ private resourceRevisionNeedsReload;
1178
+ private resourceRevisionReloadError;
1179
+ private captureSavedResourceRevision;
1180
+ private rejectResourceRevision;
1181
+ private normalizeResourceVersionToken;
1182
+ private extractResourceVersionCandidate;
1093
1183
  private normalizeSubmitMethod;
1094
1184
  private formatResourceVersion;
1095
1185
  private resolveSubmitHref;
@@ -1116,10 +1206,13 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
1116
1206
  private initializeStandaloneConfig;
1117
1207
  private initializeDisconnectedEmptyState;
1118
1208
  private reloadForModeChange;
1209
+ private resourceRevisionContextScope;
1210
+ private subscribeToRuntimeContextChanges;
1119
1211
  ngOnInit(): void;
1120
1212
  ngOnChanges(changes: SimpleChanges): void;
1121
1213
  private blurAllInputs;
1122
1214
  private initializeForm;
1215
+ private hasInitializationError;
1123
1216
  private handleInitializationError;
1124
1217
  private loadConfigFailOpen;
1125
1218
  private resolveFieldLabel;
@@ -1134,6 +1227,7 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
1134
1227
  private reconcileLoadedConfigWithServerSchema;
1135
1228
  private hostConfigHasAuthoredLocalFieldsNotInLocalConfig;
1136
1229
  private syncWithServer;
1230
+ private isActionCommandWithoutExplicitReadUrl;
1137
1231
  private loadEntity;
1138
1232
  private hydrateEntityFromInitialValue;
1139
1233
  private flushEntityHydrationState;
@@ -1171,6 +1265,7 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
1171
1265
  private emitPayloadPreview;
1172
1266
  private resetToHydratedSnapshot;
1173
1267
  private collectDirtyFieldNames;
1268
+ private collectTouchedFieldNames;
1174
1269
  private buildCurrentFormRuntimeContext;
1175
1270
  private buildRestoreTargetContext;
1176
1271
  private isCompatibleRuntimeStateContext;
@@ -1219,6 +1314,18 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
1219
1314
  private areRuleValuesEqual;
1220
1315
  private buildRuleApplicationTargetIndex;
1221
1316
  private setRuleApplicationDiagnostics;
1317
+ get effectiveLayoutMode(): FormLayoutMode;
1318
+ get effectiveTabsAppearance(): FormLayoutTabsAppearance;
1319
+ get effectiveAccordionMulti(): boolean;
1320
+ get effectiveHideSectionHeaderInTabs(): boolean;
1321
+ get effectiveTabs(): FormLayoutTabItem[];
1322
+ ensureActiveTabValid(): void;
1323
+ selectTab(tabId: string): void;
1324
+ isSectionInActiveTab(section?: FormSection): boolean;
1325
+ getTabErrorCount(tab: FormLayoutTabItem): number;
1326
+ getTabAriaControls(tab: FormLayoutTabItem): string;
1327
+ getTabIdForSection(section?: FormSection): string | null;
1328
+ shouldHideSectionHeader(section?: FormSection): boolean;
1222
1329
  isSectionCollapsed(section?: FormSection): boolean;
1223
1330
  isSectionCollapsible(section?: FormSection): boolean;
1224
1331
  private getSectionRuleProps;
@@ -1227,9 +1334,11 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
1227
1334
  private hasVisibleSectionBody;
1228
1335
  private shouldRenderInsideLastSectionContent;
1229
1336
  private resolveInsideLastSectionHost;
1337
+ get actionTargetSelectedRecordLabel(): string;
1230
1338
  getSectionTitle(section: FormSection): string | undefined;
1231
1339
  getSectionDescription(section: FormSection): string | undefined;
1232
1340
  getSectionAppearance(section: FormSection): 'card' | 'plain' | 'step' | undefined;
1341
+ isSectionDividerEnabled(section: FormSection): boolean;
1233
1342
  getSectionStepLabel(section: FormSection): string | undefined;
1234
1343
  getSectionTitleColor(section: FormSection): string | undefined;
1235
1344
  getSectionDescriptionColor(section: FormSection): string | undefined;
@@ -1513,6 +1622,11 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
1513
1622
  private captureCurrentPresentationSnapshot;
1514
1623
  private captureCurrentSchemaPrefsSnapshot;
1515
1624
  private executeDynamicFormEditorApplyPlan;
1625
+ private buildCrossModeMetadataSeed;
1626
+ private resolveSiblingModeComponentKeyIds;
1627
+ private resolveSiblingModeFormConfigKeys;
1628
+ private resolveSiblingModePresentationKeys;
1629
+ private persistSharedFormConfigAcrossModes;
1516
1630
  private attachRuntimeMetadataToDynamicFormConfig;
1517
1631
  private emitConfigPatchChange;
1518
1632
  private cloneFormConfigForPatch;
@@ -1526,7 +1640,14 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
1526
1640
  showDetailedError(): void;
1527
1641
  private tryBuildExplicitSchemaContext;
1528
1642
  private buildSchemaContext;
1643
+ private requiresConfirmedSchemaContext;
1644
+ private schemaRepresentationContext;
1529
1645
  private getSchemaWithCache;
1646
+ /**
1647
+ * Invalida o cache de schema compilado para a instância atual e força
1648
+ * novo carregamento na próxima requisição.
1649
+ */
1650
+ invalidateSchemaCache(): void;
1530
1651
  private isReactiveValidationEnabled;
1531
1652
  private getReactiveValidationDebounceMs;
1532
1653
  private waitForGlobalConfigReadyForSchema;
@@ -1535,7 +1656,7 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
1535
1656
  private applyPresentationVars;
1536
1657
  private applyPresentationConfig;
1537
1658
  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, null, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }]>;
1538
- static ɵcmp: i0.ɵɵComponentDeclaration<PraxisDynamicForm, "praxis-dynamic-form", never, { "resourcePath": { "alias": "resourcePath"; "required": false; }; "resourceId": { "alias": "resourceId"; "required": false; }; "initialValue": { "alias": "initialValue"; "required": false; }; "emptyState": { "alias": "emptyState"; "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; }; "submitIdempotencyKey": { "alias": "submitIdempotencyKey"; "required": false; }; "submitCorrelationId": { "alias": "submitCorrelationId"; "required": false; }; "submitResourceVersion": { "alias": "submitResourceVersion"; "required": false; }; "submitResourceVersionTargetResourceKey": { "alias": "submitResourceVersionTargetResourceKey"; "required": false; }; "submitResourceVersionTargetIdField": { "alias": "submitResourceVersionTargetIdField"; "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; }; "generatedLayoutPreset": { "alias": "generatedLayoutPreset"; "required": false; }; "layoutPolicy": { "alias": "layoutPolicy"; "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; }; "presentation": { "alias": "presentation"; "required": false; }; "visibleGlobal": { "alias": "visibleGlobal"; "required": false; }; "fieldIconPolicy": { "alias": "fieldIconPolicy"; "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"; "payloadPreviewChange": "payloadPreviewChange"; "syncCompleted": "syncCompleted"; "initializationError": "initializationError"; "loadingStateChange": "loadingStateChange"; "enableCustomizationChange": "enableCustomizationChange"; "customAction": "customAction"; "actionConfirmation": "actionConfirmation"; "schemaStatusChange": "schemaStatusChange"; "fieldRenderError": "fieldRenderError"; "ruleDiagnosticsChange": "ruleDiagnosticsChange"; "reactiveDeterminationExecuted": "reactiveDeterminationExecuted"; "reactiveDeterminationPendingChange": "reactiveDeterminationPendingChange"; }, never, never, true, never>;
1659
+ static ɵcmp: i0.ɵɵComponentDeclaration<PraxisDynamicForm, "praxis-dynamic-form", never, { "resourcePath": { "alias": "resourcePath"; "required": false; }; "resourceId": { "alias": "resourceId"; "required": false; }; "initialValue": { "alias": "initialValue"; "required": false; }; "emptyState": { "alias": "emptyState"; "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; }; "actionId": { "alias": "actionId"; "required": false; }; "operationId": { "alias": "operationId"; "required": false; }; "schemaUrl": { "alias": "schemaUrl"; "required": false; }; "readUrl": { "alias": "readUrl"; "required": false; }; "submitUrl": { "alias": "submitUrl"; "required": false; }; "submitMethod": { "alias": "submitMethod"; "required": false; }; "submitIdempotencyKey": { "alias": "submitIdempotencyKey"; "required": false; }; "submitCorrelationId": { "alias": "submitCorrelationId"; "required": false; }; "submitResourceVersion": { "alias": "submitResourceVersion"; "required": false; }; "submitResourceVersionTargetResourceKey": { "alias": "submitResourceVersionTargetResourceKey"; "required": false; }; "submitResourceVersionTargetIdField": { "alias": "submitResourceVersionTargetIdField"; "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; }; "layoutMode": { "alias": "layoutMode"; "required": false; }; "formLayout": { "alias": "formLayout"; "required": false; }; "generatedLayoutPreset": { "alias": "generatedLayoutPreset"; "required": false; }; "layoutPolicy": { "alias": "layoutPolicy"; "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; }; "presentation": { "alias": "presentation"; "required": false; }; "presentationPreset": { "alias": "presentationPreset"; "required": false; }; "sectionDefaultAppearance": { "alias": "sectionDefaultAppearance"; "required": false; }; "sectionDivider": { "alias": "sectionDivider"; "required": false; }; "visibleGlobal": { "alias": "visibleGlobal"; "required": false; }; "fieldIconPolicy": { "alias": "fieldIconPolicy"; "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"; "payloadPreviewChange": "payloadPreviewChange"; "syncCompleted": "syncCompleted"; "initializationError": "initializationError"; "loadingStateChange": "loadingStateChange"; "enableCustomizationChange": "enableCustomizationChange"; "customAction": "customAction"; "actionConfirmation": "actionConfirmation"; "schemaStatusChange": "schemaStatusChange"; "fieldRenderError": "fieldRenderError"; "ruleDiagnosticsChange": "ruleDiagnosticsChange"; "reactiveDeterminationExecuted": "reactiveDeterminationExecuted"; "reactiveDeterminationPendingChange": "reactiveDeterminationPendingChange"; "tabChange": "tabChange"; "tabSelected": "tabSelected"; }, never, never, true, never>;
1539
1660
  }
1540
1661
 
1541
1662
  declare class FormConfigService {
@@ -1718,8 +1839,10 @@ declare class PraxisDynamicFormConfigEditor implements SettingsValueProvider, On
1718
1839
  private includeBackConfigBlock;
1719
1840
  formId?: string;
1720
1841
  componentKeyId?: string;
1721
- inputMode: 'create' | 'edit' | 'view';
1842
+ inputMode: DynamicFormMode;
1843
+ inputLayoutScope: DynamicFormLayoutScope;
1722
1844
  private includeBindingsBlock;
1845
+ private includeLayoutScopeBinding;
1723
1846
  private readonly editorMode;
1724
1847
  get isPresentationMode(): boolean;
1725
1848
  supportsPresentationSettings: boolean;
@@ -1777,7 +1900,11 @@ declare class PraxisDynamicFormConfigEditor implements SettingsValueProvider, On
1777
1900
  };
1778
1901
  private destroy$;
1779
1902
  private hasProcessedInitialRuleState;
1903
+ ruleConversionFailed: boolean;
1904
+ private readonly jsonLogic;
1905
+ private readonly cascadeRulesService;
1780
1906
  private jsonEditorIsValid;
1907
+ private cascadeDraftIsValid;
1781
1908
  private globalActionValidationIssues;
1782
1909
  private readonly i18n;
1783
1910
  readonly globalActionCatalog: GlobalActionCatalogEntry[];
@@ -1790,7 +1917,7 @@ declare class PraxisDynamicFormConfigEditor implements SettingsValueProvider, On
1790
1917
  isValid$: BehaviorSubject<boolean>;
1791
1918
  isBusy$: BehaviorSubject<boolean>;
1792
1919
  private lastRulesSignature;
1793
- private pendingRulePropertiesStateSignature;
1920
+ private supersededRuleStateSignature;
1794
1921
  private readonly DEBUG;
1795
1922
  private debugLog;
1796
1923
  get configTabOptions(): ConfigEditorTabOption[];
@@ -1808,6 +1935,8 @@ declare class PraxisDynamicFormConfigEditor implements SettingsValueProvider, On
1808
1935
  onJsonValidationChange(result: JsonValidationResult): void;
1809
1936
  onJsonEditorEvent(_event: JsonEditorEvent): void;
1810
1937
  onConfigChange(newConfig: FormConfig): void;
1938
+ onCascadeValidChange(valid: boolean): void;
1939
+ private isCascadeGraphValid;
1811
1940
  private updateValidityState;
1812
1941
  private collectGlobalActionValidationIssues;
1813
1942
  private collectGlobalActionValidationTargets;
@@ -1860,6 +1989,7 @@ declare class PraxisDynamicFormConfigEditor implements SettingsValueProvider, On
1860
1989
  getRuleDiagnosticDetails(diagnostic: FormRuleDiagnostics): string[];
1861
1990
  private getRulePropertyIssueNames;
1862
1991
  private markLlmRuleAccepted;
1992
+ private projectBuilderRules;
1863
1993
  private refreshRuleDiagnostics;
1864
1994
  get jsonDocument(): DynamicFormAuthoringDocument;
1865
1995
  onBackConfigChange(): void;
@@ -1870,6 +2000,7 @@ declare class PraxisDynamicFormConfigEditor implements SettingsValueProvider, On
1870
2000
  hasResolvedRuntimeContract(): boolean;
1871
2001
  describeRuntimeSource(source?: DynamicFormRuntimeValueSource): string;
1872
2002
  onInputModeChange(): void;
2003
+ onLayoutScopeChange(scope: DynamicFormLayoutScope): void;
1873
2004
  onPresentationPrefsChange(reason: string): void;
1874
2005
  onSchemaPrefsChange(reason: string): void;
1875
2006
  private createRuleBuilderConfig;
@@ -1890,10 +2021,12 @@ declare class PraxisDynamicFormConfigEditor implements SettingsValueProvider, On
1890
2021
  onCascadeApply(patch: Record<string, Partial<FieldDefinition>>): void;
1891
2022
  private syncCascadeManagerFields;
1892
2023
  private stripLegacy;
2024
+ private hydrateRuleDraft;
1893
2025
  private computeRulesSignature;
1894
2026
  restoreHintsDefaults(): void;
1895
2027
  private loadPrefsFromStorage;
1896
2028
  private normalizeMode;
2029
+ private normalizeLayoutScope;
1897
2030
  private buildAuthoringDocument;
1898
2031
  private normalizeResolvedRuntimeContract;
1899
2032
  private createBackConfigState;
@@ -1918,6 +2051,14 @@ declare class PraxisFilterForm implements OnChanges, OnDestroy {
1918
2051
  config: FormConfig;
1919
2052
  formId?: string;
1920
2053
  resourcePath?: string;
2054
+ /**
2055
+ * Optional logical endpoint key for multi-gateway filter schema resolution.
2056
+ */
2057
+ endpointKey?: ApiEndpoint;
2058
+ /**
2059
+ * Optional explicit API URL entry override for filter schema resolution.
2060
+ */
2061
+ apiUrlEntry?: ApiUrlEntry | null;
1921
2062
  mode?: string;
1922
2063
  formReady: EventEmitter<{
1923
2064
  formGroup: FormGroup<Record<string, any>>;
@@ -1935,15 +2076,25 @@ declare class PraxisFilterForm implements OnChanges, OnDestroy {
1935
2076
  form: FormGroup<Record<string, any>>;
1936
2077
  private valueChangesSub?;
1937
2078
  private statusChangesSub?;
2079
+ private schemaSub?;
2080
+ private hydratedFieldMetadata;
2081
+ private schemaHydrationPending;
2082
+ private schemaHydrationFailed;
1938
2083
  private columnFieldsCache;
1939
2084
  private singleFieldCache;
2085
+ private readonly crudService;
2086
+ private readonly resourceDiscovery;
2087
+ private readonly cdr;
1940
2088
  constructor(dynamicForm: DynamicFormService);
1941
2089
  ngOnChanges(changes: SimpleChanges): void;
1942
2090
  ngOnDestroy(): void;
2091
+ private loadFilterSchemaFieldsIfNeeded;
1943
2092
  private buildForm;
1944
2093
  private buildRestorableValues;
1945
2094
  private hasExplicitDefaultValue;
1946
2095
  onFormSubmit(): void;
2096
+ private isFilterReady;
2097
+ private projectFilterValues;
1947
2098
  getColumnFields(column: FormColumn): FieldMetadata[];
1948
2099
  getSingleField(field: FieldMetadata): FieldMetadata[];
1949
2100
  getColumnClasses(column: FormColumn): string | null;
@@ -1953,7 +2104,7 @@ declare class PraxisFilterForm implements OnChanges, OnDestroy {
1953
2104
  trackByRow(i: number, _row: FormRow): string;
1954
2105
  trackByColumn(i: number, col: FormColumn): string;
1955
2106
  static ɵfac: i0.ɵɵFactoryDeclaration<PraxisFilterForm, never>;
1956
- static ɵcmp: i0.ɵɵComponentDeclaration<PraxisFilterForm, "praxis-filter-form", never, { "config": { "alias": "config"; "required": true; }; "formId": { "alias": "formId"; "required": false; }; "resourcePath": { "alias": "resourcePath"; "required": false; }; "mode": { "alias": "mode"; "required": false; }; }, { "formReady": "formReady"; "valueChange": "valueChange"; "submit": "submit"; "requestSearch": "requestSearch"; "validityChange": "validityChange"; }, never, never, true, never>;
2107
+ static ɵcmp: i0.ɵɵComponentDeclaration<PraxisFilterForm, "praxis-filter-form", never, { "config": { "alias": "config"; "required": true; }; "formId": { "alias": "formId"; "required": false; }; "resourcePath": { "alias": "resourcePath"; "required": false; }; "endpointKey": { "alias": "endpointKey"; "required": false; }; "apiUrlEntry": { "alias": "apiUrlEntry"; "required": false; }; "mode": { "alias": "mode"; "required": false; }; }, { "formReady": "formReady"; "valueChange": "valueChange"; "submit": "submit"; "requestSearch": "requestSearch"; "validityChange": "validityChange"; }, never, never, true, never>;
1957
2108
  }
1958
2109
 
1959
2110
  /** Metadata for PraxisFilterForm component */
@@ -1965,6 +2116,9 @@ interface PraxisFilterFormWidgetEditorInputs {
1965
2116
  config?: FormConfig | null;
1966
2117
  formId?: string;
1967
2118
  resourcePath?: string;
2119
+ apiEndpointKey?: ApiEndpoint | string | null;
2120
+ endpointKey?: ApiEndpoint;
2121
+ apiUrlEntry?: ApiUrlEntry | null;
1968
2122
  mode?: DynamicFormMode | string;
1969
2123
  [key: string]: unknown;
1970
2124
  }
@@ -1978,13 +2132,37 @@ declare class PraxisFilterFormWidgetConfigEditor implements SettingsValueProvide
1978
2132
  readonly isDirty$: BehaviorSubject<boolean>;
1979
2133
  readonly isValid$: BehaviorSubject<boolean>;
1980
2134
  readonly isBusy$: BehaviorSubject<boolean>;
2135
+ schemaWarning: string;
1981
2136
  private readonly subscription;
2137
+ private schemaSubscription?;
2138
+ private childBusy;
2139
+ private schemaLoading;
2140
+ private resourcePathDraft?;
2141
+ private selectedCatalogResource;
2142
+ private committedBaselineDocument?;
2143
+ private readonly crudService;
2144
+ private readonly resourceDiscovery;
2145
+ private readonly cdr;
2146
+ get effectiveResourcePath(): string;
2147
+ get effectiveEndpointKey(): ApiEndpoint | undefined;
2148
+ get effectiveApiUrlEntry(): ApiUrlEntry | null | undefined;
2149
+ onResourceQuickConnect(resourcePath: string): void;
2150
+ onCatalogResourceSelected(entry: DiscoveredResourceOption | null): void;
2151
+ onResourceQuickClear(): void;
2152
+ private updateDirtyState;
1982
2153
  ngAfterViewInit(): void;
1983
2154
  ngOnDestroy(): void;
1984
2155
  getSettingsValue(): PraxisFilterFormWidgetEditorValue;
1985
2156
  onSave(): PraxisFilterFormWidgetEditorValue;
1986
2157
  reset(): void;
2158
+ private publishBusy;
1987
2159
  private initializeChildEditor;
2160
+ private applyBaselineDocumentToChildEditor;
2161
+ private applyDraftDocumentToChildEditor;
2162
+ private loadFilterSchemaFieldsIfNeeded;
2163
+ private extractCatalogFallbackFields;
2164
+ private applyLoadedFilterFieldMetadata;
2165
+ private buildDiscoveryOptions;
1988
2166
  private buildValue;
1989
2167
  private createDocumentFromInputs;
1990
2168
  private normalizeMode;
@@ -2105,6 +2283,10 @@ declare class LayoutEditorComponent implements OnInit {
2105
2283
  get layoutSections(): FormSection[];
2106
2284
  canApplyAll(): boolean;
2107
2285
  applyGapToAll(): void;
2286
+ canCalibrateFieldsFromSemantics(): boolean;
2287
+ calibrateAllFieldsFromSemantics(): void;
2288
+ canOrganizeSectionsFromSemantics(): boolean;
2289
+ organizeSectionsFromSemantics(): void;
2108
2290
  ngOnInit(): void;
2109
2291
  handleKeydown(event: KeyboardEvent): void;
2110
2292
  /**
@@ -2321,6 +2503,7 @@ declare class FieldConfiguratorComponent {
2321
2503
  private readonly categoryByType;
2322
2504
  private resolveEditorialMeta;
2323
2505
  get icon(): string;
2506
+ private normalizedFieldControlType;
2324
2507
  get typeClass(): string;
2325
2508
  get typeSpecificClass(): string;
2326
2509
  get typeLabel(): string;
@@ -2332,8 +2515,13 @@ declare class FieldConfiguratorComponent {
2332
2515
 
2333
2516
  interface PraxisDynamicFormWidgetEditorInputs {
2334
2517
  config?: FormConfig | null;
2518
+ resourcePath?: string | null;
2519
+ apiEndpointKey?: ApiEndpoint | string | null;
2520
+ endpointKey?: ApiEndpoint;
2521
+ apiUrlEntry?: ApiUrlEntry | null;
2522
+ schemaSource?: 'resource' | 'filter';
2335
2523
  layoutPolicy?: DynamicFormLayoutPolicy | null;
2336
- configPersistenceStrategy?: 'local-first' | 'input-first';
2524
+ configPersistenceStrategy?: 'local-first' | 'input-first' | 'volatile';
2337
2525
  mode?: DynamicFormMode;
2338
2526
  emptyState?: PraxisDynamicFormEmptyState | null;
2339
2527
  presentationModeGlobal?: boolean | null;
@@ -2350,23 +2538,46 @@ interface PraxisDynamicFormWidgetEditorValue {
2350
2538
  inputs: PraxisDynamicFormWidgetEditorInputs;
2351
2539
  }
2352
2540
  declare class PraxisDynamicFormWidgetConfigEditor implements SettingsValueProvider, AfterViewInit, OnDestroy {
2541
+ private readonly crudService;
2542
+ private readonly resourceDiscovery;
2543
+ private readonly cdr;
2353
2544
  inputs: PraxisDynamicFormWidgetEditorInputs | null;
2354
2545
  widgetKey?: string;
2355
2546
  appliedValues$?: Observable<unknown>;
2356
2547
  private appliedSource?;
2548
+ private appliedResourcePath?;
2357
2549
  /** Runtime evidence supplied by the existing component editor context resolver. */
2358
2550
  context: Record<string, unknown>;
2359
2551
  formEditor?: PraxisDynamicFormConfigEditor;
2360
2552
  readonly isDirty$: BehaviorSubject<boolean>;
2361
2553
  readonly isValid$: BehaviorSubject<boolean>;
2362
2554
  readonly isBusy$: BehaviorSubject<boolean>;
2555
+ schemaWarning: string;
2363
2556
  private readonly subscription;
2557
+ private schemaSubscription?;
2558
+ private childBusy;
2559
+ private schemaLoading;
2364
2560
  private initialEditorConfig?;
2561
+ private committedBaselineConfig?;
2562
+ private committedBaselineDocument?;
2365
2563
  private sourceDraft?;
2366
- get configurationSource(): 'local-first' | 'input-first';
2564
+ private resourcePathDraft?;
2565
+ selectedCatalogResource: DiscoveredResourceOption | null;
2566
+ private optionalInject;
2567
+ get configurationSource(): 'local-first' | 'input-first' | 'volatile';
2568
+ get effectiveResourcePath(): string;
2569
+ get effectiveEndpointKey(): ApiEndpoint | undefined;
2570
+ get effectiveApiUrlEntry(): ApiUrlEntry | null | undefined;
2571
+ get effectiveDiscoveryIntent(): 'crud' | 'filter';
2572
+ get hasReadOnlyModeWarning(): boolean;
2573
+ switchToReadOnlyViewMode(): void;
2574
+ onCatalogResourceSelected(resource: DiscoveredResourceOption | null): void;
2367
2575
  changeConfigurationSource(value: string): void;
2576
+ onResourceQuickConnect(resourcePath: string): void;
2577
+ onResourceQuickClear(): void;
2578
+ private baselineResourcePath;
2368
2579
  private updateDirtyState;
2369
- private readonly cdr;
2580
+ private publishBusy;
2370
2581
  ngAfterViewInit(): void;
2371
2582
  ngOnDestroy(): void;
2372
2583
  getSettingsValue(): PraxisDynamicFormWidgetEditorValue;
@@ -2374,6 +2585,12 @@ declare class PraxisDynamicFormWidgetConfigEditor implements SettingsValueProvid
2374
2585
  acceptAppliedValue(value: unknown): void;
2375
2586
  reset(): void;
2376
2587
  private initializeChildEditor;
2588
+ private applyBaselineDocumentToChildEditor;
2589
+ private applyDraftDocumentToChildEditor;
2590
+ private loadResourceSchemaFieldsIfNeeded;
2591
+ private extractCatalogFallbackFields;
2592
+ private applyFieldMetadataHydration;
2593
+ private buildDiscoveryOptions;
2377
2594
  private buildValue;
2378
2595
  private createDocumentFromInputs;
2379
2596
  static ɵfac: i0.ɵɵFactoryDeclaration<PraxisDynamicFormWidgetConfigEditor, never>;
@@ -2409,6 +2626,30 @@ declare class DomainRuleFormRulesService {
2409
2626
  static ɵprov: i0.ɵɵInjectableDeclaration<DomainRuleFormRulesService>;
2410
2627
  }
2411
2628
 
2629
+ /**
2630
+ * DynamicFormSchemaCacheService
2631
+ * ------------------------------
2632
+ * Serviço canônico de conveniência em `@praxisui/dynamic-form` para orquestração
2633
+ * de cache de primeiro nível (L1) de esquemas OpenAPI compilados (Issue #2).
2634
+ *
2635
+ * Delega o ciclo de vida do cache em memória ao DynamicFormService (@praxisui/core),
2636
+ * garantindo consistência referencial entre módulos e transições de abas em 0ms.
2637
+ */
2638
+ declare class DynamicFormSchemaCacheService {
2639
+ private readonly dynamicFormService;
2640
+ buildCacheKey(params: SchemaIdParams & {
2641
+ baseUrl?: string;
2642
+ }): string;
2643
+ get(cacheKey: string): CompiledDynamicFormSchema | undefined;
2644
+ set(cacheKey: string, compiled: CompiledDynamicFormSchema, customTtlMs?: number): void;
2645
+ has(cacheKey: string): boolean;
2646
+ invalidate(cacheKey?: string): void;
2647
+ clear(): void;
2648
+ size(): number;
2649
+ static ɵfac: i0.ɵɵFactoryDeclaration<DynamicFormSchemaCacheService, never>;
2650
+ static ɵprov: i0.ɵɵInjectableDeclaration<DynamicFormSchemaCacheService>;
2651
+ }
2652
+
2412
2653
  declare class Ergadm00034CompactPresentationExampleComponent {
2413
2654
  private readonly dynamicLayout;
2414
2655
  readonly legacyFrequencyExample: _praxisui_dynamic_form.Ergadm00034CompactPresentationExample;
@@ -2463,23 +2704,22 @@ declare function applyVisibilityRules(rules: FormLayoutRule[], data: any): Recor
2463
2704
  /**
2464
2705
  * Converts a RuleBuilderState produced by the visual builder into
2465
2706
  * an array of FormLayoutRule objects understood by the dynamic form.
2707
+ * Throws when a referenced condition graph cannot be serialized without losing semantics.
2466
2708
  */
2467
2709
  declare function ruleBuilderStateToFormLayoutRules(state: RuleBuilderState | null | undefined): FormLayoutRule[];
2468
2710
  /**
2469
2711
  * Converts an array of FormLayoutRule back into a RuleBuilderState
2470
2712
  * so that the visual builder can display the saved rules.
2471
2713
  *
2472
- * The conversion handles a limited subset of rules (visibility and
2473
- * required/validation rules with simple field conditions).
2714
+ * Every canonical effect reopens as a propertyRule, with all targets and both
2715
+ * branches intact. Conditions outside the visual vocabulary stay inline.
2474
2716
  */
2475
2717
  declare function formLayoutRulesToBuilderState(rules: FormLayoutRule[] | null | undefined): RuleBuilderState;
2476
2718
 
2477
- /**
2478
- * Recursively converts arrays representing dates into ISO-8601 strings.
2479
- * Arrays are expected in the form `[year, month, day, hour?, minute?, second?, millisecond?]`.
2480
- * Non-date arrays and other values are returned untouched.
2481
- */
2482
- declare function normalizeDateArrays(data: any): any;
2719
+ /** Converts legacy date tuples only where the existing field metadata declares a temporal value. */
2720
+ declare function normalizeDateArrays(data: any, fields: readonly FieldMetadata[]): any;
2721
+ /** One private draft shared by hydration and submit; only declared temporal fields are transformed. */
2722
+ declare function normalizeTemporalFieldValues(data: any, fields: readonly FieldMetadata[], normalizeString: (value: string) => string): any;
2483
2723
 
2484
2724
  /**
2485
2725
  * Helper provider to wire the PraxisDynamicForm component into the Settings Panel
@@ -3044,7 +3284,50 @@ declare const PRAXIS_FILTER_FORM_AUTHORING_PROJECTION: {
3044
3284
  readonly operationIds: readonly ["field.label.set", "field.placeholder.set", "field.required.set", "field.readOnly.set", "field.disabled.set", "field.hidden.set", "field.controlType.set", "field.optionSource.set", "field.local.add", "field.local.remove", "layout.section.add", "layout.section.remove", "layout.row.add", "layout.column.add", "layout.field.move"];
3045
3285
  readonly roundTripRequirements: readonly ["strip-undefined", "stable-field-order", "preserve-local-field-source", "preserve-section-row-column-ids"];
3046
3286
  };
3047
- declare const PRAXIS_FILTER_FORM_AUTHORING_MANIFEST: _praxisui_core.ComponentAuthoringManifest;
3287
+ declare const PRAXIS_FILTER_FORM_AUTHORING_MANIFEST: {
3288
+ runtimeInputs: _praxisui_core.ManifestInput[];
3289
+ schemaVersion: string;
3290
+ componentId: string;
3291
+ ownerPackage: string;
3292
+ configSchemaId: string;
3293
+ manifestVersion: string;
3294
+ editableTargets: _praxisui_core.ManifestTarget[];
3295
+ operations: _praxisui_core.ManifestOperation[];
3296
+ validators: _praxisui_core.ManifestValidator[];
3297
+ roundTripRequirements?: string[];
3298
+ presentationAffordances?: _praxisui_core.ManifestPresentationAffordanceCatalog;
3299
+ examples: _praxisui_core.ManifestExample[];
3300
+ controlProfiles?: _praxisui_core.ManifestControlProfile[];
3301
+ };
3302
+
3303
+ /** Reconstruct raw native authorship. Normalized editor/runtime defaults are never the source. */
3304
+ declare function decodeDynamicFormPageInputs(value: unknown): {
3305
+ document: DynamicFormAuthoringDocument | null;
3306
+ diagnostics: EditorDiagnostic[];
3307
+ };
3308
+ /** Owner callback for Core admission; no component loading or second config authority. */
3309
+ declare function validateDynamicFormPageWidget(widget: WidgetInstance): readonly {
3310
+ code: string;
3311
+ path: string;
3312
+ }[];
3313
+ /** Inverse native projection. Explicit unrepresentable authoring blocks fail instead of being filtered. */
3314
+ declare function encodeDynamicFormPageInputs(value: unknown): {
3315
+ inputs: Record<string, unknown> | null;
3316
+ diagnostics: EditorDiagnostic[];
3317
+ };
3318
+ /** Persist only explicit deltas from the mounted native editor; bindings/context stay pinned to the seed. */
3319
+ declare function projectDynamicFormPageEditorChanges(authoredInputs: unknown, editorBaseline: unknown, editorValue: unknown): {
3320
+ inputs: Record<string, unknown> | null;
3321
+ diagnostics: EditorDiagnostic[];
3322
+ };
3323
+ /** Derive execution-only identity and disable independent preferences. Never persist this projection. */
3324
+ declare function materializeDynamicFormPageRuntimeInputs(value: unknown, pageId: string, widgetKey: string, options?: {
3325
+ preview?: boolean;
3326
+ }): {
3327
+ inputs: Record<string, unknown> | null;
3328
+ diagnostics: EditorDiagnostic[];
3329
+ };
3330
+ declare const DYNAMIC_FORM_GOVERNED_PAGE_PREVIEW_ADAPTER: GovernedPagePreviewWidgetAdapter;
3048
3331
 
3049
- export { ActionsEditorComponent, CORPORATE_PRESENTATION_FORMAT_GALLERY, CanvasStateService, CanvasToolbarComponent, ColumnEditorComponent, DomainRuleFormRulesService, DynamicFormLayoutService, ERGADM00034_COMPACT_PRESENTATION_EXAMPLE, Ergadm00034CompactPresentationExampleComponent, 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_AUTHORING_MANIFEST, PRAXIS_FILTER_FORM_AUTHORING_PROJECTION, PRAXIS_FILTER_FORM_COMPONENT_METADATA, PraxisDynamicForm, PraxisDynamicFormConfigEditor, PraxisDynamicFormWidgetConfigEditor, PraxisFilterForm, PraxisFilterFormWidgetConfigEditor, PraxisFormActionsComponent, RowConfiguratorComponent, RowEditorComponent, SETTINGS_PANEL_DYNAMIC_FORM_PROVIDER, SectionEditorComponent, TASK_PRESETS, applyVisibilityRules, buildCorporatePresentationFormatGalleryConfig, buildDynamicFormApplyPlan, buildDynamicFormRuleAuthoringContext, buildErgadm00034CompactPresentationConfig, createDynamicFormAuthoringDocument, formLayoutRulesToBuilderState, getFormAiCatalog, getFormCapabilities, getFormEnum, isRuleSatisfied, normalizeDateArrays, normalizeDynamicFormAuthoringDocument, parseLegacyOrDynamicFormDocument, providePraxisDynamicFormMetadata, providePraxisFilterFormMetadata, provideSettingsPanelDynamicForm, ruleBuilderStateToFormLayoutRules, serializeDynamicFormAuthoringDocument, stripLegacyFieldMetadata, toCanonicalDynamicFormConfig, validateDynamicFormAuthoringDocument, validateDynamicFormAuthoringInput };
3050
- export type { CanvasElement, CanvasElementType, CanvasPathPart, Capability$1 as Capability, CapabilityCatalog$1 as CapabilityCatalog, CapabilityCategory$1 as CapabilityCategory, CorporatePresentationExample, DomainRuleFormRulesRequestOptions, DomainRuleMaterializedFormLayoutRule, DynamicFieldRenderErrorEvent, DynamicFormAllowedRuleProperties, DynamicFormApplyPlan, DynamicFormAuthoringDocument, DynamicFormBindings, DynamicFormConfigPatchChangeEvent, DynamicFormContextSnapshot, DynamicFormGeneratedLayoutPreset, DynamicFormMode, DynamicFormPresentationSnapshot, DynamicFormProjectionContext, DynamicFormResolvedRuntimeContract, DynamicFormRuleAuthoringContext, DynamicFormRuleAuthoringField, DynamicFormRuleAuthoringTarget, DynamicFormRuleAuthoringTargetDetails, DynamicFormRuleAuthoringTargets, DynamicFormRuleAuthoringVisualBlockNode, DynamicFormRuleTargetType, DynamicFormRuntimeContext, DynamicFormRuntimeValueSource, DynamicFormSchemaPrefsSnapshot, DynamicFormValidationContext, EditorDiagnostic, EditorDocument, Ergadm00034CompactPresentationExample, Ergadm00034LegacyFrequencyRow, FieldPath, FieldPathContainer, FieldPathWithIndex, Capability as FormComponentCapability, CapabilityCatalog as FormComponentCapabilityCatalog, CapabilityCategory as FormComponentCapabilityCategory, ValueKind as FormComponentValueKind, FormConfigLike, GenerateFormConfigFromMetadataOptions, IdPath, InsertLocalFieldOptions, InsertLocalFieldResult, JsonEditorEvent, JsonValidationResult, LayoutChange, LayoutResult, LocalFieldInsertionDiagnostic, LocalFieldInsertionDiagnosticCode, Operation, Path, PathWithIndex, PraxisDynamicFormDomainRulesOptions, PraxisDynamicFormEmptyState, PraxisDynamicFormWidgetEditorInputs, PraxisDynamicFormWidgetEditorValue, PraxisFilterFormWidgetEditorInputs, PraxisFilterFormWidgetEditorValue, PraxisFormActionEvent, RemovePolicy, RuleApplicationContext, RuleApplicationDiagnostic, RuleApplicationDiagnosticCode, RuleApplicationResult, RuleApplicationTargetIndex, RuleApplicationTargetType, ValidationReport, ValueKind$1 as ValueKind };
3332
+ export { ActionsEditorComponent, CORPORATE_PRESENTATION_FORMAT_GALLERY, CanvasStateService, CanvasToolbarComponent, ColumnEditorComponent, DYNAMIC_FORM_GOVERNED_PAGE_PREVIEW_ADAPTER, DomainRuleFormRulesService, DynamicFormLayoutService, DynamicFormSchemaCacheService, ERGADM00034_COMPACT_PRESENTATION_EXAMPLE, Ergadm00034CompactPresentationExampleComponent, 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_AUTHORING_MANIFEST, PRAXIS_FILTER_FORM_AUTHORING_PROJECTION, PRAXIS_FILTER_FORM_COMPONENT_METADATA, PraxisDynamicForm, PraxisDynamicFormConfigEditor, PraxisDynamicFormWidgetConfigEditor, PraxisFilterForm, PraxisFilterFormWidgetConfigEditor, PraxisFormActionsComponent, RowConfiguratorComponent, RowEditorComponent, SETTINGS_PANEL_DYNAMIC_FORM_PROVIDER, SectionEditorComponent, TASK_PRESETS, applyVisibilityRules, buildCorporatePresentationFormatGalleryConfig, buildDynamicFormApplyPlan, buildDynamicFormRuleAuthoringContext, buildErgadm00034CompactPresentationConfig, createDynamicFormAuthoringDocument, decodeDynamicFormPageInputs, encodeDynamicFormPageInputs, formLayoutRulesToBuilderState, getFormAiCatalog, getFormCapabilities, getFormEnum, isRuleSatisfied, materializeDynamicFormPageRuntimeInputs, normalizeDateArrays, normalizeDynamicFormAuthoringDocument, normalizeTemporalFieldValues, parseLegacyOrDynamicFormDocument, projectDynamicFormPageEditorChanges, providePraxisDynamicFormMetadata, providePraxisFilterFormMetadata, provideSettingsPanelDynamicForm, ruleBuilderStateToFormLayoutRules, serializeDynamicFormAuthoringDocument, stripLegacyFieldMetadata, toCanonicalDynamicFormConfig, validateDynamicFormAuthoringDocument, validateDynamicFormAuthoringInput, validateDynamicFormPageWidget };
3333
+ export type { CanvasElement, CanvasElementType, CanvasPathPart, Capability$1 as Capability, CapabilityCatalog$1 as CapabilityCatalog, CapabilityCategory$1 as CapabilityCategory, CorporatePresentationExample, DomainRuleFormRulesRequestOptions, DomainRuleMaterializedFormLayoutRule, DynamicFieldRenderErrorEvent, DynamicFormAllowedRuleProperties, DynamicFormApplyPlan, DynamicFormAuthoringDocument, DynamicFormBindings, DynamicFormConfigPatchChangeEvent, DynamicFormContextSnapshot, DynamicFormGeneratedLayoutPreset, DynamicFormPresentationSnapshot, DynamicFormProjectionContext, DynamicFormResolvedRuntimeContract, DynamicFormRuleAuthoringContext, DynamicFormRuleAuthoringField, DynamicFormRuleAuthoringTarget, DynamicFormRuleAuthoringTargetDetails, DynamicFormRuleAuthoringTargets, DynamicFormRuleAuthoringVisualBlockNode, DynamicFormRuleTargetType, DynamicFormRuntimeContext, DynamicFormRuntimeValueSource, DynamicFormSchemaPrefsSnapshot, DynamicFormValidationContext, EditorDiagnostic, EditorDocument, Ergadm00034CompactPresentationExample, Ergadm00034LegacyFrequencyRow, FieldPath, FieldPathContainer, FieldPathWithIndex, Capability as FormComponentCapability, CapabilityCatalog as FormComponentCapabilityCatalog, CapabilityCategory as FormComponentCapabilityCategory, ValueKind as FormComponentValueKind, FormConfigLike, GenerateFormConfigFromMetadataOptions, IdPath, InsertLocalFieldOptions, InsertLocalFieldResult, JsonEditorEvent, JsonValidationResult, LayoutChange, LayoutResult, LocalFieldInsertionDiagnostic, LocalFieldInsertionDiagnosticCode, Operation, Path, PathWithIndex, PraxisDynamicFormDomainRulesOptions, PraxisDynamicFormEmptyState, PraxisDynamicFormWidgetEditorInputs, PraxisDynamicFormWidgetEditorValue, PraxisFilterFormWidgetEditorInputs, PraxisFilterFormWidgetEditorValue, PraxisFormActionEvent, RemovePolicy, RuleApplicationContext, RuleApplicationDiagnostic, RuleApplicationDiagnosticCode, RuleApplicationResult, RuleApplicationTargetIndex, RuleApplicationTargetType, ValidationReport, ValueKind$1 as ValueKind };