@praxisui/dynamic-form 10.0.0-rc.40 → 10.0.0-rc.42

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.40",
3
+ "version": "10.0.0-rc.42",
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.40",
13
- "@praxisui/dynamic-fields": "^10.0.0-rc.40",
14
- "@praxisui/metadata-editor": "^10.0.0-rc.40",
15
- "@praxisui/rich-content": "^10.0.0-rc.40",
16
- "@praxisui/settings-panel": "^10.0.0-rc.40",
17
- "@praxisui/visual-builder": "^10.0.0-rc.40",
18
- "@praxisui/core": "^10.0.0-rc.40",
12
+ "@praxisui/ai": "^10.0.0-rc.42",
13
+ "@praxisui/dynamic-fields": "^10.0.0-rc.42",
14
+ "@praxisui/metadata-editor": "^10.0.0-rc.42",
15
+ "@praxisui/rich-content": "^10.0.0-rc.42",
16
+ "@praxisui/settings-panel": "^10.0.0-rc.42",
17
+ "@praxisui/visual-builder": "^10.0.0-rc.42",
18
+ "@praxisui/core": "^10.0.0-rc.42",
19
19
  "rxjs": "^7.8.0"
20
20
  },
21
21
  "dependencies": {
@@ -38,7 +38,7 @@ source_of_truth:
38
38
  - "projects/praxis-core/src/lib/models/form/rule-property.schema.ts"
39
39
  - "projects/praxis-dynamic-form/docs/layout-items-visual-blocks.md"
40
40
  source_of_truth_last_verified: "2026-08-12"
41
- last_updated: "2026-10-22"
41
+ last_updated: "2026-10-27"
42
42
  toc: true
43
43
  sidebar: true
44
44
  tags:
@@ -176,16 +176,22 @@ Essa fronteira preserva a premissa de plataforma: o formulario materializa e exp
176
176
  | `helpPresentation` | `FormHelpPresentationConfig` | No | `{ display: "inline" }` | Active | Politica visual para exibir `hint`/`helpText` dos campos sem alterar semantica dos DTOs; erros de validacao continuam inline. |
177
177
  | `presentation` | `FormPresentationConfig` | No | runtime defaults | Active | Preferencias tipadas de label/value para modos read-only e presentation. Valores numericos de tamanho e largura sao materializados como comprimentos CSS em `px`; o mesmo shape alimenta o snapshot canonico do editor. |
178
178
  | `fieldMetadata[].array` | `FieldArrayConfig` | No | n/a | Active | Contrato de Editable Collection apenas quando `fieldMetadata[].controlType === "array"` ou quando `x-ui.array` foi publicado explicitamente. |
179
+ | `fieldMetadata[].items` | `FieldScalarItemsSchema` | No | n/a | Active | Subconjunto escalar do JSON Schema items: type string/integer/number/boolean, format e enum opcionais. Separado de array.itemSchema.fields de objetos; constraints vêm do schema de operação e não podem ser ampliadas pela config salva. |
179
180
 
180
181
  Nota editorial:
181
182
  - `praxis-dynamic-form` carrega e orquestra `FieldMetadata`, mas a resolução de `valuePresentation` em display/read-only pertence ao runtime de `@praxisui/dynamic-fields`.
182
183
  - `fieldMetadata[].source`, `fieldMetadata[].transient` e `fieldMetadata[].submitPolicy` governam campos locais do host. Campos com `source: "local"` ou `transient: true` participam de validação, regras, visibilidade e `valueChange`, mas são omitidos de `formSubmit.formData` e do payload HTTP por default.
183
184
  - `fieldMetadata[].submitPolicy` tem prioridade sobre `source` e `transient`: `include` força envio, `omit` força omissão e `includeWhenDirty` envia apenas quando o controle estiver dirty.
185
+ - Campos de schema `customFields.<key>` preservam `customField`, `customFieldKey` e `customFieldScope` projetados pelo core. O nome pontuado identifica um controle aninhado; `formData`/payload HTTP continuam `{ "customFields": { "<key>": valor } }`. Hidratação de datas, serialização de datas/lookups e políticas de omissão usam esse caminho, sem adapter do host. Valores ausentes não criam containers; campos vazios dirty ou obrigatórios mantêm a semântica dos campos planos.
186
+ - A normalização temporal usa metadata de campo e `array.itemSchema.fields`: tuples legadas de data e strings datetime locais são convertidas apenas em campos temporais declarados. Arrays numéricos/desconhecidos como `[2026, 10, 27]` não viram datas; strings comuns/desconhecidas conservam espaços e texto semelhante a datetime. `DateInput` segue a serialização de data sem horário.
187
+ - Arrays escalares com `items` usam `normalizeScalarArrayValue` de Core na validação e projeção do payload. Tokens devem corresponder ao tipo declarado (números JSON finitos, inteiros seguros, booleanos exatos e formatos date/date-time suportados), e o enum é aplicado após conversão. Não há conversão parcial nem descarte de itens inválidos; item `null` é inválido, enquanto container opcional `null`/ausente e `[]` permanecem distintos. `array.itemSchema.fields` de objetos é outro contrato. Isso permite materializar operandos `IN` tipados sem inferir semântica de busca a partir de arrays ou labels.
188
+ - O rebuild no mesmo contexto preserva dirty/touched por caminhos aninhados de controles e itens, sem marcar irmãos não tocados. Isso não é autosave universal entre resets, retries ou troca de registro/tenant.
189
+ - Na migração de configuração salva, um container colidente cede aos filhos diretos do schema, mesmo com `source: "local"`; campos locais não colidentes continuam preservados. Restrições herdadas de UI não equivalem a política de omissão no submit.
184
190
  - Dentro de `array.itemSchema.fields`, `includeWhenDirty` considera o item ou subcampo especifico dirty, como `participantes.0` ou `participantes.0.observacao`. O `FormArray` pai dirty, como `participantes`, nao torna todos os subcampos de todos os itens elegiveis para submit.
185
191
  - O evento `formSubmit` mantém `formData` como payload persistível filtrado e expõe `rawFormData` para hosts que precisam ler os campos locais/transientes no contexto de UI.
186
- - O evento `payloadPreviewChange` projeta o payload persistível atual sem executar hooks de submit nem disparar HTTP. `formData` usa o mesmo pipeline síncrono de normalização/políticas do submit, `rawFormData` preserva o estado completo e `changedFields` lista somente paths de controles dirty.
192
+ - O evento `payloadPreviewChange` projeta o payload persistível atual sem executar hooks de submit nem disparar HTTP. `formData` usa o mesmo pipeline síncrono de normalização/políticas do submit, `rawFormData` preserva o estado completo e `changedFields` lista somente paths de controles dirty. Uma projeção scalar inválida emite `formData: null` e `isValid: false`, preservando `rawFormData` para correção; consumidores não devem aplicá-la.
187
193
  - Botões com `type="reset"` preservam a semântica canônica de reset mesmo quando recebem um `id` editorial próprio. O runtime impede o reset nativo do navegador, restaura o snapshot hidratado, marca o formulário como pristine/untouched e publica nova prévia com `reason: "reset"`.
188
- - Configs persistidas são reconciliadas com o schema estrutural antes da montagem. Campos locais explícitos são preservados, mas campos server-backed recebem novamente a semântica publicada pelo backend, incluindo `endpoint`, `resourcePath`, `optionLabelKey` e `optionValueKey`.
194
+ - Configs persistidas passam pela reconciliação com o schema estrutural antes da montagem, inclusive quando a leitura bem-sucedida retorna definições vazias. Falhas de leitura/normalização/reconciliação bloqueiam a inicialização em vez de declarar pronta a configuração salva. Campos locais explícitos não colidentes são preservados, mas campos server-backed recebem novamente a semântica publicada pelo backend, incluindo `endpoint`, `resourcePath`, `optionLabelKey` e `optionValueKey`.
189
195
  - Para selects com `x-ui.endpoint` terminando em `/options/filter`, `endpoint` é a operação concreta de opções e `resourcePath` é o recurso dono. O runtime deve chamar `/options/filter`; não deve converter esse endpoint para `/filter`.
190
196
 
191
197
  ### Supported legacy paths
@@ -958,6 +964,13 @@ O runtime emite `target-not-found` quando uma regra aponta para `section`, `row`
958
964
  3. Cobertura de `messages` e parcial para chaves fora do fluxo principal de submit/confirmacao.
959
965
  4. Ainda falta bateria de stress dedicada para corrida teardown/render alem de `NG0205`.
960
966
  5. `hints` permanece no contrato/editor sem exposicao no template principal.
967
+ 6. A política canônica Metadata rejeita nomes reservados que colidem com controles Angular; suporte own-key no helper de payload não relaxa essa admissão. Definições persistidas antigas exigem migração backend.
968
+ 7. Read-only/disabled não significa omissão automática. O request de comando canônico exclui custom fields read-only; o schema response continua disponível para leitura. Use o request exato da operação, sem mesclar response ou inventar um mapping local de `x-ui.submitPolicy`.
969
+ 8. Record paths de regras calculadas não atravessam arrays intermediários. A recursão por `array.itemSchema.fields` no submit é um caminho distinto; scalar `items` também tem contrato próprio.
970
+ 9. Um novo ciclo revalida HTTP; L1 compilado não estabelece readiness. Cache só fornece corpo após 304 correspondente, nunca como fallback de status 0/401/403. Loading/erro de schema e contexto enterprise conhecido não confirmado bloqueiam submit. Retry não promete autosave entre registros, tenants ou resets.
971
+ 10. Schema vazio bem-sucedido é autoritativo. Reconciliação e sync manual ocultam/desabilitam e omitem órfãos server-backed; Filter também bloqueia sua validação e projeção aplicável, mantendo locais explícitos e campos hidden legítimos. Reaparecimento usa as restrições atuais do servidor. Identidade invisível ao snapshot de headers continua exigindo versão confirmada de contexto ou invalidação de todo o escopo cache/sessão no host.
972
+
973
+ Consulte a [revisão de adoção corporativa](https://github.com/codexrodrigues/praxis-ui-angular/pull/658) para fontes, cenários, gates e pendências.
961
974
 
962
975
  ### Source references
963
976
 
@@ -7,7 +7,7 @@ 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, 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';
10
+ import { AsyncConfigStorage, FormLayout, FieldMetadata, FormLayoutRule, FormRuleTargetType as FormRuleTargetType$1, PraxisJsonLogicService, FormSection, FormRow, FormColumn, FormConfig, FormConfigWithSections, FormLayoutItem, ReactiveDeterminationDefinition, ReactiveDeterminationExecutionEvent, FormActionButton, DynamicFormMode, PraxisRuntimeFormValueTargetIdentity, PraxisRuntimeFormValueEligibility, PraxisRuntimeFormValueProposal, PraxisRuntimeFormValueApplyMode, PraxisRuntimeFormValuePreviewResult, PraxisRuntimeFormValueApplyRequest, PraxisRuntimeFormValueApplyReceipt, PraxisRuntimeFormValueUndoReceipt, AiCapability, DynamicFormLayoutScope, BackConfig, FormPresentationConfig, EmptyStateTone, EmptyStateVariant, EmptyStateAlignment, EmptyStateDensity, EmptyStateIconContainer, FormPresentationPreset, PraxisRuntimeFormValueTargetPort, 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
11
  export { CompiledDynamicFormSchema, DynamicFormLayoutScope, DynamicFormMode } from '@praxisui/core';
12
12
  import * as rxjs from 'rxjs';
13
13
  import { Observable, Subscription, BehaviorSubject } from 'rxjs';
@@ -514,6 +514,14 @@ interface FormAiHost {
514
514
  readonlyModeGlobal?: boolean | null;
515
515
  effectiveReadonly?: boolean;
516
516
  applyConfigFromAdapter(config: FormConfig): void;
517
+ getRuntimeValueTargetIdentity?(): PraxisRuntimeFormValueTargetIdentity;
518
+ getRuntimeValueEligibility?(): PraxisRuntimeFormValueEligibility;
519
+ previewRuntimeValues?(proposal: PraxisRuntimeFormValueProposal, options?: {
520
+ readonly selectedFieldPaths?: readonly string[];
521
+ readonly applyMode?: PraxisRuntimeFormValueApplyMode;
522
+ }): PraxisRuntimeFormValuePreviewResult;
523
+ applyRuntimeValues?(request: PraxisRuntimeFormValueApplyRequest): Promise<PraxisRuntimeFormValueApplyReceipt> | PraxisRuntimeFormValueApplyReceipt;
524
+ undoRuntimeValues?(receiptId?: string): Promise<PraxisRuntimeFormValueUndoReceipt> | PraxisRuntimeFormValueUndoReceipt;
517
525
  }
518
526
 
519
527
  declare class FormAiAdapter extends BaseAiAdapter<FormConfig> {
@@ -529,6 +537,14 @@ declare class FormAiAdapter extends BaseAiAdapter<FormConfig> {
529
537
  getDataProfile(): Record<string, any>;
530
538
  getSchemaFields(): Record<string, any>[];
531
539
  getAuthoringContext(): Record<string, any>;
540
+ getRuntimeValueTargetIdentity(): PraxisRuntimeFormValueTargetIdentity | null;
541
+ getRuntimeValueEligibility(): PraxisRuntimeFormValueEligibility | null;
542
+ previewRuntimeValues(proposal: PraxisRuntimeFormValueProposal, options?: {
543
+ readonly selectedFieldPaths?: readonly string[];
544
+ readonly applyMode?: PraxisRuntimeFormValueApplyMode;
545
+ }): PraxisRuntimeFormValuePreviewResult | null;
546
+ applyRuntimeValues(request: PraxisRuntimeFormValueApplyRequest): Promise<PraxisRuntimeFormValueApplyReceipt | null>;
547
+ undoRuntimeValues(receiptId?: string): Promise<PraxisRuntimeFormValueUndoReceipt | null>;
532
548
  compileAiResponse(response: Record<string, unknown>): AiResponseCompileResult | null;
533
549
  createSnapshot(): FormConfig;
534
550
  restoreSnapshot(snapshot: FormConfig): Promise<void>;
@@ -733,7 +749,7 @@ interface FormColumnRichContentRenderItem {
733
749
  style?: Record<string, any> | null;
734
750
  }
735
751
  type FormColumnRenderItem = FormColumnFieldsRenderItem | FormColumnRichContentRenderItem;
736
- declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
752
+ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy, PraxisRuntimeFormValueTargetPort {
737
753
  private crud;
738
754
  private http;
739
755
  private fb;
@@ -932,6 +948,17 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
932
948
  isSectionEditorialCard(section?: FormSection | null): boolean;
933
949
  isSectionCompactPresentation(section?: FormSection | null): boolean;
934
950
  shouldShowContextEmptyState(): boolean;
951
+ private isItemScopedActionSubmitTarget;
952
+ getActionTargetRecordSummary(): {
953
+ id?: string;
954
+ title?: string;
955
+ subtitle?: string;
956
+ badges: Array<{
957
+ label: string;
958
+ value: string;
959
+ tone: 'neutral' | 'info' | 'success' | 'warning' | 'danger';
960
+ }>;
961
+ } | null;
935
962
  private hasResourceContext;
936
963
  private hasLocalRecordContext;
937
964
  get effectiveReadonly(): boolean;
@@ -1044,6 +1071,8 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
1044
1071
  private assertSchemaInitializationCurrent;
1045
1072
  private isSchemaTransportInterruption;
1046
1073
  private schemaCache;
1074
+ private schemaValidationFailed;
1075
+ private initialValueContextInvalidated;
1047
1076
  private lastSchemaMeta?;
1048
1077
  private readonly schemaMetaPersistenceQueues;
1049
1078
  private persistenceContextEpoch;
@@ -1060,6 +1089,14 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
1060
1089
  private readonly entityReadCancel$;
1061
1090
  private isDestroyed;
1062
1091
  private formValueChangesSubscription;
1092
+ private formStatusChangesSubscription;
1093
+ private readonly runtimeValueJournal;
1094
+ private runtimeValueRevision;
1095
+ private runtimeValueTrackedForm;
1096
+ private readonly runtimeValueTrackedControls;
1097
+ private suppressCommandRuleSideEffectsDepth;
1098
+ private pendingSuppressedCommandEvaluation;
1099
+ private consumingSuppressedCommandEvaluation;
1063
1100
  private readonly submitFieldErrorSubscriptions;
1064
1101
  private activeSubmitErrorDetails;
1065
1102
  private reactiveDeterminationSubscription;
@@ -1199,6 +1236,7 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
1199
1236
  ngOnChanges(changes: SimpleChanges): void;
1200
1237
  private blurAllInputs;
1201
1238
  private initializeForm;
1239
+ private hasInitializationError;
1202
1240
  private handleInitializationError;
1203
1241
  private loadConfigFailOpen;
1204
1242
  private resolveFieldLabel;
@@ -1251,6 +1289,7 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
1251
1289
  private emitPayloadPreview;
1252
1290
  private resetToHydratedSnapshot;
1253
1291
  private collectDirtyFieldNames;
1292
+ private collectTouchedFieldNames;
1254
1293
  private buildCurrentFormRuntimeContext;
1255
1294
  private buildRestoreTargetContext;
1256
1295
  private isCompatibleRuntimeStateContext;
@@ -1319,6 +1358,7 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
1319
1358
  private hasVisibleSectionBody;
1320
1359
  private shouldRenderInsideLastSectionContent;
1321
1360
  private resolveInsideLastSectionHost;
1361
+ get actionTargetSelectedRecordLabel(): string;
1322
1362
  getSectionTitle(section: FormSection): string | undefined;
1323
1363
  getSectionDescription(section: FormSection): string | undefined;
1324
1364
  getSectionAppearance(section: FormSection): 'card' | 'plain' | 'step' | undefined;
@@ -1442,7 +1482,7 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
1442
1482
  closeAiAssistant(): void;
1443
1483
  onAiAssistantPromptChange(prompt: string): void;
1444
1484
  onAiAssistantSubmit(prompt: string): void;
1445
- onAiAssistantApply(): void;
1485
+ onAiAssistantApply(contextHints?: Record<string, unknown> | void): void;
1446
1486
  onAiAssistantRetry(): void;
1447
1487
  onAiAssistantCancel(): void;
1448
1488
  onAiAssistantQuickReply(reply: PraxisAssistantShellQuickReply): void;
@@ -1624,6 +1664,8 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
1624
1664
  showDetailedError(): void;
1625
1665
  private tryBuildExplicitSchemaContext;
1626
1666
  private buildSchemaContext;
1667
+ private requiresConfirmedSchemaContext;
1668
+ private schemaRepresentationContext;
1627
1669
  private getSchemaWithCache;
1628
1670
  /**
1629
1671
  * Invalida o cache de schema compilado para a instância atual e força
@@ -1637,6 +1679,21 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
1637
1679
  private logRowGapsSnapshot;
1638
1680
  private applyPresentationVars;
1639
1681
  private applyPresentationConfig;
1682
+ getRuntimeValueTargetIdentity(): PraxisRuntimeFormValueTargetIdentity;
1683
+ getRuntimeValueEligibility(): PraxisRuntimeFormValueEligibility;
1684
+ previewRuntimeValues(proposal: PraxisRuntimeFormValueProposal, options?: {
1685
+ readonly selectedFieldPaths?: readonly string[];
1686
+ readonly applyMode?: PraxisRuntimeFormValueApplyMode;
1687
+ }): PraxisRuntimeFormValuePreviewResult;
1688
+ applyRuntimeValues(request: PraxisRuntimeFormValueApplyRequest): PraxisRuntimeFormValueApplyReceipt;
1689
+ undoRuntimeValues(receiptId?: string): PraxisRuntimeFormValueUndoReceipt;
1690
+ private clearRuntimeValueControlSubscriptions;
1691
+ private collectLeafFormControls;
1692
+ private ensureRuntimeValueTracking;
1693
+ private withSuppressedCommandSideEffects;
1694
+ private createRuntimeFormHostCallbacks;
1695
+ private isConfiguredReactiveDeterminationOutputField;
1696
+ private collectRuntimeValueFieldClassification;
1640
1697
  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; }]>;
1641
1698
  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>;
1642
1699
  }
@@ -2060,7 +2117,8 @@ declare class PraxisFilterForm implements OnChanges, OnDestroy {
2060
2117
  private statusChangesSub?;
2061
2118
  private schemaSub?;
2062
2119
  private hydratedFieldMetadata;
2063
- private lastHydratedResourceKey;
2120
+ private schemaHydrationPending;
2121
+ private schemaHydrationFailed;
2064
2122
  private columnFieldsCache;
2065
2123
  private singleFieldCache;
2066
2124
  private readonly crudService;
@@ -2074,6 +2132,8 @@ declare class PraxisFilterForm implements OnChanges, OnDestroy {
2074
2132
  private buildRestorableValues;
2075
2133
  private hasExplicitDefaultValue;
2076
2134
  onFormSubmit(): void;
2135
+ private isFilterReady;
2136
+ private projectFilterValues;
2077
2137
  getColumnFields(column: FormColumn): FieldMetadata[];
2078
2138
  getSingleField(field: FieldMetadata): FieldMetadata[];
2079
2139
  getColumnClasses(column: FormColumn): string | null;
@@ -2695,12 +2755,10 @@ declare function ruleBuilderStateToFormLayoutRules(state: RuleBuilderState | nul
2695
2755
  */
2696
2756
  declare function formLayoutRulesToBuilderState(rules: FormLayoutRule[] | null | undefined): RuleBuilderState;
2697
2757
 
2698
- /**
2699
- * Recursively converts arrays representing dates into ISO-8601 strings.
2700
- * Arrays are expected in the form `[year, month, day, hour?, minute?, second?, millisecond?]`.
2701
- * Non-date arrays and other values are returned untouched.
2702
- */
2703
- declare function normalizeDateArrays(data: any): any;
2758
+ /** Converts legacy date tuples only where the existing field metadata declares a temporal value. */
2759
+ declare function normalizeDateArrays(data: any, fields: readonly FieldMetadata[]): any;
2760
+ /** One private draft shared by hydration and submit; only declared temporal fields are transformed. */
2761
+ declare function normalizeTemporalFieldValues(data: any, fields: readonly FieldMetadata[], normalizeString: (value: string) => string): any;
2704
2762
 
2705
2763
  /**
2706
2764
  * Helper provider to wire the PraxisDynamicForm component into the Settings Panel
@@ -3310,5 +3368,5 @@ declare function materializeDynamicFormPageRuntimeInputs(value: unknown, pageId:
3310
3368
  };
3311
3369
  declare const DYNAMIC_FORM_GOVERNED_PAGE_PREVIEW_ADAPTER: GovernedPagePreviewWidgetAdapter;
3312
3370
 
3313
- 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, parseLegacyOrDynamicFormDocument, projectDynamicFormPageEditorChanges, providePraxisDynamicFormMetadata, providePraxisFilterFormMetadata, provideSettingsPanelDynamicForm, ruleBuilderStateToFormLayoutRules, serializeDynamicFormAuthoringDocument, stripLegacyFieldMetadata, toCanonicalDynamicFormConfig, validateDynamicFormAuthoringDocument, validateDynamicFormAuthoringInput, validateDynamicFormPageWidget };
3371
+ 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 };
3314
3372
  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 };