@praxisui/dynamic-form 8.0.0-beta.2 → 8.0.0-beta.21
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 +166 -18
- package/docs/dynamic-form-authoring-document-semantics.md +80 -0
- package/docs/dynamic-form-llm-rule-authoring-guide.md +318 -0
- package/docs/dynamic-form-rules-authoring-plan.md +379 -0
- package/docs/hot-metadata-updates.md +141 -0
- package/docs/layout-items-visual-blocks.md +406 -0
- package/fesm2022/praxisui-dynamic-form-dynamic-form-agentic-authoring-turn-flow-DuH1ad7h.mjs +417 -0
- package/fesm2022/praxisui-dynamic-form.mjs +9147 -2078
- package/index.d.ts +640 -22
- package/package.json +12 -6
- package/src/lib/components/praxis-form-actions/praxis-form-actions.json-api.md +441 -0
- package/src/lib/config-editor/praxis-dynamic-form-config-editor.json-api.md +481 -0
- package/src/lib/filter-form/praxis-filter-form.json-api.md +507 -0
- package/src/lib/json-config-editor/form-json-config-editor.json-api.md +491 -0
- package/src/lib/layout-editor/praxis-layout-editor.json-api.md +432 -0
- package/src/lib/praxis-dynamic-form.json-api.md +1011 -0
|
@@ -0,0 +1,491 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "form-json-config-editor JSON API (Canonical)"
|
|
3
|
+
slug: "form-json-config-editor-json-api"
|
|
4
|
+
doc_type: "api-reference"
|
|
5
|
+
component: "form-json-config-editor"
|
|
6
|
+
document_kind: "json-api-canonical"
|
|
7
|
+
reference_mode: "canonical"
|
|
8
|
+
contract_format: "json"
|
|
9
|
+
contract_source: "runtime-and-code"
|
|
10
|
+
description: "Referencia canonica do contrato JSON do componente form-json-config-editor."
|
|
11
|
+
category: "components"
|
|
12
|
+
sub_category: "config-editor"
|
|
13
|
+
audience:
|
|
14
|
+
- "frontend"
|
|
15
|
+
- "architect"
|
|
16
|
+
- "platform-team"
|
|
17
|
+
level: "advanced"
|
|
18
|
+
status: "active"
|
|
19
|
+
owner: "praxis-ui"
|
|
20
|
+
source_of_truth:
|
|
21
|
+
- "projects/praxis-dynamic-form/src/lib/json-config-editor/json-config-editor.component.ts"
|
|
22
|
+
- "projects/praxis-dynamic-form/src/lib/json-config-editor/json-config-editor.component.spec.ts"
|
|
23
|
+
- "projects/praxis-dynamic-form/src/lib/services/form-config.service.ts"
|
|
24
|
+
- "projects/praxis-core/src/lib/models/form/form-config.model.ts"
|
|
25
|
+
source_of_truth_last_verified: "2026-03-05"
|
|
26
|
+
last_updated: "2026-03-05"
|
|
27
|
+
toc: true
|
|
28
|
+
sidebar: true
|
|
29
|
+
tags:
|
|
30
|
+
- "json-api"
|
|
31
|
+
- "canonical-contract"
|
|
32
|
+
- "form-json-config-editor"
|
|
33
|
+
api_stability: "canonical"
|
|
34
|
+
schema_verified: true
|
|
35
|
+
runtime_verified: false
|
|
36
|
+
editor_coverage_verified: false
|
|
37
|
+
runtime_scope: "public"
|
|
38
|
+
legacy_paths_present: false
|
|
39
|
+
has_known_mismatches: false
|
|
40
|
+
related_components:
|
|
41
|
+
- "praxis-table"
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
# form-json-config-editor
|
|
45
|
+
|
|
46
|
+
Este documento e a referencia canonica da API JSON de form-json-config-editor.
|
|
47
|
+
|
|
48
|
+
## Summary
|
|
49
|
+
|
|
50
|
+
- Tipo documental: API reference canonica de contrato JSON.
|
|
51
|
+
- Source of truth: runtime e codigo declarados no frontmatter.
|
|
52
|
+
- Objetivo operacional: consulta rapida, auditavel e deterministica sob pressao.
|
|
53
|
+
- Resumo funcional herdado: `form-json-config-editor` e a superficie de edicao JSON direta para `FormConfig`. Ele oferece validacao local, formatacao, aplicacao manual de JSON e eventos de telemetria do editor.
|
|
54
|
+
|
|
55
|
+
## Scope and positioning
|
|
56
|
+
|
|
57
|
+
- Escopo: contrato JSON publico e limites de comportamento observavel.
|
|
58
|
+
- Fora de escopo: tutorial de adocao e walkthrough operacional detalhado.
|
|
59
|
+
- Posicionamento: referencia canonicamente governada para consumidores, arquitetos e mantenedores.
|
|
60
|
+
|
|
61
|
+
## Source of truth
|
|
62
|
+
|
|
63
|
+
| Source | Kind | Notes |
|
|
64
|
+
| --- | --- | --- |
|
|
65
|
+
| projects/praxis-dynamic-form/src/lib/json-config-editor/json-config-editor.component.ts | runtime-code | Source de implementacao declarado no repositorio. |
|
|
66
|
+
| projects/praxis-dynamic-form/src/lib/json-config-editor/json-config-editor.component.spec.ts | runtime-code | Source de implementacao declarado no repositorio. |
|
|
67
|
+
| projects/praxis-dynamic-form/src/lib/services/form-config.service.ts | runtime-code | Source de implementacao declarado no repositorio. |
|
|
68
|
+
| projects/praxis-core/src/lib/models/form/form-config.model.ts | runtime-code | Source de implementacao declarado no repositorio. |
|
|
69
|
+
|
|
70
|
+
## Support legend
|
|
71
|
+
|
|
72
|
+
- Active: suportado e observado no runtime atual.
|
|
73
|
+
- Partial: suporte parcial, com restricoes conhecidas.
|
|
74
|
+
- Declared-only: declarado em tipos/schema sem ligacao runtime confirmada.
|
|
75
|
+
- Schema-only: presente em schema/modelo sem confirmacao de execucao.
|
|
76
|
+
- Deprecated: mantido por compatibilidade legada com migracao prevista.
|
|
77
|
+
|
|
78
|
+
## Contract classification
|
|
79
|
+
|
|
80
|
+
### Canonical paths (public contract)
|
|
81
|
+
|
|
82
|
+
| Path | Type | Required | Default | Status | Notes |
|
|
83
|
+
| --- | --- | --- | --- | --- | --- |
|
|
84
|
+
| `config` | `FormConfig \| null` | No | `null` | Active | Payload principal editado/aplicado pelo componente. |
|
|
85
|
+
| `hooks.beforeValidate[]` | array | No | `[]` | Partial | Inserido por helper `insertHooksTemplate()` quando usado. |
|
|
86
|
+
| `hooks.beforeSubmit[]` | array | No | `[]` | Partial | Inserido por helper `insertHooksTemplate()` quando usado. |
|
|
87
|
+
| `behavior.reactiveValidation` | boolean | No | component-defined | Partial | Ativado por helper `enableReactiveValidation()`. |
|
|
88
|
+
| `behavior.reactiveValidationDebounceMs` | number | No | `200` (helper) | Partial | Configurado apenas quando helper é acionado. |
|
|
89
|
+
|
|
90
|
+
### Supported legacy paths
|
|
91
|
+
|
|
92
|
+
Nenhum path legado suportado foi identificado nesta revisão baseada em evidência textual preservada.
|
|
93
|
+
|
|
94
|
+
### Internal-only paths
|
|
95
|
+
|
|
96
|
+
| Path | Internal consumer | Runtime presence | Public support | Notes |
|
|
97
|
+
| --- | --- | --- | --- | --- |
|
|
98
|
+
| `jsonText` (estado interno) | editor textarea/runtime validation | Yes | No | Buffer temporário da edição textual, não persistido no contrato público. |
|
|
99
|
+
| `jsonTextChanges$` | pipeline debounce/validação | Yes | No | Subject interno para validação em 300ms. |
|
|
100
|
+
|
|
101
|
+
### Experimental paths
|
|
102
|
+
|
|
103
|
+
| Path | Enablement (flag/guard) | Stability | Rollout notes | Notes |
|
|
104
|
+
| --- | --- | --- | --- | --- |
|
|
105
|
+
| `hooks.beforeValidate[]` (inserção assistida) | ação manual `insertHooksTemplate()` | Partial | Não é aplicado automaticamente; depende de interação do usuário | Helper de produtividade, sem garantia de aderência semântica do hook. |
|
|
106
|
+
|
|
107
|
+
## Overview
|
|
108
|
+
|
|
109
|
+
Este arquivo foi adaptado para o padrao canonico atual sem remover conteudo tecnico existente. O conteudo detalhado anterior foi preservado para manter rastreabilidade historica e reduzir perda de contexto.
|
|
110
|
+
|
|
111
|
+
## Public contract surface
|
|
112
|
+
|
|
113
|
+
### Top-level configuration blocks
|
|
114
|
+
|
|
115
|
+
| Block | Purpose | Required | Merge strategy | Notes |
|
|
116
|
+
| --- | --- | --- | --- | --- |
|
|
117
|
+
| `config` | Snapshot do `FormConfig` em edição | No | replace-object on apply | Fonte vem de input ou `FormConfigService.currentConfig`. |
|
|
118
|
+
| `hooks` | Bloco de hooks (opcional) | No | deep-merge helper-driven | Pode ser enriquecido por templates de ajuda. |
|
|
119
|
+
| `behavior` | Regras comportamentais do form | No | deep-merge helper-driven | Pode receber `reactiveValidation` por helper. |
|
|
120
|
+
|
|
121
|
+
### Nested configuration blocks
|
|
122
|
+
|
|
123
|
+
| Path | Type | Required | Default | Constraints | Notes |
|
|
124
|
+
| --- | --- | --- | --- | --- | --- |
|
|
125
|
+
| `hooks.beforeValidate[]` | array | No | `[]` | hook-contract | Inserido por helper com dedupe básico por conteúdo. |
|
|
126
|
+
| `hooks.beforeSubmit[]` | array | No | `[]` | hook-contract | Inserido por helper com dedupe básico por conteúdo. |
|
|
127
|
+
| `behavior.reactiveValidation` | boolean | No | false | boolean | Ativado por helper de validação reativa. |
|
|
128
|
+
| `behavior.reactiveValidationDebounceMs` | number | No | `200` | integer >= 0 | Preenchido quando ausente pelo helper. |
|
|
129
|
+
|
|
130
|
+
### Input bindings
|
|
131
|
+
|
|
132
|
+
| Binding/Path | Type | Required | Source | Runtime normalization | Notes |
|
|
133
|
+
| --- | --- | --- | --- | --- | --- |
|
|
134
|
+
| `config` | `FormConfig \| null` | No | component-input/service | `JSON.stringify(config, null, 2)` | Se ausente, usa `FormConfigService.currentConfig`. |
|
|
135
|
+
|
|
136
|
+
### Output events
|
|
137
|
+
|
|
138
|
+
| Event | Payload | Trigger | Stability | Notes |
|
|
139
|
+
| --- | --- | --- | --- | --- |
|
|
140
|
+
| `configChange` | `FormConfig` | Apenas em `applyJsonChanges()` com JSON valido. | Partial | Preservado da documentação anterior. |
|
|
141
|
+
| `validationChange` | `JsonValidationResult` | Em cada ciclo de validacao (debounce 300ms). | Partial | Preservado da documentação anterior. |
|
|
142
|
+
| `editorEvent` | `JsonEditorEvent` | Eventos `validation`, `format` e `apply`. | Partial | Preservado da documentação anterior. |
|
|
143
|
+
|
|
144
|
+
### External side channels
|
|
145
|
+
|
|
146
|
+
| Channel | Direction | Contract | Failure mode | Notes |
|
|
147
|
+
| --- | --- | --- | --- | --- |
|
|
148
|
+
| `FormConfigService.currentConfig` | inbound | `FormConfig` snapshot | fail-soft | Fonte inicial quando `@Input() config` não é fornecido. |
|
|
149
|
+
| `FormConfigService.validateConfig()` | outbound validate | `FormConfig -> string[]` | reject invalid apply | Base canônica de validação estrutural/semântica. |
|
|
150
|
+
| `FormConfigService.loadConfig()` | outbound apply | `FormConfig` | fail-closed por try/catch | Atualiza estado global de configuração após apply válido. |
|
|
151
|
+
|
|
152
|
+
### Host/runtime dependencies
|
|
153
|
+
|
|
154
|
+
| Dependency | Required | Environment | Purpose | Notes |
|
|
155
|
+
| --- | --- | --- | --- | --- |
|
|
156
|
+
| `FormConfigService` | Yes | browser/dev/prod/ssr | validação + apply | Serviço central para validar e carregar config. |
|
|
157
|
+
| `ChangeDetectorRef` | Yes | browser/dev/prod/ssr | atualização visual | Atualiza estado de validação/formatação no editor. |
|
|
158
|
+
| `rxjs` (`debounceTime`) | Yes | browser/dev/prod/ssr | pipeline de validação | Debounce fixo de 300ms para texto em edição. |
|
|
159
|
+
|
|
160
|
+
## Coverage matrix
|
|
161
|
+
|
|
162
|
+
| Surface | Verified | Coverage status | Evidence | Notes |
|
|
163
|
+
| --- | --- | --- | --- | --- |
|
|
164
|
+
| Runtime | false | Partial | source_of_truth + conteudo preservado | Revisao estrutural concluida; validacao comportamental fina pode exigir follow-up. |
|
|
165
|
+
| Schema/Types | true | Partial | interfaces/modelos citados | Mapeamento formal de todos os campos ainda pode requerer refinamento. |
|
|
166
|
+
| Editor/Tooling | false | Partial | secoes de editor quando presentes | Cobertura de editor/tooling nem sempre confirmada por evidencia direta. |
|
|
167
|
+
|
|
168
|
+
## Runtime coverage boundaries
|
|
169
|
+
|
|
170
|
+
- Cobertura consolidada com base em documentacao existente e source of truth declarado.
|
|
171
|
+
- Comportamentos fora de evidencia direta foram marcados como not-yet-verified ou Partial.
|
|
172
|
+
- Compatibilidade legada, quando detectada, foi separada em classificacao explicita.
|
|
173
|
+
|
|
174
|
+
## Resolution model
|
|
175
|
+
|
|
176
|
+
### Merge order
|
|
177
|
+
|
|
178
|
+
1. `@Input() config` (quando presente)
|
|
179
|
+
2. fallback para `FormConfigService.currentConfig`
|
|
180
|
+
3. edição textual (`jsonText`) com validação incremental
|
|
181
|
+
4. apply explícito (`applyJsonChanges`) substitui snapshot no serviço
|
|
182
|
+
|
|
183
|
+
### Fallback order
|
|
184
|
+
|
|
185
|
+
`config` input -> `FormConfigService.currentConfig` -> objeto vazio serializado (`{}`) em caso de falha de stringify.
|
|
186
|
+
|
|
187
|
+
### Override points
|
|
188
|
+
|
|
189
|
+
- `@Input() config`
|
|
190
|
+
- ações de toolbar do editor (`applyJsonChanges`, `formatJson`, helpers)
|
|
191
|
+
- estado compartilhado via `FormConfigService`
|
|
192
|
+
|
|
193
|
+
### Runtime normalization
|
|
194
|
+
|
|
195
|
+
- `JSON.stringify(..., null, 2)` padroniza saída formatada.
|
|
196
|
+
- `validateJson()` força contrato de objeto JSON antes de qualquer apply.
|
|
197
|
+
- helpers inserem blocos mínimos (`hooks`, `behavior`) com dedupe básico.
|
|
198
|
+
|
|
199
|
+
### Precedence rules
|
|
200
|
+
|
|
201
|
+
- `@Input() config` tem precedência sobre `currentConfig` na inicialização.
|
|
202
|
+
- `applyJsonChanges()` só executa quando `isValidJson=true`.
|
|
203
|
+
- `formatJson()` não altera estado quando JSON está inválido.
|
|
204
|
+
|
|
205
|
+
## Validation and error semantics
|
|
206
|
+
|
|
207
|
+
### Validation model
|
|
208
|
+
|
|
209
|
+
| Path/Rule | Validation phase | Behavior on fail | Error code / warning | Notes |
|
|
210
|
+
| --- | --- | --- | --- | --- |
|
|
211
|
+
| texto vazio | pre-parse | reject | `JSON não pode estar vazio` | Atualiza `validationChange` e `editorEvent(validation)`. |
|
|
212
|
+
| parse JSON | parse | reject | `Erro de sintaxe JSON` | Captura erro de parse e mantém `isValidJson=false`. |
|
|
213
|
+
| raiz não-objeto | semantic | reject | `Configuração deve ser um objeto` | Arrays/primitivos não são aceitos como contrato raiz. |
|
|
214
|
+
| `validateConfig(parsed)` | semantic | reject | `errors.join('; ')` | Usa `FormConfigService` como autoridade de validação. |
|
|
215
|
+
| apply inválido | apply | no-op | `Erro ao aplicar configuração JSON` | Emite `editorEvent(type='apply')` com `isValid=false`. |
|
|
216
|
+
|
|
217
|
+
### Error semantics
|
|
218
|
+
|
|
219
|
+
Validação e apply são fail-closed: payload inválido não é aplicado no serviço. O componente mantém estado editável e reporta erros via `validationChange` e `editorEvent`.
|
|
220
|
+
|
|
221
|
+
### Fail-open / fail-closed behavior
|
|
222
|
+
|
|
223
|
+
| Condition | Mode | Runtime behavior | Consumer impact |
|
|
224
|
+
| --- | --- | --- | --- |
|
|
225
|
+
| JSON inválido durante edição | fail-closed para apply | bloqueia `applyJsonChanges()` | evita propagar config inconsistente |
|
|
226
|
+
| erro em `JSON.stringify` inicial | fail-open | usa `'{}'` no editor | editor permanece utilizável |
|
|
227
|
+
| erro em `formatJson` | fail-soft | mantém texto atual e emite evento de erro | sem perda automática de conteúdo |
|
|
228
|
+
| erros de validação de contrato | fail-closed para apply | mantém `isValidJson=false` até correção | exige correção explícita antes de aplicar |
|
|
229
|
+
|
|
230
|
+
### Invalid or unknown field handling
|
|
231
|
+
|
|
232
|
+
- Campos desconhecidos: comportamento depende da estrategia do componente (ignore, warn ou reject).
|
|
233
|
+
- Campos invalidos: podem gerar fallback, warning ou falha conforme implementacao.
|
|
234
|
+
- Registrar divergencias observadas em Known limitations and mismatches.
|
|
235
|
+
|
|
236
|
+
### Runtime warnings vs hard failures
|
|
237
|
+
|
|
238
|
+
| Condition | Severity | Observability | Consumer action |
|
|
239
|
+
| --- | --- | --- | --- |
|
|
240
|
+
| partial-or-declared-only-coverage | warning | logs/eventos do componente | confirmar ligacao runtime antes de uso critico |
|
|
241
|
+
|
|
242
|
+
## Detailed API
|
|
243
|
+
|
|
244
|
+
### Preserved technical reference (normalized from previous revision)
|
|
245
|
+
|
|
246
|
+
### 1. Visao Geral e Quando Usar
|
|
247
|
+
`form-json-config-editor` e a superficie de edicao JSON direta para `FormConfig`.
|
|
248
|
+
Ele oferece validacao local, formatacao, aplicacao manual de JSON e eventos de telemetria do editor.
|
|
249
|
+
|
|
250
|
+
Use quando precisar de:
|
|
251
|
+
- edicao avancada/manual de schema de formulario;
|
|
252
|
+
- validacao continua de JSON com debounce;
|
|
253
|
+
- fluxo explicito de "validar -> aplicar";
|
|
254
|
+
- apoio didatico para hooks e validacao reativa via atalhos no proprio editor.
|
|
255
|
+
|
|
256
|
+
### 2. Contrato da API
|
|
257
|
+
|
|
258
|
+
#### 2.1 Inputs
|
|
259
|
+
| Input | Tipo | Padrao | Obrigatorio | Status | Comportamento |
|
|
260
|
+
| --- | --- | --- | --- | --- | --- |
|
|
261
|
+
| `config` | `FormConfig \| null` | `null` | Nao | Active | Se ausente, usa `FormConfigService.currentConfig`. |
|
|
262
|
+
|
|
263
|
+
#### 2.2 Outputs
|
|
264
|
+
| Output | Payload | Quando emite |
|
|
265
|
+
| --- | --- | --- |
|
|
266
|
+
| `configChange` | `FormConfig` | Apenas em `applyJsonChanges()` com JSON valido. |
|
|
267
|
+
| `validationChange` | `JsonValidationResult` | Em cada ciclo de validacao (debounce 300ms). |
|
|
268
|
+
| `editorEvent` | `JsonEditorEvent` | Eventos `validation`, `format` e `apply`. |
|
|
269
|
+
|
|
270
|
+
Tipos relevantes:
|
|
271
|
+
|
|
272
|
+
```ts
|
|
273
|
+
interface JsonValidationResult {
|
|
274
|
+
isValid: boolean;
|
|
275
|
+
error?: string;
|
|
276
|
+
config?: FormConfig;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
interface JsonEditorEvent {
|
|
280
|
+
type: 'apply' | 'format' | 'validation';
|
|
281
|
+
payload: JsonValidationResult;
|
|
282
|
+
}
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
### 3. Mapeamento de Comportamento
|
|
286
|
+
- Validacao:
|
|
287
|
+
- `onJsonTextChange` envia para subject interno com debounce de 300ms.
|
|
288
|
+
- `validateJson` exige objeto JSON e chama `FormConfigService.validateConfig`.
|
|
289
|
+
- Aplicacao:
|
|
290
|
+
- `applyJsonChanges` so aplica quando `isValidJson=true`.
|
|
291
|
+
- Em sucesso: `loadConfig` no service + `configChange` + `editorEvent(type='apply')`.
|
|
292
|
+
- Formatacao:
|
|
293
|
+
- `formatJson` reformata com `JSON.stringify(parsed, null, 2)`.
|
|
294
|
+
- Helpers de produtividade:
|
|
295
|
+
- `insertHooksTemplate()` adiciona exemplos em `hooks.beforeValidate/beforeSubmit`.
|
|
296
|
+
- `enableReactiveValidation()` injeta `behavior.reactiveValidation=true` com debounce padrao.
|
|
297
|
+
|
|
298
|
+
Cobertura de paths JSON:
|
|
299
|
+
- `Active`: todo objeto que passa em `validateConfig`.
|
|
300
|
+
- `Partial`: validacao estrutural/funcional depende do escopo de regras de `FormConfigService.validateConfig`.
|
|
301
|
+
|
|
302
|
+
### 4. Exemplo Minimo
|
|
303
|
+
```html
|
|
304
|
+
<form-json-config-editor
|
|
305
|
+
[config]="formConfig"
|
|
306
|
+
(validationChange)="onJsonValidation($event)"
|
|
307
|
+
(configChange)="onJsonApply($event)"
|
|
308
|
+
></form-json-config-editor>
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
### 5. Exemplo Corporativo (telemetria + gate de aplicacao)
|
|
312
|
+
```ts
|
|
313
|
+
onJsonValidation(result: JsonValidationResult) {
|
|
314
|
+
this.canApply = result.isValid;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
onEditorEvent(event: JsonEditorEvent) {
|
|
318
|
+
audit.log('form-json-editor', event.type, { valid: event.payload.isValid });
|
|
319
|
+
}
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
```html
|
|
323
|
+
<form-json-config-editor
|
|
324
|
+
[config]="workingConfig"
|
|
325
|
+
(validationChange)="onJsonValidation($event)"
|
|
326
|
+
(editorEvent)="onEditorEvent($event)"
|
|
327
|
+
(configChange)="commitDraft($event)"
|
|
328
|
+
></form-json-config-editor>
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
### 6. Problemas Comuns e Armadilhas
|
|
332
|
+
1. Esperar `configChange` a cada digitacao.
|
|
333
|
+
Correcao: `configChange` so sai em `Aplicar JSON`.
|
|
334
|
+
|
|
335
|
+
2. Tratar `isValidJson` como garantia de regra de negocio final.
|
|
336
|
+
Correcao: e validacao do contrato local; politica de negocio continua no host/backend.
|
|
337
|
+
|
|
338
|
+
3. Aplicar JSON sem observar `validationChange`.
|
|
339
|
+
Correcao: use `validationChange` para controlar UX de bloqueio/liberacao.
|
|
340
|
+
|
|
341
|
+
4. Assumir que `formatJson` corrige erros semanticos.
|
|
342
|
+
Correcao: formatacao so normaliza indentacao; nao corrige contrato invalido.
|
|
343
|
+
|
|
344
|
+
5. Sobrescrever config corrente sem versionamento/auditoria.
|
|
345
|
+
Correcao: em ambiente corporativo, registre diff e origem antes de persistir.
|
|
346
|
+
|
|
347
|
+
6. Usar helpers (`insertHooksTemplate`, `enableReactiveValidation`) como contrato final.
|
|
348
|
+
Correcao: sao aceleradores de autoria, nao template normativo obrigatorio.
|
|
349
|
+
|
|
350
|
+
### 7. Referencias Cruzadas
|
|
351
|
+
- Orquestrador superior: `projects/praxis-dynamic-form/src/lib/config-editor/praxis-dynamic-form-config-editor.ts`
|
|
352
|
+
- Service de validacao/carga: `projects/praxis-dynamic-form/src/lib/services/form-config.service.ts`
|
|
353
|
+
- Modelo base: `projects/praxis-core/src/lib/models/form/form-config.model.ts`
|
|
354
|
+
|
|
355
|
+
### 8. Premissas
|
|
356
|
+
- O host controla persistencia definitiva do JSON aplicado.
|
|
357
|
+
- O editor nao executa hooks nem simula submit; apenas valida/edita configuracao.
|
|
358
|
+
- Integracao corporativa deve incluir rastreio de alteracoes (quem/quando/o que).
|
|
359
|
+
|
|
360
|
+
### 9. Relatorio de Validacao Estrutural
|
|
361
|
+
- Visao geral: PASS
|
|
362
|
+
- Inputs/outputs e tipos de evento: PASS
|
|
363
|
+
- Mapeamento de comportamento: PASS
|
|
364
|
+
- Exemplo minimo: PASS
|
|
365
|
+
- Exemplo corporativo: PASS
|
|
366
|
+
- Problemas comuns (>=5): PASS
|
|
367
|
+
- Referencias cruzadas: PASS
|
|
368
|
+
- Premissas explicitas: PASS
|
|
369
|
+
|
|
370
|
+
## JSON path index
|
|
371
|
+
|
|
372
|
+
| Path | Type | Required | Default | Status | Notes |
|
|
373
|
+
| --- | --- | --- | --- | --- | --- |
|
|
374
|
+
| `$` | `FormConfig` | Yes | `{ "sections": [] }` | Active | Raiz do JSON editado e emitido por `configChange`. |
|
|
375
|
+
| `sections[]` | `FormSection[]` | Conditional | `[]` | Active | Estrutura principal do formulário validada localmente via parse/JSON. |
|
|
376
|
+
| `behavior.reactiveValidation` | `boolean` | No | `false` | Partial | Pode ser inserido pelo helper `enableReactiveValidation()`. |
|
|
377
|
+
| `behavior.reactiveValidationDebounceMs` | `number` | No | `300` | Partial | Usado como sugestão de configuração no helper de validação reativa. |
|
|
378
|
+
| `hooks.*` | `object` | No | n/a | Partial | Pode ser inserido por `insertHooksTemplate()` para acelerar autoria. |
|
|
379
|
+
|
|
380
|
+
## Events
|
|
381
|
+
|
|
382
|
+
| Event | Payload | Trigger | Stability | Notes |
|
|
383
|
+
| --- | --- | --- | --- | --- |
|
|
384
|
+
| `configChange` | `FormConfig` | Apenas em `applyJsonChanges()` com JSON valido. | Partial | Preservado da documentação anterior. |
|
|
385
|
+
| `validationChange` | `JsonValidationResult` | Em cada ciclo de validacao (debounce 300ms). | Partial | Preservado da documentação anterior. |
|
|
386
|
+
| `editorEvent` | `JsonEditorEvent` | Eventos `validation`, `format` e `apply`. | Partial | Preservado da documentação anterior. |
|
|
387
|
+
|
|
388
|
+
## Styling API
|
|
389
|
+
|
|
390
|
+
| Token/Class | Scope | Purpose | Notes |
|
|
391
|
+
| --- | --- | --- | --- |
|
|
392
|
+
| `.json-config-editor` | root container | layout principal do editor JSON | Container flex de alto nível para card + editor. |
|
|
393
|
+
| `.educational-card` | summary card | contexto educacional e status de uso | Card introdutório com destaque visual e orientação de uso. |
|
|
394
|
+
| `.json-editor-toolbar` | toolbar | ações de refresh/format/apply e templates | Barra de ações com fallback responsivo para telas menores. |
|
|
395
|
+
| `.json-textarea` | editor field | edição monoespaçada de JSON | Ajusta fonte, overflow e legibilidade para payloads longos. |
|
|
396
|
+
| `.badge.ok/.err/.warn` | status badges | feedback de validação e alteração | Estado visual de JSON válido/inválido e mudanças pendentes. |
|
|
397
|
+
|
|
398
|
+
## Editor and tooling notes
|
|
399
|
+
|
|
400
|
+
- Cobertura de editor/tooling foi separada da cobertura de runtime para evitar confusao de suporte.
|
|
401
|
+
- Quando nao houver evidencia direta no codigo, o status deve permanecer not yet verified.
|
|
402
|
+
|
|
403
|
+
## Examples
|
|
404
|
+
|
|
405
|
+
### Minimal valid
|
|
406
|
+
|
|
407
|
+
```json
|
|
408
|
+
{
|
|
409
|
+
"sections": []
|
|
410
|
+
}
|
|
411
|
+
```
|
|
412
|
+
|
|
413
|
+
### Typical/common
|
|
414
|
+
|
|
415
|
+
```json
|
|
416
|
+
{
|
|
417
|
+
"sections": [
|
|
418
|
+
{
|
|
419
|
+
"id": "main",
|
|
420
|
+
"title": "Dados",
|
|
421
|
+
"rows": []
|
|
422
|
+
}
|
|
423
|
+
],
|
|
424
|
+
"actions": []
|
|
425
|
+
}
|
|
426
|
+
```
|
|
427
|
+
|
|
428
|
+
### Advanced
|
|
429
|
+
|
|
430
|
+
```json
|
|
431
|
+
{
|
|
432
|
+
"sections": [],
|
|
433
|
+
"behavior": {
|
|
434
|
+
"reactiveValidation": true,
|
|
435
|
+
"reactiveValidationDebounceMs": 300
|
|
436
|
+
},
|
|
437
|
+
"hooks": {
|
|
438
|
+
"beforeSubmit": [
|
|
439
|
+
{
|
|
440
|
+
"type": "custom",
|
|
441
|
+
"handler": "sanitizePayload"
|
|
442
|
+
}
|
|
443
|
+
]
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
```
|
|
447
|
+
|
|
448
|
+
### Enterprise scenario
|
|
449
|
+
|
|
450
|
+
```json
|
|
451
|
+
{
|
|
452
|
+
"sections": [],
|
|
453
|
+
"metadata": {
|
|
454
|
+
"version": "2026.03",
|
|
455
|
+
"owner": "platform-team"
|
|
456
|
+
},
|
|
457
|
+
"behavior": {
|
|
458
|
+
"reactiveValidation": true,
|
|
459
|
+
"reactiveValidationDebounceMs": 500
|
|
460
|
+
},
|
|
461
|
+
"hooks": {
|
|
462
|
+
"beforeSubmit": [
|
|
463
|
+
{
|
|
464
|
+
"type": "custom",
|
|
465
|
+
"handler": "auditBeforeSubmit"
|
|
466
|
+
}
|
|
467
|
+
]
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
```
|
|
471
|
+
|
|
472
|
+
## Known limitations and mismatches
|
|
473
|
+
|
|
474
|
+
| Path/Behavior | Observed behavior (runtime) | Desired behavior | Impact | Tracking issue | Target fix |
|
|
475
|
+
| --- | --- | --- | --- | --- | --- |
|
|
476
|
+
| none-reported | Nenhum mismatch explícito detectado na evidência preservada. | Manter monitoramento contínuo. | Baixo | n/a | n/a |
|
|
477
|
+
|
|
478
|
+
## Compatibility and migration notes
|
|
479
|
+
|
|
480
|
+
| Concern | Affected versions | Migration action | Deadline | Notes |
|
|
481
|
+
| --- | --- | --- | --- | --- |
|
|
482
|
+
| legacy aliases and mixed status vocabulary | pre-canonical docs | unificar para taxonomia canonica (Active/Partial/Declared-only/...) | next-doc-cycle | manter backward compatibility documentada |
|
|
483
|
+
|
|
484
|
+
## Source references
|
|
485
|
+
|
|
486
|
+
| Source type | Path/URL | Why it is source of truth | Last verified (YYYY-MM-DD) | Notes |
|
|
487
|
+
| --- | --- | --- | --- | --- |
|
|
488
|
+
| local-file | projects/praxis-dynamic-form/src/lib/json-config-editor/json-config-editor.component.ts | Evidencia de implementacao e contrato. | 2026-03-05 | referencia preservada da versao anterior |
|
|
489
|
+
| local-file | projects/praxis-dynamic-form/src/lib/json-config-editor/json-config-editor.component.spec.ts | Evidencia de implementacao e contrato. | 2026-03-05 | referencia preservada da versao anterior |
|
|
490
|
+
| local-file | projects/praxis-dynamic-form/src/lib/services/form-config.service.ts | Evidencia de implementacao e contrato. | 2026-03-05 | referencia preservada da versao anterior |
|
|
491
|
+
| local-file | projects/praxis-core/src/lib/models/form/form-config.model.ts | Evidencia de implementacao e contrato. | 2026-03-05 | referencia preservada da versao anterior |
|