@praxisui/dynamic-form 10.0.0-rc.3 → 10.0.0-rc.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@praxisui/dynamic-form",
3
- "version": "10.0.0-rc.3",
3
+ "version": "10.0.0-rc.31",
4
4
  "description": "Angular dynamic form engine for Praxis UI: metadata-driven forms, hooks, and services integrating @praxisui/* packages.",
5
5
  "peerDependencies": {
6
6
  "@angular/common": "^21.0.0",
@@ -9,13 +9,13 @@
9
9
  "@angular/forms": "^21.0.0",
10
10
  "@angular/material": "^21.0.0",
11
11
  "@angular/router": "^21.0.0",
12
- "@praxisui/ai": "^10.0.0-rc.3",
13
- "@praxisui/dynamic-fields": "^10.0.0-rc.3",
14
- "@praxisui/metadata-editor": "^10.0.0-rc.3",
15
- "@praxisui/rich-content": "^10.0.0-rc.3",
16
- "@praxisui/settings-panel": "^10.0.0-rc.3",
17
- "@praxisui/visual-builder": "^10.0.0-rc.3",
18
- "@praxisui/core": "^10.0.0-rc.3",
12
+ "@praxisui/ai": "^10.0.0-rc.31",
13
+ "@praxisui/dynamic-fields": "^10.0.0-rc.31",
14
+ "@praxisui/metadata-editor": "^10.0.0-rc.31",
15
+ "@praxisui/rich-content": "^10.0.0-rc.31",
16
+ "@praxisui/settings-panel": "^10.0.0-rc.31",
17
+ "@praxisui/visual-builder": "^10.0.0-rc.31",
18
+ "@praxisui/core": "^10.0.0-rc.31",
19
19
  "rxjs": "^7.8.0"
20
20
  },
21
21
  "dependencies": {
@@ -73,6 +73,16 @@ Este documento e a referencia canonica da API JSON de praxis-dynamic-form.
73
73
  - Em replace-all, omitir a preferência remove o override anterior; `false` deve ser preservado. Não existe um quarto valor em `bindings.mode`.
74
74
  - O Page Builder projeta a preferência nos inputs do widget, preservando ausência de `config` em formulários schema-driven. No editor do runtime, Apply/Save também publicam `mode` e `presentationModeGlobal` em `configPatchChange.inputPatch`.
75
75
  - `contextSnapshot.presentation` continua reservado aos estilos (tipografia, densidade e alinhamento), editáveis nos dois caminhos pela aba Estilo da apresentação; não é o seletor de ativação. O Filter Form não oferece o seletor de exibição porque seu runtime não suporta apresentação.
76
+ - `presentationPreset` (`'corporate-dossier' | 'editorial-card' | 'compact-presentation' | 'default'`) define o preset visual nativo em modo apresentação (`view`). Pode ser configurado via `@Input() presentationPreset`, em `FormPresentationConfig.preset` / `FormPresentationConfig.presentationPreset`, em `FormConfigMetadata.presentationPreset`, ou por seção via `FormSection.presentationPreset` para sobrescrever o estilo de uma seção específica sem recorrer a regras CSS ad hoc com `::ng-deep`.
77
+ - `layout` (`FormLayoutOptions`) governa a organização e navegação estrutural das seções do formulário:
78
+ - `mode`: `'vertical' | 'tabs' | 'accordion'` (padrão `'vertical'`).
79
+ - `defaultTabId`: identificador da aba selecionada inicialmente em modo abas.
80
+ - `tabsAppearance`: estilo visual dos botões de abas (`'pills' | 'underline' | 'buttons'`, padrão `'pills'`).
81
+ - `tabs`: lista declarativa de abas (`FormLayoutTabItem` com `id`, `label`, `icon`, `sectionIds`, `badge`, `disabled`, `tooltip`). Quando omitido, o runtime auto-deriva deterministicamente 1 aba por seção visível.
82
+ - `accordionMulti`: quando `mode === 'accordion'`, permite manter múltiplos painéis expandidos simultaneamente (padrão `false`, fechando os outros ao abrir um).
83
+ - `hideSectionHeaderInTabs`: suprime cabeçalho redundante de seção dentro do painel da aba ativa (padrão `false`).
84
+ - Entradas `@Input() layoutMode` e `@Input() formLayout` expostas diretamente em `PraxisDynamicForm`.
85
+ - Saídas `@Output() tabChange` (emite ID) e `@Output() tabSelected` (emite objeto completo) emitidas na alternância de abas.
76
86
 
77
87
 
78
88
  - `DynamicFormAuthoringDocument` e o snapshot canonico completo de autoria de `praxis-dynamic-form`.
@@ -1138,3 +1148,10 @@ O editor nativo, em **Geral → Sem registro selecionado**, materializa o contra
1138
1148
  As opções de aparência ficam em disclosure avançado: `tone` (`neutral`, `primary`, `secondary`), `variant` (`card`, `inline`, `panel`, `transparent`), `alignment` (`start`, `center`), `density` (`compact`, `comfortable`) e `iconContainer` (`none`, `circle`, `soft`). Ausência de opção herda o padrão do componente; JSON inválido produz diagnóstico.
1139
1149
 
1140
1150
  A orientação aparece somente em `mode=view`, sem registro selecionado nem snapshot local. Criar e Editar preservam a configuração sem exibi-la. Desligar grava `null`, que impede reativação por uma preferência antiga; substituir um documento que omite o binding também limpa a orientação. Em `input-first`, a página governa o valor. Filter Form não expõe essa seção, pois não possui contexto de seleção equivalente.
1151
+ ### Item revision custody
1152
+
1153
+ Automatic edit PUT/PATCH sends the strong ETag from the same hydration GET that supplied the form values, including `readUrl` and custom `getById`. A successful response containing the corresponding item representation replaces both cached data and revision together, including server normalization. A command acknowledgment or incomplete representation cannot rotate that snapshot. Missing/weak ETags are not synthesized; 412/428 requires explicit reload before another automatic submit.
1154
+
1155
+ Item/API-context changes, reload and destruction invalidate the transient read generation, including identity or enterprise-scope A→B→A. Automatic preparation captures its original binding/generation before asynchronous hooks or determinations. An obsolete preparation does not submit; if its hook retained the reused form group, another submit requires explicit reload to reconcile any contaminated draft. Obsolete success/error responses cannot publish formSubmit stages, run submit result hooks, change fields/errors, close the new surface or reset a newer submit's loading/snackbar state.
1156
+
1157
+ This adds no persisted configuration field. Explicit `submitResourceVersion` and cross-resource version-target inputs retain their command precedence and response/event semantics; their responses do not hydrate or rotate the originating item snapshot.
@@ -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, 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, Breakpoint, DomainRuleRequestOptions, DomainRuleService, DomainRuleMaterialization, SchemaIdParams, CompiledDynamicFormSchema, TableConfig, SurfaceOpenActionEditorComponent, IconPickerService, GlobalActionRef, AiCapabilityCategory, AiCapabilityCatalog, AiValueKind, ComponentAuthoringManifest } from '@praxisui/core';
11
+ export { CompiledDynamicFormSchema, 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';
@@ -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,7 +573,7 @@ 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;
578
579
  /** Opt-in view placeholder; null explicitly disables it. */
@@ -661,6 +662,7 @@ interface DynamicFormConfigPatchChangeEvent {
661
662
  mode?: DynamicFormMode;
662
663
  presentationModeGlobal?: boolean | null;
663
664
  presentation?: DynamicFormPresentationSnapshot | null;
665
+ presentationPreset?: FormPresentationPreset;
664
666
  emptyState?: PraxisDynamicFormEmptyState | null;
665
667
  };
666
668
  }
@@ -769,6 +771,7 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
769
771
  private readonly resourceDiscovery;
770
772
  private readonly aiAssistantSessionEffect;
771
773
  private readonly globalActions;
774
+ private readonly optionRegistry;
772
775
  private readonly DEBUG;
773
776
  private effectiveActionsCache?;
774
777
  private effectiveActionsCacheBase?;
@@ -790,7 +793,7 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
790
793
  * merged context snapshot used to avoid re-binding on every change detection pass.
791
794
  */
792
795
  editorialContext: Record<string, unknown> | null;
793
- mode: 'create' | 'edit' | 'view';
796
+ mode: DynamicFormMode;
794
797
  config: FormConfig;
795
798
  private hostConfigInputProvided;
796
799
  /** Optional host-level overrides for the rendered form action bar. */
@@ -851,6 +854,16 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
851
854
  configPersistenceStrategy: 'local-first' | 'input-first';
852
855
  /** Optional layout to use instead of generated one */
853
856
  layout?: FormLayout;
857
+ /**
858
+ * Layout mode for organizing form sections: 'vertical' (default), 'tabs' or 'accordion'.
859
+ * Overrides config.layout.mode when specified.
860
+ */
861
+ layoutMode?: FormLayoutMode;
862
+ /**
863
+ * Layout configuration options for form sections (mode, tabs, defaultTabId, tabsAppearance, accordionMulti, etc.).
864
+ * Merged with and takes precedence over config.layout.
865
+ */
866
+ formLayout?: FormLayoutOptions;
854
867
  /** Metadata-driven layout preset used only when creating an initial config from schema. */
855
868
  generatedLayoutPreset: DynamicFormGeneratedLayoutPreset;
856
869
  /** Opt-in policy for schema-driven transient layout materialization. */
@@ -876,11 +889,38 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
876
889
  presentationModeGlobal: boolean | null;
877
890
  /** Projection of contextSnapshot.presentation; null clears authored style overrides. */
878
891
  presentation?: DynamicFormPresentationSnapshot | null;
892
+ /**
893
+ * Optional presentation preset applied when the form is rendered in presentation mode.
894
+ * Resolves styles for standard patterns: 'corporate-dossier', 'editorial-card', 'compact-presentation' or 'default'.
895
+ */
896
+ presentationPreset?: FormPresentationPreset;
897
+ /**
898
+ * Default visual appearance preset for sections when not explicitly configured at section level.
899
+ * Values: 'card' (default), 'plain' (borderless with divider support), 'step' (stepper badge layout).
900
+ */
901
+ sectionDefaultAppearance?: 'card' | 'plain' | 'step';
902
+ /**
903
+ * Global flag to control divider lines between plain/dossier sections.
904
+ * When true, renders a subtle separator line below each section (except the last).
905
+ */
906
+ sectionDivider?: boolean;
879
907
  visibleGlobal: boolean | null;
880
908
  fieldIconPolicy: 'all' | 'presentation-only' | 'none';
881
909
  /** Opt-in loader for shared domain rule materializations persisted outside FormConfig. */
882
910
  domainRules: PraxisDynamicFormDomainRulesOptions | boolean | null;
883
911
  get effectivePresentation(): boolean;
912
+ /** Normalizes presentation preset aliases and casing to canonical values. */
913
+ normalizePresentationPreset(preset?: string | null): FormPresentationPreset;
914
+ /** Resolved presentation preset for the form container. */
915
+ get effectivePresentationPreset(): FormPresentationPreset;
916
+ /** Resolved presentation preset for a specific section, allowing section-level override. */
917
+ getSectionPresentationPreset(section?: FormSection | null): FormPresentationPreset;
918
+ isCorporateDossierPreset(): boolean;
919
+ isEditorialCardPreset(): boolean;
920
+ isCompactPresentationPreset(): boolean;
921
+ isSectionCorporateDossier(section?: FormSection | null): boolean;
922
+ isSectionEditorialCard(section?: FormSection | null): boolean;
923
+ isSectionCompactPresentation(section?: FormSection | null): boolean;
884
924
  shouldShowContextEmptyState(): boolean;
885
925
  private hasResourceContext;
886
926
  private hasLocalRecordContext;
@@ -932,10 +972,19 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
932
972
  reactiveDeterminationExecuted: EventEmitter<ReactiveDeterminationExecutionEvent>;
933
973
  /** Emits only aggregate runtime state; no request or response payload is exposed. */
934
974
  reactiveDeterminationPendingChange: EventEmitter<boolean>;
975
+ /** Emitted when active tab changes in 'tabs' layout mode. */
976
+ tabChange: EventEmitter<string>;
977
+ /** Emitted when a tab is selected in 'tabs' layout mode. */
978
+ tabSelected: EventEmitter<FormLayoutTabItem>;
979
+ /** Active tab ID when effectiveLayoutMode === 'tabs'. */
980
+ activeTabId: string | null;
935
981
  private reactiveDeterminationPending;
936
982
  isLoading: boolean;
937
983
  submitting: boolean;
938
984
  private submitPreparationInProgress;
985
+ private submitLifecycleSequence;
986
+ private activeSubmitLifecycle;
987
+ private activeSubmitAutomatic;
939
988
  submitError: string | null;
940
989
  initializationStatus: 'idle' | 'loading' | 'success' | 'error';
941
990
  currentErrorMessage: string;
@@ -970,6 +1019,9 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
970
1019
  private entitySelectionCleared;
971
1020
  private hydratedEntityId;
972
1021
  private loadedEntityData;
1022
+ private loadedResourceRevision;
1023
+ private resourceRevisionInvalidated;
1024
+ private entityReadAttempt;
973
1025
  protected entityHydrationPending: boolean;
974
1026
  protected entityReadFailed: boolean;
975
1027
  protected entityReadText(key: 'loading' | 'error' | 'retry' | 'region' | 'success'): string;
@@ -1090,6 +1142,17 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
1090
1142
  private resolveSubmitOperation;
1091
1143
  private buildSubmitRequest;
1092
1144
  private resolveSubmitResourceVersion;
1145
+ /** Identity and server context are captured with the representation, never reconstructed at submit by GET. */
1146
+ private resourceRevisionBinding;
1147
+ private usesAutomaticItemRevision;
1148
+ private isResourceRevisionCurrent;
1149
+ private invalidateAutomaticSubmitUi;
1150
+ private resourceRevisionNeedsReload;
1151
+ private resourceRevisionReloadError;
1152
+ private captureSavedResourceRevision;
1153
+ private rejectResourceRevision;
1154
+ private normalizeResourceVersionToken;
1155
+ private extractResourceVersionCandidate;
1093
1156
  private normalizeSubmitMethod;
1094
1157
  private formatResourceVersion;
1095
1158
  private resolveSubmitHref;
@@ -1116,6 +1179,8 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
1116
1179
  private initializeStandaloneConfig;
1117
1180
  private initializeDisconnectedEmptyState;
1118
1181
  private reloadForModeChange;
1182
+ private resourceRevisionContextScope;
1183
+ private subscribeToRuntimeContextChanges;
1119
1184
  ngOnInit(): void;
1120
1185
  ngOnChanges(changes: SimpleChanges): void;
1121
1186
  private blurAllInputs;
@@ -1219,6 +1284,18 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
1219
1284
  private areRuleValuesEqual;
1220
1285
  private buildRuleApplicationTargetIndex;
1221
1286
  private setRuleApplicationDiagnostics;
1287
+ get effectiveLayoutMode(): FormLayoutMode;
1288
+ get effectiveTabsAppearance(): FormLayoutTabsAppearance;
1289
+ get effectiveAccordionMulti(): boolean;
1290
+ get effectiveHideSectionHeaderInTabs(): boolean;
1291
+ get effectiveTabs(): FormLayoutTabItem[];
1292
+ ensureActiveTabValid(): void;
1293
+ selectTab(tabId: string): void;
1294
+ isSectionInActiveTab(section?: FormSection): boolean;
1295
+ getTabErrorCount(tab: FormLayoutTabItem): number;
1296
+ getTabAriaControls(tab: FormLayoutTabItem): string;
1297
+ getTabIdForSection(section?: FormSection): string | null;
1298
+ shouldHideSectionHeader(section?: FormSection): boolean;
1222
1299
  isSectionCollapsed(section?: FormSection): boolean;
1223
1300
  isSectionCollapsible(section?: FormSection): boolean;
1224
1301
  private getSectionRuleProps;
@@ -1230,6 +1307,7 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
1230
1307
  getSectionTitle(section: FormSection): string | undefined;
1231
1308
  getSectionDescription(section: FormSection): string | undefined;
1232
1309
  getSectionAppearance(section: FormSection): 'card' | 'plain' | 'step' | undefined;
1310
+ isSectionDividerEnabled(section: FormSection): boolean;
1233
1311
  getSectionStepLabel(section: FormSection): string | undefined;
1234
1312
  getSectionTitleColor(section: FormSection): string | undefined;
1235
1313
  getSectionDescriptionColor(section: FormSection): string | undefined;
@@ -1527,6 +1605,11 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
1527
1605
  private tryBuildExplicitSchemaContext;
1528
1606
  private buildSchemaContext;
1529
1607
  private getSchemaWithCache;
1608
+ /**
1609
+ * Invalida o cache de schema compilado para a instância atual e força
1610
+ * novo carregamento na próxima requisição.
1611
+ */
1612
+ invalidateSchemaCache(): void;
1530
1613
  private isReactiveValidationEnabled;
1531
1614
  private getReactiveValidationDebounceMs;
1532
1615
  private waitForGlobalConfigReadyForSchema;
@@ -1535,7 +1618,7 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
1535
1618
  private applyPresentationVars;
1536
1619
  private applyPresentationConfig;
1537
1620
  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>;
1621
+ 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; }; "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
1622
  }
1540
1623
 
1541
1624
  declare class FormConfigService {
@@ -1718,7 +1801,7 @@ declare class PraxisDynamicFormConfigEditor implements SettingsValueProvider, On
1718
1801
  private includeBackConfigBlock;
1719
1802
  formId?: string;
1720
1803
  componentKeyId?: string;
1721
- inputMode: 'create' | 'edit' | 'view';
1804
+ inputMode: DynamicFormMode;
1722
1805
  private includeBindingsBlock;
1723
1806
  private readonly editorMode;
1724
1807
  get isPresentationMode(): boolean;
@@ -2409,6 +2492,30 @@ declare class DomainRuleFormRulesService {
2409
2492
  static ɵprov: i0.ɵɵInjectableDeclaration<DomainRuleFormRulesService>;
2410
2493
  }
2411
2494
 
2495
+ /**
2496
+ * DynamicFormSchemaCacheService
2497
+ * ------------------------------
2498
+ * Serviço canônico de conveniência em `@praxisui/dynamic-form` para orquestração
2499
+ * de cache de primeiro nível (L1) de esquemas OpenAPI compilados (Issue #2).
2500
+ *
2501
+ * Delega o ciclo de vida do cache em memória ao DynamicFormService (@praxisui/core),
2502
+ * garantindo consistência referencial entre módulos e transições de abas em 0ms.
2503
+ */
2504
+ declare class DynamicFormSchemaCacheService {
2505
+ private readonly dynamicFormService;
2506
+ buildCacheKey(params: SchemaIdParams & {
2507
+ baseUrl?: string;
2508
+ }): string;
2509
+ get(cacheKey: string): CompiledDynamicFormSchema | undefined;
2510
+ set(cacheKey: string, compiled: CompiledDynamicFormSchema, customTtlMs?: number): void;
2511
+ has(cacheKey: string): boolean;
2512
+ invalidate(cacheKey?: string): void;
2513
+ clear(): void;
2514
+ size(): number;
2515
+ static ɵfac: i0.ɵɵFactoryDeclaration<DynamicFormSchemaCacheService, never>;
2516
+ static ɵprov: i0.ɵɵInjectableDeclaration<DynamicFormSchemaCacheService>;
2517
+ }
2518
+
2412
2519
  declare class Ergadm00034CompactPresentationExampleComponent {
2413
2520
  private readonly dynamicLayout;
2414
2521
  readonly legacyFrequencyExample: _praxisui_dynamic_form.Ergadm00034CompactPresentationExample;
@@ -3046,5 +3153,5 @@ declare const PRAXIS_FILTER_FORM_AUTHORING_PROJECTION: {
3046
3153
  };
3047
3154
  declare const PRAXIS_FILTER_FORM_AUTHORING_MANIFEST: _praxisui_core.ComponentAuthoringManifest;
3048
3155
 
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 };
3156
+ export { ActionsEditorComponent, CORPORATE_PRESENTATION_FORMAT_GALLERY, CanvasStateService, CanvasToolbarComponent, ColumnEditorComponent, 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, formLayoutRulesToBuilderState, getFormAiCatalog, getFormCapabilities, getFormEnum, isRuleSatisfied, normalizeDateArrays, normalizeDynamicFormAuthoringDocument, parseLegacyOrDynamicFormDocument, providePraxisDynamicFormMetadata, providePraxisFilterFormMetadata, provideSettingsPanelDynamicForm, ruleBuilderStateToFormLayoutRules, serializeDynamicFormAuthoringDocument, stripLegacyFieldMetadata, toCanonicalDynamicFormConfig, validateDynamicFormAuthoringDocument, validateDynamicFormAuthoringInput };
3157
+ 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 };