@praxisui/dynamic-form 10.0.0-rc.37 → 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/README.md +10 -0
- package/ai/component-registry.json +22 -17
- package/docs/dynamic-form-authoring-document-semantics.md +31 -2
- 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 +980 -319
- package/package.json +8 -8
- package/src/lib/config-editor/praxis-dynamic-form-config-editor.json-api.md +3 -3
- package/src/lib/praxis-dynamic-form.json-api.md +9 -5
- package/types/praxisui-dynamic-form.d.ts +69 -7
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.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.
|
|
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.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.
|
|
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-
|
|
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, 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:
|
|
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 };
|