@praxisui/dynamic-form 10.0.0-rc.37 → 10.0.0-rc.39
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/README.md +10 -0
- package/ai/component-registry.json +22 -17
- package/docs/dynamic-form-authoring-document-semantics.md +68 -2
- package/docs/evidence/form-authoring-635-20261023/final-review.md +46 -0
- package/docs/evidence/form-authoring-635-20261023/independent-review-vb-form.md +50 -0
- package/docs/evidence/form-authoring-635-20261023/validation.md +76 -0
- package/docs/evidence/p1-authoring-20261022/validation.md +134 -0
- package/docs/governed-page-widget-adapter.md +58 -0
- package/fesm2022/praxisui-dynamic-form.mjs +1304 -574
- package/package.json +8 -8
- package/src/lib/config-editor/praxis-dynamic-form-config-editor.json-api.md +11 -3
- package/src/lib/praxis-dynamic-form.json-api.md +9 -5
- package/types/praxisui-dynamic-form.d.ts +84 -11
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@praxisui/dynamic-form",
|
|
3
|
-
"version": "10.0.0-rc.
|
|
3
|
+
"version": "10.0.0-rc.39",
|
|
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.
|
|
13
|
-
"@praxisui/dynamic-fields": "^10.0.0-rc.
|
|
14
|
-
"@praxisui/metadata-editor": "^10.0.0-rc.
|
|
15
|
-
"@praxisui/rich-content": "^10.0.0-rc.
|
|
16
|
-
"@praxisui/settings-panel": "^10.0.0-rc.
|
|
17
|
-
"@praxisui/visual-builder": "^10.0.0-rc.
|
|
18
|
-
"@praxisui/core": "^10.0.0-rc.
|
|
12
|
+
"@praxisui/ai": "^10.0.0-rc.39",
|
|
13
|
+
"@praxisui/dynamic-fields": "^10.0.0-rc.39",
|
|
14
|
+
"@praxisui/metadata-editor": "^10.0.0-rc.39",
|
|
15
|
+
"@praxisui/rich-content": "^10.0.0-rc.39",
|
|
16
|
+
"@praxisui/settings-panel": "^10.0.0-rc.39",
|
|
17
|
+
"@praxisui/visual-builder": "^10.0.0-rc.39",
|
|
18
|
+
"@praxisui/core": "^10.0.0-rc.39",
|
|
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.
|
|
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
|
|
|
@@ -226,6 +226,14 @@ contrato explicito -> aliases legados (quando suportados) -> defaults internos -
|
|
|
226
226
|
|
|
227
227
|
Campos e aliases preservados do documento anterior devem convergir progressivamente para paths canonicos declarados.
|
|
228
228
|
|
|
229
|
+
The Rules tab separates structural completeness, property editing, sample-data
|
|
230
|
+
simulation, and form/runtime diagnostics. Review both branches and every effect
|
|
231
|
+
before applying. A successful preview does not validate target availability or
|
|
232
|
+
grant field access. Presentation rules and conditional command rules retain
|
|
233
|
+
separate channels. JSON rule replacement and Reset refresh the visual draft and
|
|
234
|
+
structured effects panel; a valid stale visual projection cannot override the
|
|
235
|
+
canonical `formRules` list. Clearing that list clears residual visual state.
|
|
236
|
+
|
|
229
237
|
### Precedence rules
|
|
230
238
|
|
|
231
239
|
Quando houver conflito entre alias e path canonico, priorizar path canonico e manter alias apenas para backward compatibility.
|
|
@@ -287,7 +295,7 @@ A entrada operacional vem via `SETTINGS_PANEL_DATA` (injetado pelo settings pane
|
|
|
287
295
|
| `backConfig` | `BackConfig` | Nao | Active | Configuracao de retorno do CRUD; fallback local quando ausente. |
|
|
288
296
|
| `formId` | `string` | Nao | Active | Identidade para persistencia auxiliar e chave de painel. |
|
|
289
297
|
| `componentKeyId` | `string` | Nao | Active | Prioridade para chave de persistencia quando informado. |
|
|
290
|
-
| `mode` | `'create' \| 'edit' \| 'view'` | Nao | Active | Inicializa `inputMode`; invalido cai para `create`. |
|
|
298
|
+
| `mode` | `'create' \| 'edit' \| 'view' \| 'presentation' \| 'dossier'` | Nao | Active | Inicializa `inputMode`; invalido cai para `create`. |
|
|
291
299
|
| `presentationMode` | `boolean` | Nao | Active | Controla exibicao da aba "Modo Apresentacao". |
|
|
292
300
|
| `runtimeContext` | `DynamicFormRuntimeContext` | Nao | Active | Contexto operacional somente leitura; pode expor `resolvedContract.schemaUrl/submitUrl/submitMethod` para diagnosticos visuais, sem persistencia no documento autoral. |
|
|
293
301
|
|
|
@@ -318,7 +326,7 @@ A entrada operacional vem via `SETTINGS_PANEL_DATA` (injetado pelo settings pane
|
|
|
318
326
|
labelAlign?: 'start' | 'center' | 'end';
|
|
319
327
|
valueAlign?: 'start' | 'center' | 'end';
|
|
320
328
|
};
|
|
321
|
-
inputsPatch: { mode: 'create' | 'edit' | 'view' };
|
|
329
|
+
inputsPatch: { mode: 'create' | 'edit' | 'view' | 'presentation' | 'dossier' };
|
|
322
330
|
schemaPrefs: {
|
|
323
331
|
notifyIfOutdated: 'inline' | 'snackbar' | 'both' | 'none';
|
|
324
332
|
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-
|
|
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.
|
|
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.
|
|
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, 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';
|
|
@@ -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> {
|
|
@@ -797,7 +797,10 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
|
797
797
|
*/
|
|
798
798
|
editorialContext: Record<string, unknown> | null;
|
|
799
799
|
mode: DynamicFormMode;
|
|
800
|
-
|
|
800
|
+
private effectiveConfig;
|
|
801
|
+
private configAssignment;
|
|
802
|
+
get config(): FormConfig;
|
|
803
|
+
set config(value: FormConfig);
|
|
801
804
|
private hostConfigInputProvided;
|
|
802
805
|
/** Optional host-level overrides for the rendered form action bar. */
|
|
803
806
|
actions?: FormConfig['actions'] | null;
|
|
@@ -854,7 +857,7 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
|
854
857
|
/** Identifier for persisting layouts */
|
|
855
858
|
formId?: string;
|
|
856
859
|
componentInstanceId?: string;
|
|
857
|
-
configPersistenceStrategy: 'local-first' | 'input-first';
|
|
860
|
+
configPersistenceStrategy: 'local-first' | 'input-first' | 'volatile';
|
|
858
861
|
/** Optional layout to use instead of generated one */
|
|
859
862
|
layout?: FormLayout;
|
|
860
863
|
/**
|
|
@@ -1039,6 +1042,10 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
|
1039
1042
|
private schemaCache;
|
|
1040
1043
|
private lastSchemaMeta?;
|
|
1041
1044
|
private readonly schemaMetaPersistenceQueues;
|
|
1045
|
+
private persistenceContextEpoch;
|
|
1046
|
+
private persistenceContextDestroyed;
|
|
1047
|
+
/** Fence delayed work; requests already sent are not retroactively canceled. */
|
|
1048
|
+
private persistenceGuard;
|
|
1042
1049
|
private readonly formConfigPersistenceQueues;
|
|
1043
1050
|
private readonly formConfigPersistenceGenerations;
|
|
1044
1051
|
private readonly formConfigConflictBlockThrough;
|
|
@@ -1870,7 +1877,11 @@ declare class PraxisDynamicFormConfigEditor implements SettingsValueProvider, On
|
|
|
1870
1877
|
};
|
|
1871
1878
|
private destroy$;
|
|
1872
1879
|
private hasProcessedInitialRuleState;
|
|
1880
|
+
ruleConversionFailed: boolean;
|
|
1881
|
+
private readonly jsonLogic;
|
|
1882
|
+
private readonly cascadeRulesService;
|
|
1873
1883
|
private jsonEditorIsValid;
|
|
1884
|
+
private cascadeDraftIsValid;
|
|
1874
1885
|
private globalActionValidationIssues;
|
|
1875
1886
|
private readonly i18n;
|
|
1876
1887
|
readonly globalActionCatalog: GlobalActionCatalogEntry[];
|
|
@@ -1883,7 +1894,7 @@ declare class PraxisDynamicFormConfigEditor implements SettingsValueProvider, On
|
|
|
1883
1894
|
isValid$: BehaviorSubject<boolean>;
|
|
1884
1895
|
isBusy$: BehaviorSubject<boolean>;
|
|
1885
1896
|
private lastRulesSignature;
|
|
1886
|
-
private
|
|
1897
|
+
private supersededRuleStateSignature;
|
|
1887
1898
|
private readonly DEBUG;
|
|
1888
1899
|
private debugLog;
|
|
1889
1900
|
get configTabOptions(): ConfigEditorTabOption[];
|
|
@@ -1901,6 +1912,8 @@ declare class PraxisDynamicFormConfigEditor implements SettingsValueProvider, On
|
|
|
1901
1912
|
onJsonValidationChange(result: JsonValidationResult): void;
|
|
1902
1913
|
onJsonEditorEvent(_event: JsonEditorEvent): void;
|
|
1903
1914
|
onConfigChange(newConfig: FormConfig): void;
|
|
1915
|
+
onCascadeValidChange(valid: boolean): void;
|
|
1916
|
+
private isCascadeGraphValid;
|
|
1904
1917
|
private updateValidityState;
|
|
1905
1918
|
private collectGlobalActionValidationIssues;
|
|
1906
1919
|
private collectGlobalActionValidationTargets;
|
|
@@ -1953,6 +1966,7 @@ declare class PraxisDynamicFormConfigEditor implements SettingsValueProvider, On
|
|
|
1953
1966
|
getRuleDiagnosticDetails(diagnostic: FormRuleDiagnostics): string[];
|
|
1954
1967
|
private getRulePropertyIssueNames;
|
|
1955
1968
|
private markLlmRuleAccepted;
|
|
1969
|
+
private projectBuilderRules;
|
|
1956
1970
|
private refreshRuleDiagnostics;
|
|
1957
1971
|
get jsonDocument(): DynamicFormAuthoringDocument;
|
|
1958
1972
|
onBackConfigChange(): void;
|
|
@@ -1984,6 +1998,7 @@ declare class PraxisDynamicFormConfigEditor implements SettingsValueProvider, On
|
|
|
1984
1998
|
onCascadeApply(patch: Record<string, Partial<FieldDefinition>>): void;
|
|
1985
1999
|
private syncCascadeManagerFields;
|
|
1986
2000
|
private stripLegacy;
|
|
2001
|
+
private hydrateRuleDraft;
|
|
1987
2002
|
private computeRulesSignature;
|
|
1988
2003
|
restoreHintsDefaults(): void;
|
|
1989
2004
|
private loadPrefsFromStorage;
|
|
@@ -2097,6 +2112,7 @@ declare class PraxisFilterFormWidgetConfigEditor implements SettingsValueProvide
|
|
|
2097
2112
|
private childBusy;
|
|
2098
2113
|
private schemaLoading;
|
|
2099
2114
|
private resourcePathDraft?;
|
|
2115
|
+
private selectedCatalogResource;
|
|
2100
2116
|
private committedBaselineDocument?;
|
|
2101
2117
|
private readonly crudService;
|
|
2102
2118
|
private readonly resourceDiscovery;
|
|
@@ -2105,6 +2121,7 @@ declare class PraxisFilterFormWidgetConfigEditor implements SettingsValueProvide
|
|
|
2105
2121
|
get effectiveEndpointKey(): ApiEndpoint | undefined;
|
|
2106
2122
|
get effectiveApiUrlEntry(): ApiUrlEntry | null | undefined;
|
|
2107
2123
|
onResourceQuickConnect(resourcePath: string): void;
|
|
2124
|
+
onCatalogResourceSelected(entry: DiscoveredResourceOption | null): void;
|
|
2108
2125
|
onResourceQuickClear(): void;
|
|
2109
2126
|
private updateDirtyState;
|
|
2110
2127
|
ngAfterViewInit(): void;
|
|
@@ -2117,6 +2134,8 @@ declare class PraxisFilterFormWidgetConfigEditor implements SettingsValueProvide
|
|
|
2117
2134
|
private applyBaselineDocumentToChildEditor;
|
|
2118
2135
|
private applyDraftDocumentToChildEditor;
|
|
2119
2136
|
private loadFilterSchemaFieldsIfNeeded;
|
|
2137
|
+
private extractCatalogFallbackFields;
|
|
2138
|
+
private applyLoadedFilterFieldMetadata;
|
|
2120
2139
|
private buildDiscoveryOptions;
|
|
2121
2140
|
private buildValue;
|
|
2122
2141
|
private createDocumentFromInputs;
|
|
@@ -2238,6 +2257,10 @@ declare class LayoutEditorComponent implements OnInit {
|
|
|
2238
2257
|
get layoutSections(): FormSection[];
|
|
2239
2258
|
canApplyAll(): boolean;
|
|
2240
2259
|
applyGapToAll(): void;
|
|
2260
|
+
canCalibrateFieldsFromSemantics(): boolean;
|
|
2261
|
+
calibrateAllFieldsFromSemantics(): void;
|
|
2262
|
+
canOrganizeSectionsFromSemantics(): boolean;
|
|
2263
|
+
organizeSectionsFromSemantics(): void;
|
|
2241
2264
|
ngOnInit(): void;
|
|
2242
2265
|
handleKeydown(event: KeyboardEvent): void;
|
|
2243
2266
|
/**
|
|
@@ -2472,7 +2495,7 @@ interface PraxisDynamicFormWidgetEditorInputs {
|
|
|
2472
2495
|
apiUrlEntry?: ApiUrlEntry | null;
|
|
2473
2496
|
schemaSource?: 'resource' | 'filter';
|
|
2474
2497
|
layoutPolicy?: DynamicFormLayoutPolicy | null;
|
|
2475
|
-
configPersistenceStrategy?: 'local-first' | 'input-first';
|
|
2498
|
+
configPersistenceStrategy?: 'local-first' | 'input-first' | 'volatile';
|
|
2476
2499
|
mode?: DynamicFormMode;
|
|
2477
2500
|
emptyState?: PraxisDynamicFormEmptyState | null;
|
|
2478
2501
|
presentationModeGlobal?: boolean | null;
|
|
@@ -2513,12 +2536,16 @@ declare class PraxisDynamicFormWidgetConfigEditor implements SettingsValueProvid
|
|
|
2513
2536
|
private committedBaselineDocument?;
|
|
2514
2537
|
private sourceDraft?;
|
|
2515
2538
|
private resourcePathDraft?;
|
|
2539
|
+
selectedCatalogResource: DiscoveredResourceOption | null;
|
|
2516
2540
|
private optionalInject;
|
|
2517
|
-
get configurationSource(): 'local-first' | 'input-first';
|
|
2541
|
+
get configurationSource(): 'local-first' | 'input-first' | 'volatile';
|
|
2518
2542
|
get effectiveResourcePath(): string;
|
|
2519
2543
|
get effectiveEndpointKey(): ApiEndpoint | undefined;
|
|
2520
2544
|
get effectiveApiUrlEntry(): ApiUrlEntry | null | undefined;
|
|
2521
2545
|
get effectiveDiscoveryIntent(): 'crud' | 'filter';
|
|
2546
|
+
get hasReadOnlyModeWarning(): boolean;
|
|
2547
|
+
switchToReadOnlyViewMode(): void;
|
|
2548
|
+
onCatalogResourceSelected(resource: DiscoveredResourceOption | null): void;
|
|
2522
2549
|
changeConfigurationSource(value: string): void;
|
|
2523
2550
|
onResourceQuickConnect(resourcePath: string): void;
|
|
2524
2551
|
onResourceQuickClear(): void;
|
|
@@ -2535,6 +2562,8 @@ declare class PraxisDynamicFormWidgetConfigEditor implements SettingsValueProvid
|
|
|
2535
2562
|
private applyBaselineDocumentToChildEditor;
|
|
2536
2563
|
private applyDraftDocumentToChildEditor;
|
|
2537
2564
|
private loadResourceSchemaFieldsIfNeeded;
|
|
2565
|
+
private extractCatalogFallbackFields;
|
|
2566
|
+
private applyFieldMetadataHydration;
|
|
2538
2567
|
private buildDiscoveryOptions;
|
|
2539
2568
|
private buildValue;
|
|
2540
2569
|
private createDocumentFromInputs;
|
|
@@ -2649,14 +2678,15 @@ declare function applyVisibilityRules(rules: FormLayoutRule[], data: any): Recor
|
|
|
2649
2678
|
/**
|
|
2650
2679
|
* Converts a RuleBuilderState produced by the visual builder into
|
|
2651
2680
|
* an array of FormLayoutRule objects understood by the dynamic form.
|
|
2681
|
+
* Throws when a referenced condition graph cannot be serialized without losing semantics.
|
|
2652
2682
|
*/
|
|
2653
2683
|
declare function ruleBuilderStateToFormLayoutRules(state: RuleBuilderState | null | undefined): FormLayoutRule[];
|
|
2654
2684
|
/**
|
|
2655
2685
|
* Converts an array of FormLayoutRule back into a RuleBuilderState
|
|
2656
2686
|
* so that the visual builder can display the saved rules.
|
|
2657
2687
|
*
|
|
2658
|
-
*
|
|
2659
|
-
*
|
|
2688
|
+
* Every canonical effect reopens as a propertyRule, with all targets and both
|
|
2689
|
+
* branches intact. Conditions outside the visual vocabulary stay inline.
|
|
2660
2690
|
*/
|
|
2661
2691
|
declare function formLayoutRulesToBuilderState(rules: FormLayoutRule[] | null | undefined): RuleBuilderState;
|
|
2662
2692
|
|
|
@@ -3230,7 +3260,50 @@ declare const PRAXIS_FILTER_FORM_AUTHORING_PROJECTION: {
|
|
|
3230
3260
|
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
3261
|
readonly roundTripRequirements: readonly ["strip-undefined", "stable-field-order", "preserve-local-field-source", "preserve-section-row-column-ids"];
|
|
3232
3262
|
};
|
|
3233
|
-
declare const PRAXIS_FILTER_FORM_AUTHORING_MANIFEST:
|
|
3263
|
+
declare const PRAXIS_FILTER_FORM_AUTHORING_MANIFEST: {
|
|
3264
|
+
runtimeInputs: _praxisui_core.ManifestInput[];
|
|
3265
|
+
schemaVersion: string;
|
|
3266
|
+
componentId: string;
|
|
3267
|
+
ownerPackage: string;
|
|
3268
|
+
configSchemaId: string;
|
|
3269
|
+
manifestVersion: string;
|
|
3270
|
+
editableTargets: _praxisui_core.ManifestTarget[];
|
|
3271
|
+
operations: _praxisui_core.ManifestOperation[];
|
|
3272
|
+
validators: _praxisui_core.ManifestValidator[];
|
|
3273
|
+
roundTripRequirements?: string[];
|
|
3274
|
+
presentationAffordances?: _praxisui_core.ManifestPresentationAffordanceCatalog;
|
|
3275
|
+
examples: _praxisui_core.ManifestExample[];
|
|
3276
|
+
controlProfiles?: _praxisui_core.ManifestControlProfile[];
|
|
3277
|
+
};
|
|
3278
|
+
|
|
3279
|
+
/** Reconstruct raw native authorship. Normalized editor/runtime defaults are never the source. */
|
|
3280
|
+
declare function decodeDynamicFormPageInputs(value: unknown): {
|
|
3281
|
+
document: DynamicFormAuthoringDocument | null;
|
|
3282
|
+
diagnostics: EditorDiagnostic[];
|
|
3283
|
+
};
|
|
3284
|
+
/** Owner callback for Core admission; no component loading or second config authority. */
|
|
3285
|
+
declare function validateDynamicFormPageWidget(widget: WidgetInstance): readonly {
|
|
3286
|
+
code: string;
|
|
3287
|
+
path: string;
|
|
3288
|
+
}[];
|
|
3289
|
+
/** Inverse native projection. Explicit unrepresentable authoring blocks fail instead of being filtered. */
|
|
3290
|
+
declare function encodeDynamicFormPageInputs(value: unknown): {
|
|
3291
|
+
inputs: Record<string, unknown> | null;
|
|
3292
|
+
diagnostics: EditorDiagnostic[];
|
|
3293
|
+
};
|
|
3294
|
+
/** Persist only explicit deltas from the mounted native editor; bindings/context stay pinned to the seed. */
|
|
3295
|
+
declare function projectDynamicFormPageEditorChanges(authoredInputs: unknown, editorBaseline: unknown, editorValue: unknown): {
|
|
3296
|
+
inputs: Record<string, unknown> | null;
|
|
3297
|
+
diagnostics: EditorDiagnostic[];
|
|
3298
|
+
};
|
|
3299
|
+
/** Derive execution-only identity and disable independent preferences. Never persist this projection. */
|
|
3300
|
+
declare function materializeDynamicFormPageRuntimeInputs(value: unknown, pageId: string, widgetKey: string, options?: {
|
|
3301
|
+
preview?: boolean;
|
|
3302
|
+
}): {
|
|
3303
|
+
inputs: Record<string, unknown> | null;
|
|
3304
|
+
diagnostics: EditorDiagnostic[];
|
|
3305
|
+
};
|
|
3306
|
+
declare const DYNAMIC_FORM_GOVERNED_PAGE_PREVIEW_ADAPTER: GovernedPagePreviewWidgetAdapter;
|
|
3234
3307
|
|
|
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 };
|
|
3308
|
+
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 };
|
|
3236
3309
|
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 };
|