@praxisui/dynamic-form 9.0.0-beta.9 → 9.0.0-rc.1
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 +210 -2
- package/ai/component-registry.json +15640 -0
- package/docs/dynamic-form-visual-builder-parity-audit.md +268 -0
- package/docs/schema-driven-layout-materialization-rfc.md +498 -0
- package/fesm2022/{praxisui-dynamic-form-dynamic-form-agentic-authoring-turn-flow-CmFfx-VR.mjs → praxisui-dynamic-form-dynamic-form-agentic-authoring-turn-flow-w9V0aQ9B.mjs} +205 -22
- package/fesm2022/praxisui-dynamic-form.mjs +4902 -1011
- package/package.json +13 -9
- package/src/lib/config-editor/praxis-dynamic-form-config-editor.json-api.md +8 -6
- package/src/lib/praxis-dynamic-form.json-api.md +42 -9
- package/types/praxisui-dynamic-form.d.ts +168 -31
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@praxisui/dynamic-form",
|
|
3
|
-
"version": "9.0.0-
|
|
3
|
+
"version": "9.0.0-rc.1",
|
|
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": "^9.0.0-
|
|
13
|
-
"@praxisui/dynamic-fields": "^9.0.0-
|
|
14
|
-
"@praxisui/metadata-editor": "^9.0.0-
|
|
15
|
-
"@praxisui/rich-content": "^9.0.0-
|
|
16
|
-
"@praxisui/settings-panel": "^9.0.0-
|
|
17
|
-
"@praxisui/visual-builder": "^9.0.0-
|
|
18
|
-
"@praxisui/core": "^9.0.0-
|
|
12
|
+
"@praxisui/ai": "^9.0.0-rc.1",
|
|
13
|
+
"@praxisui/dynamic-fields": "^9.0.0-rc.1",
|
|
14
|
+
"@praxisui/metadata-editor": "^9.0.0-rc.1",
|
|
15
|
+
"@praxisui/rich-content": "^9.0.0-rc.1",
|
|
16
|
+
"@praxisui/settings-panel": "^9.0.0-rc.1",
|
|
17
|
+
"@praxisui/visual-builder": "^9.0.0-rc.1",
|
|
18
|
+
"@praxisui/core": "^9.0.0-rc.1",
|
|
19
19
|
"rxjs": "^7.8.0"
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
"keywords": [
|
|
31
31
|
"angular",
|
|
32
32
|
"praxisui",
|
|
33
|
+
"praxis",
|
|
33
34
|
"dynamic-form",
|
|
34
35
|
"metadata",
|
|
35
36
|
"schema-driven",
|
|
@@ -46,7 +47,10 @@
|
|
|
46
47
|
".": {
|
|
47
48
|
"types": "./types/praxisui-dynamic-form.d.ts",
|
|
48
49
|
"default": "./fesm2022/praxisui-dynamic-form.mjs"
|
|
50
|
+
},
|
|
51
|
+
"./ai/component-registry.json": {
|
|
52
|
+
"default": "./ai/component-registry.json"
|
|
49
53
|
}
|
|
50
54
|
},
|
|
51
55
|
"type": "module"
|
|
52
|
-
}
|
|
56
|
+
}
|
|
@@ -58,7 +58,9 @@ Este documento e a referencia canonica da API JSON de praxis-dynamic-form-config
|
|
|
58
58
|
- O editor visual e o editor JSON operam sobre `DynamicFormAuthoringDocument`.
|
|
59
59
|
- O editor JSON aceita apenas o envelope canônico; payloads legados pertencem aos caminhos de compatibilidade do runtime.
|
|
60
60
|
- `Apply` e `Save` emitem um snapshot canonico completo com semantica `replace-all`.
|
|
61
|
-
- Em comandos condicionais, o editor visual autora `globalAction.payload` estruturado; `globalAction.payloadExpr` fica reservado ao JSON avancado e e preservado no round-trip quando nenhum payload estruturado e definido.
|
|
61
|
+
- Em comandos condicionais, o editor visual autora o efeito primario `effects[0].globalAction.payload` estruturado; `globalAction.payloadExpr` fica reservado ao JSON avancado e e preservado no round-trip quando nenhum payload estruturado e definido.
|
|
62
|
+
- Regras com multiplos `effects` continuam JSON-avancadas para autoria completa; ao editar o efeito primario pela UI, efeitos secundarios existentes sao preservados para evitar perda silenciosa.
|
|
63
|
+
- Em `formCommandRules[].policy`, o editor visual autora os campos comuns `distinct`, `distinctBy` e `runOnInitialEvaluation`; campos avancados vindos do JSON, como `trigger`, `debounceMs`, `errorPolicy` e `missingValuePolicy`, sao preservados no preview/apply, mas nao sao expostos como controles visuais completos.
|
|
62
64
|
- `config`, `bindings` e `contextSnapshot` substituem integralmente o estado autoral anterior.
|
|
63
65
|
- Ausencia de `bindings.mode` limpa o binding persistido e restaura o modo default efetivo do host.
|
|
64
66
|
- Ausencia de `contextSnapshot.backConfig`, `contextSnapshot.presentation` ou `contextSnapshot.schemaPrefs` significa remocao explicita do bloco ausente.
|
|
@@ -101,7 +103,7 @@ Este documento e a referencia canonica da API JSON de praxis-dynamic-form-config
|
|
|
101
103
|
| `messages` | not-specified | not-specified | n/a | Active | Preservado da documentação anterior. |
|
|
102
104
|
| `hooks` | not-specified | not-specified | n/a | Active | Preservado da documentação anterior. |
|
|
103
105
|
| `formRules` | not-specified | not-specified | n/a | Active | Preservado da documentação anterior. |
|
|
104
|
-
| `formRulesState` |
|
|
106
|
+
| `formRulesState` | internal-round-trip | Gerado pelo builder visual; nao e alvo de autoria manual ou IA. | n/a | Internal | Estado visual derivado de `formRules` para reabertura do editor. |
|
|
105
107
|
| `hints` | not-specified | not-specified | n/a | Active | Preservado da documentação anterior. |
|
|
106
108
|
| `api` | not-specified | not-specified | n/a | Partial | Preservado da documentação anterior. |
|
|
107
109
|
| `metadata` | not-specified | not-specified | n/a | Partial | Preservado da documentação anterior. |
|
|
@@ -139,7 +141,7 @@ Este arquivo foi adaptado para o padrao canonico atual sem remover conteudo tecn
|
|
|
139
141
|
| messages | Configuração top-level identificada na referência preservada. | not-yet-verified | component-defined | 1 path(s) mapeado(s), status predominante Active. |
|
|
140
142
|
| hooks | Configuração top-level identificada na referência preservada. | not-yet-verified | component-defined | 1 path(s) mapeado(s), status predominante Active. |
|
|
141
143
|
| formRules | Configuração top-level identificada na referência preservada. | not-yet-verified | component-defined | 1 path(s) mapeado(s), status predominante Active. |
|
|
142
|
-
| formRulesState |
|
|
144
|
+
| formRulesState | Estado interno de round-trip do builder visual. | verified | internal-derived | Gerado pelo editor a partir de `formRules`; nao escrever diretamente. |
|
|
143
145
|
|
|
144
146
|
### Nested configuration blocks
|
|
145
147
|
|
|
@@ -152,7 +154,7 @@ Este arquivo foi adaptado para o padrao canonico atual sem remover conteudo tecn
|
|
|
152
154
|
| `messages` | not-specified | not-specified | n/a | component-defined | Preservado da documentação anterior. |
|
|
153
155
|
| `hooks` | not-specified | not-specified | n/a | component-defined | Preservado da documentação anterior. |
|
|
154
156
|
| `formRules` | not-specified | not-specified | n/a | component-defined | Preservado da documentação anterior. |
|
|
155
|
-
| `formRulesState` |
|
|
157
|
+
| `formRulesState` | internal-round-trip | Gerado pelo builder visual; nao e alvo de autoria manual ou IA. | n/a | internal-derived | Estado visual derivado de `formRules` para reabertura do editor. |
|
|
156
158
|
| `hints` | not-specified | not-specified | n/a | component-defined | Preservado da documentação anterior. |
|
|
157
159
|
| `api` | not-specified | not-specified | n/a | component-defined | Preservado da documentação anterior. |
|
|
158
160
|
|
|
@@ -329,7 +331,7 @@ A entrada operacional vem via `SETTINGS_PANEL_DATA` (injetado pelo settings pane
|
|
|
329
331
|
| `messages` | Active | Editado na aba Mensagens. |
|
|
330
332
|
| `hooks` | Active | Editado na aba Hooks e JSON. |
|
|
331
333
|
| `formRules` | Active | Gerado pela aba Regras (visual builder). |
|
|
332
|
-
| `formRulesState` |
|
|
334
|
+
| `formRulesState` | Internal | Persistido somente como estado de round-trip do builder visual; nao e contrato autoravel. |
|
|
333
335
|
| `hints` | Active | Editado na aba Dicas e Tooltips. |
|
|
334
336
|
| `api` | Partial | Sem aba dedicada; passa por JSON editor quando presente. |
|
|
335
337
|
| `metadata` | Partial | Mantido em round-trip; sem painel dedicado. |
|
|
@@ -410,7 +412,7 @@ Correcao: e diff estrutural para UX do painel, nao auditoria de negocio.
|
|
|
410
412
|
| `messages` | not-specified | not-specified | n/a | Active | Preservado da documentação anterior. |
|
|
411
413
|
| `hooks` | not-specified | not-specified | n/a | Active | Preservado da documentação anterior. |
|
|
412
414
|
| `formRules` | not-specified | not-specified | n/a | Active | Preservado da documentação anterior. |
|
|
413
|
-
| `formRulesState` |
|
|
415
|
+
| `formRulesState` | internal-round-trip | Gerado pelo builder visual; nao e alvo de autoria manual ou IA. | n/a | Internal | Estado visual derivado de `formRules` para reabertura do editor. |
|
|
414
416
|
| `hints` | not-specified | not-specified | n/a | Active | Preservado da documentação anterior. |
|
|
415
417
|
| `api` | not-specified | not-specified | n/a | Partial | Preservado da documentação anterior. |
|
|
416
418
|
| `metadata` | not-specified | not-specified | n/a | Partial | Preservado da documentação anterior. |
|
|
@@ -24,6 +24,7 @@ source_of_truth:
|
|
|
24
24
|
- "projects/praxis-dynamic-form/src/lib/ai/form-ai.adapter.ts"
|
|
25
25
|
- "projects/praxis-ai/src/lib/core/models/assistant-context.models.ts"
|
|
26
26
|
- "projects/praxis-ai/src/lib/core/services/assistant-session-registry.service.ts"
|
|
27
|
+
- "projects/praxis-ai/src/lib/core/services/agentic-authoring-turn-client.service.ts"
|
|
27
28
|
- "projects/praxis-dynamic-form/src/lib/config-editor/praxis-dynamic-form-config-editor.ts"
|
|
28
29
|
- "projects/praxis-dynamic-form/src/lib/utils/prepare-submit-payload.ts"
|
|
29
30
|
- "projects/praxis-dynamic-fields/src/lib/directives/dynamic-field-loader.directive.ts"
|
|
@@ -34,8 +35,8 @@ source_of_truth:
|
|
|
34
35
|
- "projects/praxis-core/src/lib/services/dynamic-form.service.ts"
|
|
35
36
|
- "projects/praxis-core/src/lib/models/form/rule-property.schema.ts"
|
|
36
37
|
- "projects/praxis-dynamic-form/docs/layout-items-visual-blocks.md"
|
|
37
|
-
source_of_truth_last_verified: "2026-
|
|
38
|
-
last_updated: "2026-
|
|
38
|
+
source_of_truth_last_verified: "2026-07-16"
|
|
39
|
+
last_updated: "2026-07-16"
|
|
39
40
|
toc: true
|
|
40
41
|
sidebar: true
|
|
41
42
|
tags:
|
|
@@ -82,6 +83,8 @@ Contrato operacional:
|
|
|
82
83
|
- a identidade canonica da sessao segue `form:{routeKey}:{componentInstanceId || formId || 'form'}`;
|
|
83
84
|
- o contexto assistivel publico e `PraxisAssistantContextSnapshot`, com `identity`, `target`, `contextItems`, `authoringManifestRef`, `resourcePath`, `schemaFields`, digests seguros e hints de governanca;
|
|
84
85
|
- o snapshot pode apontar para `field`, `schemaBackedField`, `localField`, `section`, `row`, `column`, `visualBlock`, `formAction`, `message` ou `rule`, mas nao deve transportar `form.value`, `rawFormData`, config completa, notas privadas, estado runtime bruto, diagnostics arbitrarios, `pendingPatch`, `File`, `Blob`, bytes, base64 ou `previewUrl`;
|
|
86
|
+
- turnos do assistente usam `AgenticAuthoringTurnClientService` e `/api/praxis/config/ai/authoring/turn/stream/**`; indisponibilidade do transporte falha de forma fechada e nao reabre o caminho legado `getPatch`;
|
|
87
|
+
- o grounding do turno pode incluir `schemaFields` e `dataProfile` estruturais produzidos pelo adapter, mas nunca valores dos controles; anexos sao reduzidos a nome, tipo, MIME, tamanho, origem e indicador de preview;
|
|
85
88
|
- edicao local so pode ser aplicada quando a resposta for compilada para `componentEditPlan` validado pelo manifesto autoral do componente;
|
|
86
89
|
- patches livres retornados por backend/LLM sem plano compilado sao rejeitados pelo turn flow;
|
|
87
90
|
- pedidos sobre regra de negocio compartilhada, elegibilidade, compliance, LGPD, politica, acesso, aprovacao, publicacao, materializacao ou enforcement devem virar handoff governado para `domain-rules`, nao patch local de formulario;
|
|
@@ -129,9 +132,11 @@ Essa fronteira preserva a premissa de plataforma: o formulario materializa e exp
|
|
|
129
132
|
| `messages` | not-specified | not-specified | n/a | Partial | Chaves principais de submit/confirmacao usadas; contrato e mais amplo. |
|
|
130
133
|
| `formRules` | not-specified | not-specified | n/a | Active | Aplicadas no pipeline de regras do runtime. |
|
|
131
134
|
| `formCommandRules` | not-specified | not-specified | n/a | Active | Regras condicionais de comando avaliadas sobre `formData` estabilizado depois de `formRules`; primeiro corte suporta `global-action`. |
|
|
132
|
-
| `formRulesState` |
|
|
135
|
+
| `formRulesState` | internal-round-trip | Gerado pelo builder visual; nao e alvo de autoria manual ou IA. | n/a | Internal | Estado visual derivado de `formRules` para reabertura do editor. |
|
|
133
136
|
| `hooks` | not-specified | not-specified | n/a | Active | Integracao de ciclo (before/after) via runtime de hooks. |
|
|
134
137
|
| `hints` | not-specified | not-specified | n/a | Declared-only | Mantido no contrato/editor; sem render dedicado no template principal. |
|
|
138
|
+
| `helpPresentation` | `FormHelpPresentationConfig` | No | `{ display: "inline" }` | Active | Politica visual para exibir `hint`/`helpText` dos campos sem alterar semantica dos DTOs; erros de validacao continuam inline. |
|
|
139
|
+
| `presentation` | `FormPresentationConfig` | No | runtime defaults | Active | Preferencias tipadas de label/value para modos read-only e presentation. Valores numericos de tamanho e largura sao materializados como comprimentos CSS em `px`; o mesmo shape alimenta o snapshot canonico do editor. |
|
|
135
140
|
| `fieldMetadata[].array` | `FieldArrayConfig` | No | n/a | Active | Contrato de Editable Collection apenas quando `fieldMetadata[].controlType === "array"` ou quando `x-ui.array` foi publicado explicitamente. |
|
|
136
141
|
|
|
137
142
|
Nota editorial:
|
|
@@ -192,7 +197,7 @@ Este arquivo foi adaptado para o padrao canonico atual sem remover conteudo tecn
|
|
|
192
197
|
| `api` | not-specified | not-specified | n/a | component-defined | Declarado no modelo; sem binding operacional direto no runtime atual. |
|
|
193
198
|
| `messages` | not-specified | not-specified | n/a | component-defined | Chaves principais de submit/confirmacao usadas; contrato e mais amplo. |
|
|
194
199
|
| `formRules` | not-specified | not-specified | n/a | component-defined | Aplicadas no pipeline de regras do runtime. |
|
|
195
|
-
| `formRulesState` |
|
|
200
|
+
| `formRulesState` | internal-round-trip | Gerado pelo builder visual; nao e alvo de autoria manual ou IA. | n/a | internal-derived | Estado visual derivado de `formRules` para reabertura do editor. |
|
|
196
201
|
| `hooks` | not-specified | not-specified | n/a | component-defined | Integracao de ciclo (before/after) via runtime de hooks. |
|
|
197
202
|
| `sections[].sectionHeader` | `FormSectionHeaderConfig` | No | n/a | Active | Header visual rico da seção com suporte a avatar dinâmico resolvido a partir de `formData`. |
|
|
198
203
|
|
|
@@ -241,7 +246,7 @@ the canonical remote entity loaded through `resourcePath` and `resourceId`.
|
|
|
241
246
|
| `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. |
|
|
242
247
|
| `submitUrl` | `string \| null \| undefined` | Conditional | component-input | resolved via API origin | URL concreta de submit publicada por surface/action; exige `submitMethod` quando usada para envio HTTP. |
|
|
243
248
|
| `submitMethod` | `'post' \| 'put' \| 'patch' \| null \| undefined` | Conditional | component-input | normalized lowercase | Método HTTP concreto de submit publicado por surface/action; exige `submitUrl` quando usado para envio HTTP. |
|
|
244
|
-
| `responseSchemaUrl` | `string \| null \| undefined` | No | component-input | diagnostic only | Schema de resposta para diagnóstico e follow-up
|
|
249
|
+
| `responseSchemaUrl` | `string \| null \| undefined` | No | component-input | diagnostic only | Schema de resposta para diagnóstico e follow-up; não compõe campos editáveis nem o payload do comando. |
|
|
245
250
|
| `enableCustomization` | `boolean` | No | component-input | boolean coercion | Alterna UX de edição visual/configuração. |
|
|
246
251
|
| `formId` | `string \| undefined` | Yes (corporate flow) | component-input | component key scoping | Obrigatório para ciclo corporativo com persistência e sync. |
|
|
247
252
|
| `componentInstanceId` | `string \| undefined` | No | component-input | component key scoping | Isola persistência por instância. |
|
|
@@ -559,7 +564,7 @@ No ecossistema Praxis, ele funciona tanto como runtime final quanto como superfi
|
|
|
559
564
|
|
|
560
565
|
| Input | Tipo | Default | Status | Runtime notes |
|
|
561
566
|
| --- | --- | --- | --- | --- |
|
|
562
|
-
| `config` | `FormConfig` | `{ sections: [] }` | Active | Contrato principal consumido no ciclo inteiro. |
|
|
567
|
+
| `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. |
|
|
563
568
|
| `resourcePath` | `string \| undefined` | `undefined` | Active | Habilita carga de schema/dados remotos. Opcional quando `schemaUrl` explícito é fornecido. |
|
|
564
569
|
| `resourceId` | `string \| number \| undefined` | `undefined` | Active | Carrega entidade no modo `edit/view`. |
|
|
565
570
|
| `mode` | `'create' \| 'edit' \| 'view'` | `'create'` | Active | Governa submit, leitura e apresentacao. |
|
|
@@ -571,11 +576,13 @@ No ecossistema Praxis, ele funciona tanto como runtime final quanto como superfi
|
|
|
571
576
|
| `domainRules` | `PraxisDynamicFormDomainRulesOptions \| boolean \| null` | `null` | Active | Opt-in para carregar materializacoes de regras compartilhadas em `/api/praxis/config/domain-rules/materializations` e combina-las com `config.formRules`. |
|
|
572
577
|
| `submitUrl` | `string \| undefined` | `undefined` | Active | Executa submit canonico publicado por `surface` ou `action`, sem inferencia local de CRUD. |
|
|
573
578
|
| `submitMethod` | `'post' \| 'put' \| 'patch' \| undefined` | `undefined` | Active | Metodo HTTP do submit canonico; deve acompanhar `submitUrl`. |
|
|
574
|
-
| `responseSchemaUrl` | `string \| undefined` | `undefined` | Active | Porta diagnóstica/read-only
|
|
579
|
+
| `responseSchemaUrl` | `string \| undefined` | `undefined` | Active | Porta diagnóstica/read-only; não deve ser usada para mesclar propriedades do schema de resposta no formulário de comando. |
|
|
575
580
|
| `enableCustomization` | `boolean` | `false` | Active | Habilita UX de customizacao do layout. |
|
|
576
581
|
| `formId` | `string \| undefined` | `undefined` | Active | Chave de persistencia e identidade logica. |
|
|
577
582
|
| `componentInstanceId` | `string \| undefined` | `undefined` | Active | Isola instancias com mesmo `formId`. |
|
|
578
583
|
| `layout` | `FormLayout \| undefined` | `undefined` | Partial | Funciona como override estrutural em parte dos fluxos de layout/editor. |
|
|
584
|
+
| `generatedLayoutPreset` | `'default' \| 'compactPresentation'` | `'default'` | Active | Usado apenas ao criar a configuracao inicial a partir de schema/metadata; nao reprocessa layouts persistidos ou authorados. |
|
|
585
|
+
| `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 com um unico campo: `medium-and-wide` (default) expande spans 6/8, `preserve` mantem o width publicado e `all` tambem expande campos compactos. 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. |
|
|
579
586
|
| `backConfig` | `BackConfig \| undefined` | `undefined` | Active | Integra retorno/navegacao no painel de configuracao; `confirmOnDirty` tem precedencia sobre `behavior.confirmOnUnsavedChanges` no cancel. |
|
|
580
587
|
| `hooks` | `FormHooksLayout \| undefined` | `undefined` | Active | Override direto de hooks sobre `config.hooks`. |
|
|
581
588
|
| `customEndpoints` | `EndpointConfig` | `{}` | Active | Override de endpoints no CRUD service interno. |
|
|
@@ -588,8 +595,34 @@ No ecossistema Praxis, ele funciona tanto como runtime final quanto como superfi
|
|
|
588
595
|
| `readonlyModeGlobal` | `boolean \| null` | `null` | Active | Estado global de leitura propagado para loader. |
|
|
589
596
|
| `disabledModeGlobal` | `boolean \| null` | `null` | Active | Estado global de desabilitado propagado para loader. |
|
|
590
597
|
| `presentationModeGlobal` | `boolean \| null` | `null` | Active | Modo apresentacao global (efetivo em `view`). |
|
|
598
|
+
| `fieldIconPolicy` | `'all' \| 'presentation-only' \| 'none'` | `'all'` | Active | Controla icones `prefixIcon`/`suffixIcon` vindos da metadata dos campos. `all` preserva o comportamento atual; `presentation-only` mantem icones decorativos no modo apresentacao e oculta os slots de icone em controles input/read-only tradicionais; `none` oculta esses slots em todos os modos. |
|
|
591
599
|
| `visibleGlobal` | `boolean \| null` | `null` | Active | Visibilidade global propagada para loader. |
|
|
592
600
|
|
|
601
|
+
In `compactPresentation` runtime detail surfaces, rows, columns and sections are visible only when
|
|
602
|
+
they contain at least one field that can be materialized after metadata visibility and field-rule
|
|
603
|
+
overrides are resolved. Boolean values, including `false`, are valid presentation values and must
|
|
604
|
+
not be treated as empty detail content. If no field in a section is materialized, the section is
|
|
605
|
+
hidden instead of rendering an orphan title.
|
|
606
|
+
|
|
607
|
+
#### Migration baseline for ErgonX-style screens
|
|
608
|
+
|
|
609
|
+
For enterprise migrations that must become templates for many screens, `layoutPolicy`,
|
|
610
|
+
`helpPresentation` and `fieldIconPolicy` should be selected as part of the DTO/schema
|
|
611
|
+
handoff, not patched locally after visual review.
|
|
612
|
+
|
|
613
|
+
Recommended baseline:
|
|
614
|
+
|
|
615
|
+
| Surface | Inputs | Contract gate |
|
|
616
|
+
| --- | --- | --- |
|
|
617
|
+
| Detail/read-only | `layoutPolicy.source='schema'`, `intent='detail'`, `preset='compactPresentation'`, `persistence='transient'`, `schemaType='response'` | Response DTO publishes business grouping, order, labels, value presentation and safe widths. |
|
|
618
|
+
| Create/edit | `layoutPolicy.source='schema'`, `intent='command'`, `preset='groupedCommand'`, `persistence='transient'`, `schemaType='request'` | Request DTO/write contract publishes only editable fields, validators, options and help text required for the command. |
|
|
619
|
+
| Dense command drawer | `config.helpPresentation.display='auto'` with `preferPopoverForControls` for select, checkbox, toggle, date/datepickers and numeric controls | DTO help text is semantic and not a substitute for validation messages. |
|
|
620
|
+
| Input-heavy operational form | `fieldIconPolicy='presentation-only'` | Icons remain useful in read-only presentation but do not crowd editable controls. |
|
|
621
|
+
|
|
622
|
+
If a field requires a local label, local help text, local option mapping or local code/description
|
|
623
|
+
composition to look correct, the schema is not ready for scalable migration. Fix the backend DTO,
|
|
624
|
+
OpenAPI `x-ui` metadata or option/value-presentation contract first.
|
|
625
|
+
|
|
593
626
|
#### Regras compartilhadas materializadas
|
|
594
627
|
|
|
595
628
|
`domainRules` separa regra corporativa compartilhavel de regra materializada no `FormConfig`. Quando habilitado, o componente consulta o backend de configuracao via `DomainRuleFormRulesService`, transforma cada materializacao em `FormLayoutRule` e aplica a lista combinada:
|
|
@@ -686,7 +719,7 @@ Precedencias importantes:
|
|
|
686
719
|
| `api` | Declared-only | Declarado no modelo; sem binding operacional direto no runtime atual. |
|
|
687
720
|
| `messages` | Partial | Chaves principais de submit/confirmacao usadas; contrato e mais amplo. |
|
|
688
721
|
| `formRules` | Active | Aplicadas no pipeline de regras do runtime. |
|
|
689
|
-
| `formRulesState` |
|
|
722
|
+
| `formRulesState` | Internal | Persistido somente como estado de round-trip do builder visual; nao e contrato autoravel. |
|
|
690
723
|
| `hooks` | Active | Integracao de ciclo (before/after) via runtime de hooks. |
|
|
691
724
|
| `hints` | Declared-only | Mantido no contrato/editor; sem render dedicado no template principal. |
|
|
692
725
|
|
|
@@ -863,7 +896,7 @@ O runtime emite `target-not-found` quando uma regra aponta para `section`, `row`
|
|
|
863
896
|
| `api` | not-specified | not-specified | n/a | Declared-only | Declarado no modelo; sem binding operacional direto no runtime atual. |
|
|
864
897
|
| `messages` | not-specified | not-specified | n/a | Partial | Chaves principais de submit/confirmacao usadas; contrato e mais amplo. |
|
|
865
898
|
| `formRules` | not-specified | not-specified | n/a | Active | Aplicadas no pipeline de regras do runtime. |
|
|
866
|
-
| `formRulesState` |
|
|
899
|
+
| `formRulesState` | internal-round-trip | Gerado pelo builder visual; nao e alvo de autoria manual ou IA. | n/a | Internal | Estado visual derivado de `formRules` para reabertura do editor. |
|
|
867
900
|
| `hooks` | not-specified | not-specified | n/a | Active | Integracao de ciclo (before/after) via runtime de hooks. |
|
|
868
901
|
| `hints` | not-specified | not-specified | n/a | Declared-only | Mantido no contrato/editor; sem render dedicado no template principal. |
|
|
869
902
|
|