@praxisui/dynamic-form 10.0.0-rc.36 → 10.0.0-rc.38

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.36",
3
+ "version": "10.0.0-rc.38",
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.36",
13
- "@praxisui/dynamic-fields": "^10.0.0-rc.36",
14
- "@praxisui/metadata-editor": "^10.0.0-rc.36",
15
- "@praxisui/rich-content": "^10.0.0-rc.36",
16
- "@praxisui/settings-panel": "^10.0.0-rc.36",
17
- "@praxisui/visual-builder": "^10.0.0-rc.36",
18
- "@praxisui/core": "^10.0.0-rc.36",
12
+ "@praxisui/ai": "^10.0.0-rc.38",
13
+ "@praxisui/dynamic-fields": "^10.0.0-rc.38",
14
+ "@praxisui/metadata-editor": "^10.0.0-rc.38",
15
+ "@praxisui/rich-content": "^10.0.0-rc.38",
16
+ "@praxisui/settings-panel": "^10.0.0-rc.38",
17
+ "@praxisui/visual-builder": "^10.0.0-rc.38",
18
+ "@praxisui/core": "^10.0.0-rc.38",
19
19
  "rxjs": "^7.8.0"
20
20
  },
21
21
  "dependencies": {
@@ -57,7 +57,7 @@ Este documento e a referencia canonica da API JSON de praxis-dynamic-form-config
57
57
 
58
58
  - Em Geral → Dados do formulário, `Modo de dados` e `Modo de exibição` são preferências independentes.
59
59
  - `bindings.presentationModeGlobal` reutiliza o input runtime existente: `true` = Apresentação (efetiva somente em `view`), `false` = Campos de formulário, `null`/ausência = Automático, seguindo `layoutPolicy`.
60
- - Em replace-all, omitir a preferência remove o override anterior; `false` deve ser preservado. Não existe um quarto valor em `bindings.mode`.
60
+ - Em replace-all, omitir a preferência remove o override anterior; `false` deve ser preservado. A UI prefere os três modos de operação; documentos nativos também aceitam e preservam `presentation` e `dossier`, já suportados pelo runtime.
61
61
  - 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`.
62
62
  - `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.
63
63
 
@@ -287,7 +287,7 @@ A entrada operacional vem via `SETTINGS_PANEL_DATA` (injetado pelo settings pane
287
287
  | `backConfig` | `BackConfig` | Nao | Active | Configuracao de retorno do CRUD; fallback local quando ausente. |
288
288
  | `formId` | `string` | Nao | Active | Identidade para persistencia auxiliar e chave de painel. |
289
289
  | `componentKeyId` | `string` | Nao | Active | Prioridade para chave de persistencia quando informado. |
290
- | `mode` | `'create' \| 'edit' \| 'view'` | Nao | Active | Inicializa `inputMode`; invalido cai para `create`. |
290
+ | `mode` | `'create' \| 'edit' \| 'view' \| 'presentation' \| 'dossier'` | Nao | Active | Inicializa `inputMode`; invalido cai para `create`. |
291
291
  | `presentationMode` | `boolean` | Nao | Active | Controla exibicao da aba "Modo Apresentacao". |
292
292
  | `runtimeContext` | `DynamicFormRuntimeContext` | Nao | Active | Contexto operacional somente leitura; pode expor `resolvedContract.schemaUrl/submitUrl/submitMethod` para diagnosticos visuais, sem persistencia no documento autoral. |
293
293
 
@@ -318,7 +318,7 @@ A entrada operacional vem via `SETTINGS_PANEL_DATA` (injetado pelo settings pane
318
318
  labelAlign?: 'start' | 'center' | 'end';
319
319
  valueAlign?: 'start' | 'center' | 'end';
320
320
  };
321
- inputsPatch: { mode: 'create' | 'edit' | 'view' };
321
+ inputsPatch: { mode: 'create' | 'edit' | 'view' | 'presentation' | 'dossier' };
322
322
  schemaPrefs: {
323
323
  notifyIfOutdated: 'inline' | 'snackbar' | 'both' | 'none';
324
324
  snoozeMs: number;
@@ -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-08-12"
41
+ last_updated: "2026-10-22"
42
42
  toc: true
43
43
  sidebar: true
44
44
  tags:
@@ -59,6 +59,10 @@ related_components: []
59
59
 
60
60
  Este documento e a referencia canonica da API JSON de praxis-dynamic-form.
61
61
 
62
+ ## Form runtime ownership (breaking beta correction)
63
+
64
+ Every mounted form owns its mutable `GenericCrudService` and editor field/rule context. Replacing a service in an ancestor injector no longer changes the form's client. Configure the form through `resourcePath`, `apiEndpointKey`, `apiUrlEntry`, and `customEndpoints` for a directly mounted form. Shared `HttpClient` interceptors, `API_URL` and infrastructure remain inherited. No new JSON/config field is introduced by this correction. In component tests, replace the local client with `TestBed.overrideComponent(PraxisDynamicForm, { add: { providers: [{ provide: GenericCrudService, useValue: crudMock }] } })` so the i18n provider is retained.
65
+
62
66
  ## Summary
63
67
 
64
68
  - Tipo documental: API reference canonica de contrato JSON.
@@ -70,7 +74,7 @@ Este documento e a referencia canonica da API JSON de praxis-dynamic-form.
70
74
 
71
75
  - Em Geral → Dados do formulário, `Modo de dados` e `Modo de exibição` são preferências independentes.
72
76
  - `bindings.presentationModeGlobal` reutiliza o input runtime existente: `true` = Apresentação (efetiva somente em `view`), `false` = Campos de formulário, `null`/ausência = Automático, seguindo `layoutPolicy`.
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`.
77
+ - Em replace-all, omitir a preferência remove o override anterior; `false` deve ser preservado. A UI prefere os três modos de operação; documentos nativos preservam também `presentation` e `dossier` suportados pelo runtime.
74
78
  - 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
79
  - `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
80
  - `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`.
@@ -278,7 +282,7 @@ of initial values: a contextual `resourceId` never triggers entity hydration.
278
282
  | `config` | `FormConfig` | Conditional | component-input | `normalizeFormConfig(config)` | Contrato principal quando fornecido diretamente pelo host. |
279
283
  | `resourcePath` | `string \| undefined` | Conditional | component-input | `crud.configure(resourcePath)` | Endpoint base para schema e dados remotos. Alternativa canônica: `schemaUrl` explícito. |
280
284
  | `resourceId` | `string \| number \| undefined` | No | component-input | update `pendingEntityId`; hydrate only in `edit/view` | Carrega entidade em modo `edit/view`. Em `create`, pode identificar o item dono de um comando sem iniciar leitura nem bloquear os campos. |
281
- | `mode` | `'create' \| 'edit' \| 'view'` | No | component-input/storage | persistido em `formInputsKey` | Preferência de modo pode ser hidratada do storage. |
285
+ | `mode` | `'create' \| 'edit' \| 'view' \| 'presentation' \| 'dossier'` | No | component-input/storage | persistido em `formInputsKey` | Preferência de modo pode ser hidratada do storage. |
282
286
  | `schemaSource` | `'resource' \| 'filter'` | No | component-input | runtime branch | Seleciona caminho de obtenção de schema quando `schemaUrl` não é informado. |
283
287
  | `schemaUrl` | `string \| null \| undefined` | Conditional | component-input | parsed as `/schemas/filtered` contract | Fonte canônica explícita para inicialização schema-backed sem depender de `resourcePath`. |
284
288
  | `readUrl` | `string \| null \| undefined` | No | component-input | resolved via API origin and `{id}` placeholders | URL concreta de leitura publicada por surface `VIEW`/`READ_PROJECTION`; quando presente, substitui `crud.getById` na hidratação da entidade. |
@@ -623,7 +627,7 @@ No ecossistema Praxis, ele funciona tanto como runtime final quanto como superfi
623
627
  | `config` | `FormConfig` | `{ sections: [] }` | Active | Contrato principal consumido no ciclo inteiro. `sections` é opcional somente para forms schema-driven com grounding explícito (`metadata.source='schema'`, schema metadata ou fonte runtime como `schemaUrl`/`resourcePath`); ausência de layout manual é normalizada internamente como array vazio e permite que `layoutPolicy`/schema materializem agrupamentos. |
624
628
  | `resourcePath` | `string \| undefined` | `undefined` | Active | Habilita carga de schema/dados remotos. Opcional quando `schemaUrl` explícito é fornecido. |
625
629
  | `resourceId` | `string \| number \| undefined` | `undefined` | Active | Carrega entidade no modo `edit/view`; em `create`, funciona apenas como contexto do item e não dispara hidratação. |
626
- | `mode` | `'create' \| 'edit' \| 'view'` | `'create'` | Active | Governa submit, leitura e apresentacao. |
630
+ | `mode` | `'create' \| 'edit' \| 'view' \| 'presentation' \| 'dossier'` | `'create'` | Active | Governa submit, leitura e apresentacao. |
627
631
  | `schemaSource` | `'resource' \| 'filter'` | `'resource'` | Active | Seleciona origem do schema remoto. |
628
632
  | `schemaUrl` | `string \| undefined` | `undefined` | Active | Permite usar schema canonico publicado pelo backend sem heuristica local de path e pode iniciar o fluxo corporativo sem `resourcePath`. |
629
633
  | `readUrl` | `string \| undefined` | `undefined` | Active | Hidrata dados de surfaces de leitura/projecao pelo endpoint publicado, preservando `resourcePath` como recurso dono. |
@@ -641,7 +645,7 @@ No ecossistema Praxis, ele funciona tanto como runtime final quanto como superfi
641
645
  | `enableCustomization` | `boolean` | `false` | Active | Habilita UX de customizacao do layout. |
642
646
  | `formId` | `string \| undefined` | `undefined` | Active | Chave de persistencia e identidade logica. |
643
647
  | `componentInstanceId` | `string \| undefined` | `undefined` | Active | Isola instancias com mesmo `formId`. |
644
- | `configPersistenceStrategy` | `'local-first' \| 'input-first'` | `'local-first'` | Active | Em `input-first`, os inputs fornecidos pelo host, inclusive `mode`, permanecem autoritativos sobre preferencias persistidas da mesma instancia. Combine com `layoutPolicy.persistence='transient'` em commands efemeros para nao carregar nem gravar layout local. |
648
+ | `configPersistenceStrategy` | `'local-first' \| 'input-first' \| 'volatile'` | `'local-first'` | Active | Em `input-first`, os inputs fornecidos pelo host, inclusive `mode`, permanecem autoritativos sobre preferencias persistidas da mesma instancia. Use `volatile` para filhos controlados pela página: não lê, grava nem limpa preferências próprias ou conexão persistida. `layoutPolicy.persistence='transient'` continua governando a persistência do layout gerado. |
645
649
  | `layout` | `FormLayout \| undefined` | `undefined` | Partial | Funciona como override estrutural em parte dos fluxos de layout/editor. |
646
650
  | `generatedLayoutPreset` | `'default' \| 'compactPresentation'` | `'default'` | Active | Usado apenas ao criar a configuracao inicial a partir de schema/metadata; nao reprocessa layouts persistidos ou authorados. |
647
651
  | `layoutPolicy` | `DynamicFormLayoutPolicy \| null` | `null` | Active | Politica opt-in para materializar layout a partir do schema atual. Use `source: 'schema'` com `persistence: 'transient'` para detalhe/read-only e command forms schema-driven sem persistir `sections` geradas nem reabrir configuracao local salva; politicas de host em `config`, como `helpPresentation`, continuam sendo aplicadas ao layout materializado. Em `mode='view'`, `intent: 'detail'` ou `preset: 'compactPresentation'` ativa apresentacao quando `presentationModeGlobal` nao foi informado; use `[presentationModeGlobal]=false` para controles read-only tradicionais. No preset `compactPresentation`, `x-ui.width` explicito empacota campos em linhas de 12 colunas e tem precedencia sobre `detailSummary.columns` por default; campos sem width permanecem full-width, a menos que `detailSummary.columns`/`responsiveColumns` declare a densidade do resumo. Use `detailSummary.widthPrecedence='summary'` quando a densidade do resumo read-only deve sobrescrever `x-ui.width` apenas nessa surface compacta. No preset `groupedCommand`, `groupedCommand.orphanFieldExpansion` controla linhas logicas com um unico campo: `medium-and-wide` (default) expande spans 6/8, `preserve` mantem o width publicado e `all` tambem expande campos compactos. `groupedCommand.partialRowStrategy` usa `preserve` por default; `fill-compatible` particiona o grupo nas linhas visuais depois de resolver visibilidade responsiva, CSS `order` e wrap em cada breakpoint/container, projeta cada linha parcial elegivel em spans canônicos que completam 12 colunas e mapeia o resultado de volta as colunas authoradas apenas para renderizacao, sem alterar `x-ui.width`, `sections` ou o documento de authoring. Um singleton elegivel criado por wrap pode preencher sua linha visual; controles compactos, uploads e tipos desconhecidos preservam seus spans. `groupedCommand.contextFields` identifica campos schema-backed já hidratados pela surface: eles permanecem no `FormGroup` e no payload, mas não renderizam controles redundantes. Use `responsiveColumns`, por exemplo `{ lg: 3, md: 2, sm: 1 }`, para drawers, side sheets e painéis corporativos estreitos sem copiar `FormConfig.sections` locais. `schemaType` e `schemaOperation` sao validados contra `schemaUrl` quando a URL declara esses parametros. |
@@ -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, Breakpoint, DomainRuleRequestOptions, DomainRuleService, DomainRuleMaterialization, SchemaIdParams, CompiledDynamicFormSchema, 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, 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';
@@ -591,7 +591,7 @@ interface DynamicFormSchemaPrefsSnapshot {
591
591
  }
592
592
  interface DynamicFormContextSnapshot {
593
593
  backConfig?: BackConfig;
594
- presentation?: DynamicFormPresentationSnapshot;
594
+ presentation?: DynamicFormPresentationSnapshot | null;
595
595
  schemaPrefs?: DynamicFormSchemaPrefsSnapshot;
596
596
  }
597
597
  interface DynamicFormAuthoringDocument extends EditorDocument<FormConfig, DynamicFormBindings> {
@@ -854,7 +854,7 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
854
854
  /** Identifier for persisting layouts */
855
855
  formId?: string;
856
856
  componentInstanceId?: string;
857
- configPersistenceStrategy: 'local-first' | 'input-first';
857
+ configPersistenceStrategy: 'local-first' | 'input-first' | 'volatile';
858
858
  /** Optional layout to use instead of generated one */
859
859
  layout?: FormLayout;
860
860
  /**
@@ -1039,6 +1039,10 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
1039
1039
  private schemaCache;
1040
1040
  private lastSchemaMeta?;
1041
1041
  private readonly schemaMetaPersistenceQueues;
1042
+ private persistenceContextEpoch;
1043
+ private persistenceContextDestroyed;
1044
+ /** Fence delayed work; requests already sent are not retroactively canceled. */
1045
+ private persistenceGuard;
1042
1046
  private readonly formConfigPersistenceQueues;
1043
1047
  private readonly formConfigPersistenceGenerations;
1044
1048
  private readonly formConfigConflictBlockThrough;
@@ -1870,6 +1874,8 @@ declare class PraxisDynamicFormConfigEditor implements SettingsValueProvider, On
1870
1874
  };
1871
1875
  private destroy$;
1872
1876
  private hasProcessedInitialRuleState;
1877
+ ruleConversionFailed: boolean;
1878
+ private readonly jsonLogic;
1873
1879
  private jsonEditorIsValid;
1874
1880
  private globalActionValidationIssues;
1875
1881
  private readonly i18n;
@@ -1953,6 +1959,7 @@ declare class PraxisDynamicFormConfigEditor implements SettingsValueProvider, On
1953
1959
  getRuleDiagnosticDetails(diagnostic: FormRuleDiagnostics): string[];
1954
1960
  private getRulePropertyIssueNames;
1955
1961
  private markLlmRuleAccepted;
1962
+ private projectBuilderRules;
1956
1963
  private refreshRuleDiagnostics;
1957
1964
  get jsonDocument(): DynamicFormAuthoringDocument;
1958
1965
  onBackConfigChange(): void;
@@ -2097,6 +2104,7 @@ declare class PraxisFilterFormWidgetConfigEditor implements SettingsValueProvide
2097
2104
  private childBusy;
2098
2105
  private schemaLoading;
2099
2106
  private resourcePathDraft?;
2107
+ private selectedCatalogResource;
2100
2108
  private committedBaselineDocument?;
2101
2109
  private readonly crudService;
2102
2110
  private readonly resourceDiscovery;
@@ -2105,6 +2113,7 @@ declare class PraxisFilterFormWidgetConfigEditor implements SettingsValueProvide
2105
2113
  get effectiveEndpointKey(): ApiEndpoint | undefined;
2106
2114
  get effectiveApiUrlEntry(): ApiUrlEntry | null | undefined;
2107
2115
  onResourceQuickConnect(resourcePath: string): void;
2116
+ onCatalogResourceSelected(entry: DiscoveredResourceOption | null): void;
2108
2117
  onResourceQuickClear(): void;
2109
2118
  private updateDirtyState;
2110
2119
  ngAfterViewInit(): void;
@@ -2117,6 +2126,8 @@ declare class PraxisFilterFormWidgetConfigEditor implements SettingsValueProvide
2117
2126
  private applyBaselineDocumentToChildEditor;
2118
2127
  private applyDraftDocumentToChildEditor;
2119
2128
  private loadFilterSchemaFieldsIfNeeded;
2129
+ private extractCatalogFallbackFields;
2130
+ private applyLoadedFilterFieldMetadata;
2120
2131
  private buildDiscoveryOptions;
2121
2132
  private buildValue;
2122
2133
  private createDocumentFromInputs;
@@ -2238,6 +2249,10 @@ declare class LayoutEditorComponent implements OnInit {
2238
2249
  get layoutSections(): FormSection[];
2239
2250
  canApplyAll(): boolean;
2240
2251
  applyGapToAll(): void;
2252
+ canCalibrateFieldsFromSemantics(): boolean;
2253
+ calibrateAllFieldsFromSemantics(): void;
2254
+ canOrganizeSectionsFromSemantics(): boolean;
2255
+ organizeSectionsFromSemantics(): void;
2241
2256
  ngOnInit(): void;
2242
2257
  handleKeydown(event: KeyboardEvent): void;
2243
2258
  /**
@@ -2472,7 +2487,7 @@ interface PraxisDynamicFormWidgetEditorInputs {
2472
2487
  apiUrlEntry?: ApiUrlEntry | null;
2473
2488
  schemaSource?: 'resource' | 'filter';
2474
2489
  layoutPolicy?: DynamicFormLayoutPolicy | null;
2475
- configPersistenceStrategy?: 'local-first' | 'input-first';
2490
+ configPersistenceStrategy?: 'local-first' | 'input-first' | 'volatile';
2476
2491
  mode?: DynamicFormMode;
2477
2492
  emptyState?: PraxisDynamicFormEmptyState | null;
2478
2493
  presentationModeGlobal?: boolean | null;
@@ -2513,12 +2528,16 @@ declare class PraxisDynamicFormWidgetConfigEditor implements SettingsValueProvid
2513
2528
  private committedBaselineDocument?;
2514
2529
  private sourceDraft?;
2515
2530
  private resourcePathDraft?;
2531
+ selectedCatalogResource: DiscoveredResourceOption | null;
2516
2532
  private optionalInject;
2517
- get configurationSource(): 'local-first' | 'input-first';
2533
+ get configurationSource(): 'local-first' | 'input-first' | 'volatile';
2518
2534
  get effectiveResourcePath(): string;
2519
2535
  get effectiveEndpointKey(): ApiEndpoint | undefined;
2520
2536
  get effectiveApiUrlEntry(): ApiUrlEntry | null | undefined;
2521
2537
  get effectiveDiscoveryIntent(): 'crud' | 'filter';
2538
+ get hasReadOnlyModeWarning(): boolean;
2539
+ switchToReadOnlyViewMode(): void;
2540
+ onCatalogResourceSelected(resource: DiscoveredResourceOption | null): void;
2522
2541
  changeConfigurationSource(value: string): void;
2523
2542
  onResourceQuickConnect(resourcePath: string): void;
2524
2543
  onResourceQuickClear(): void;
@@ -2535,6 +2554,8 @@ declare class PraxisDynamicFormWidgetConfigEditor implements SettingsValueProvid
2535
2554
  private applyBaselineDocumentToChildEditor;
2536
2555
  private applyDraftDocumentToChildEditor;
2537
2556
  private loadResourceSchemaFieldsIfNeeded;
2557
+ private extractCatalogFallbackFields;
2558
+ private applyFieldMetadataHydration;
2538
2559
  private buildDiscoveryOptions;
2539
2560
  private buildValue;
2540
2561
  private createDocumentFromInputs;
@@ -2649,6 +2670,7 @@ declare function applyVisibilityRules(rules: FormLayoutRule[], data: any): Recor
2649
2670
  /**
2650
2671
  * Converts a RuleBuilderState produced by the visual builder into
2651
2672
  * an array of FormLayoutRule objects understood by the dynamic form.
2673
+ * Throws when a referenced condition graph cannot be serialized without losing semantics.
2652
2674
  */
2653
2675
  declare function ruleBuilderStateToFormLayoutRules(state: RuleBuilderState | null | undefined): FormLayoutRule[];
2654
2676
  /**
@@ -3230,7 +3252,47 @@ declare const PRAXIS_FILTER_FORM_AUTHORING_PROJECTION: {
3230
3252
  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"];
3231
3253
  readonly roundTripRequirements: readonly ["strip-undefined", "stable-field-order", "preserve-local-field-source", "preserve-section-row-column-ids"];
3232
3254
  };
3233
- declare const PRAXIS_FILTER_FORM_AUTHORING_MANIFEST: _praxisui_core.ComponentAuthoringManifest;
3255
+ declare const PRAXIS_FILTER_FORM_AUTHORING_MANIFEST: {
3256
+ runtimeInputs: _praxisui_core.ManifestInput[];
3257
+ schemaVersion: string;
3258
+ componentId: string;
3259
+ ownerPackage: string;
3260
+ configSchemaId: string;
3261
+ manifestVersion: string;
3262
+ editableTargets: _praxisui_core.ManifestTarget[];
3263
+ operations: _praxisui_core.ManifestOperation[];
3264
+ validators: _praxisui_core.ManifestValidator[];
3265
+ roundTripRequirements?: string[];
3266
+ presentationAffordances?: _praxisui_core.ManifestPresentationAffordanceCatalog;
3267
+ examples: _praxisui_core.ManifestExample[];
3268
+ controlProfiles?: _praxisui_core.ManifestControlProfile[];
3269
+ };
3270
+
3271
+ /** Reconstruct raw native authorship. Normalized editor/runtime defaults are never the source. */
3272
+ declare function decodeDynamicFormPageInputs(value: unknown): {
3273
+ document: DynamicFormAuthoringDocument | null;
3274
+ diagnostics: EditorDiagnostic[];
3275
+ };
3276
+ /** Owner callback for Core admission; no component loading or second config authority. */
3277
+ declare function validateDynamicFormPageWidget(widget: WidgetInstance): readonly {
3278
+ code: string;
3279
+ path: string;
3280
+ }[];
3281
+ /** Inverse native projection. Explicit unrepresentable authoring blocks fail instead of being filtered. */
3282
+ declare function encodeDynamicFormPageInputs(value: unknown): {
3283
+ inputs: Record<string, unknown> | null;
3284
+ diagnostics: EditorDiagnostic[];
3285
+ };
3286
+ /** Persist only explicit deltas from the mounted native editor; bindings/context stay pinned to the seed. */
3287
+ declare function projectDynamicFormPageEditorChanges(authoredInputs: unknown, editorBaseline: unknown, editorValue: unknown): {
3288
+ inputs: Record<string, unknown> | null;
3289
+ diagnostics: EditorDiagnostic[];
3290
+ };
3291
+ /** Derive execution-only identity and disable independent preferences. Never persist this projection. */
3292
+ declare function materializeDynamicFormPageRuntimeInputs(value: unknown, pageId: string, widgetKey: string): {
3293
+ inputs: Record<string, unknown> | null;
3294
+ diagnostics: EditorDiagnostic[];
3295
+ };
3234
3296
 
3235
- 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 };
3297
+ 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, decodeDynamicFormPageInputs, encodeDynamicFormPageInputs, formLayoutRulesToBuilderState, getFormAiCatalog, getFormCapabilities, getFormEnum, isRuleSatisfied, materializeDynamicFormPageRuntimeInputs, normalizeDateArrays, normalizeDynamicFormAuthoringDocument, parseLegacyOrDynamicFormDocument, projectDynamicFormPageEditorChanges, providePraxisDynamicFormMetadata, providePraxisFilterFormMetadata, provideSettingsPanelDynamicForm, ruleBuilderStateToFormLayoutRules, serializeDynamicFormAuthoringDocument, stripLegacyFieldMetadata, toCanonicalDynamicFormConfig, validateDynamicFormAuthoringDocument, validateDynamicFormAuthoringInput, validateDynamicFormPageWidget };
3236
3298
  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 };