@praxisui/dynamic-form 8.0.0-beta.2 → 8.0.0-beta.20

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.
@@ -0,0 +1,432 @@
1
+ ---
2
+ title: "praxis-layout-editor JSON API (Canonical)"
3
+ slug: "praxis-layout-editor-json-api"
4
+ doc_type: "api-reference"
5
+ component: "praxis-layout-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 praxis-layout-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/layout-editor/layout-editor.component.ts"
22
+ - "projects/praxis-dynamic-form/src/lib/layout-editor/layout-editor.component.spec.ts"
23
+ - "projects/praxis-core/src/lib/models/form/form-config.model.ts"
24
+ source_of_truth_last_verified: "2026-03-05"
25
+ last_updated: "2026-03-05"
26
+ toc: true
27
+ sidebar: true
28
+ tags:
29
+ - "json-api"
30
+ - "canonical-contract"
31
+ - "praxis-layout-editor"
32
+ api_stability: "canonical"
33
+ schema_verified: true
34
+ runtime_verified: false
35
+ editor_coverage_verified: false
36
+ runtime_scope: "public"
37
+ legacy_paths_present: false
38
+ has_known_mismatches: true
39
+ related_components:
40
+ - "praxis-table"
41
+ ---
42
+
43
+ # praxis-layout-editor
44
+
45
+ Este documento e a referencia canonica da API JSON de praxis-layout-editor.
46
+
47
+ ## Summary
48
+
49
+ - Tipo documental: API reference canonica de contrato JSON.
50
+ - Source of truth: runtime e codigo declarados no frontmatter.
51
+ - Objetivo operacional: consulta rapida, auditavel e deterministica sob pressao.
52
+ - Resumo funcional: `praxis-layout-editor` é o editor visual de estrutura de formulário (`sections/rows/columns/items`) com drag and drop. Ele recebe um `FormConfig`, ordena campos da API e blocos visuais em `FormColumn.items[]`, mantém `fields[]` apenas como projeção de campos e emite versões atualizadas do layout conforme a interação.
53
+
54
+ ## Scope and positioning
55
+
56
+ - Escopo: contrato JSON publico e limites de comportamento observavel.
57
+ - Fora de escopo: tutorial de adocao e walkthrough operacional detalhado.
58
+ - Posicionamento: referencia canonicamente governada para consumidores, arquitetos e mantenedores.
59
+
60
+ ## Source of truth
61
+
62
+ | Source | Kind | Notes |
63
+ | --- | --- | --- |
64
+ | projects/praxis-dynamic-form/src/lib/layout-editor/layout-editor.component.ts | runtime-code | Source de implementacao declarado no repositorio. |
65
+ | projects/praxis-dynamic-form/src/lib/layout-editor/layout-editor.component.spec.ts | runtime-code | Source de implementacao declarado no repositorio. |
66
+ | projects/praxis-core/src/lib/models/form/form-config.model.ts | runtime-code | Source de implementacao declarado no repositorio. |
67
+
68
+ ## Support legend
69
+
70
+ - Active: suportado e observado no runtime atual.
71
+ - Partial: suporte parcial, com restricoes conhecidas.
72
+ - Declared-only: declarado em tipos/schema sem ligacao runtime confirmada.
73
+ - Schema-only: presente em schema/modelo sem confirmacao de execucao.
74
+ - Deprecated: mantido por compatibilidade legada com migracao prevista.
75
+
76
+ ## Contract classification
77
+
78
+ ### Canonical paths (public contract)
79
+
80
+ | Path | Type | Required | Default | Status | Notes |
81
+ | --- | --- | --- | --- | --- | --- |
82
+ | `sections[]` | `FormSection[]` | Sim | `[]` | Active | Base estrutural do canvas. |
83
+ | `sections[].rows[]` | `FormRow[]` | Sim | `[]` | Active | Grade interna por seção. |
84
+ | `sections[].rows[].columns[]` | `FormColumn[]` | Sim | `[]` | Active | Unidades de drop de campos e blocos visuais. |
85
+ | `sections[].rows[].columns[].items[]` | `FormLayoutItem[]` | Não | derivado de `fields[]` quando ausente | Active | Ordem canônica de campos e blocos visuais. |
86
+ | `sections[].rows[].columns[].fields[]` | `string[]` | Não | projeção de `items[]` | Active | Projeção/migração dos itens de campo; não representa bloco visual. |
87
+ | `fieldMetadata[]` | `FieldMetadata[]` | Sim | `[]` | Active | Fonte para lista de campos disponíveis. |
88
+ | `fieldMetadata[].formHidden` | `boolean` | Não | `false` | Active | Campos ocultos não aparecem na palette. |
89
+ | `actions/behavior/messages/hooks/api/...` | objeto | Não | n/a | Declared-only | Não manipulados neste editor de layout. |
90
+
91
+ ### Supported legacy paths
92
+
93
+ Nenhum path legado suportado foi identificado nesta revisão baseada em evidência textual preservada.
94
+
95
+ ### Internal-only paths
96
+
97
+ | Path | Internal consumer | Runtime presence | Public support | Notes |
98
+ | --- | --- | --- | --- | --- |
99
+ | not-yet-mapped | not-yet-verified | not-yet-verified | No | Caminhos internos nao mapeados explicitamente nesta revisao automatizada. |
100
+
101
+ ### Experimental paths
102
+
103
+ | Path | Enablement (flag/guard) | Stability | Rollout notes | Notes |
104
+ | --- | --- | --- | --- | --- |
105
+ | not-yet-mapped | not-yet-verified | Experimental | not-yet-verified | Registrar somente quando houver evidencia em runtime/codigo. |
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
+ | sections[] | Configuração top-level identificada na referência preservada. | not-yet-verified | component-defined | 4 path(s) mapeado(s), status predominante Active. |
118
+ | fieldMetadata[] | Configuração top-level identificada na referência preservada. | not-yet-verified | component-defined | 2 path(s) mapeado(s), status predominante Active. |
119
+ | actions/behavior/messages/hooks/api/ | Configuração top-level identificada na referência preservada. | not-yet-verified | component-defined | 1 path(s) mapeado(s), status predominante Declared-only. |
120
+
121
+ ### Nested configuration blocks
122
+
123
+ | Path | Type | Required | Default | Constraints | Notes |
124
+ | --- | --- | --- | --- | --- | --- |
125
+ | `sections[]` | `FormSection[]` | Sim | `[]` | component-defined | Base estrutural do canvas. |
126
+ | `sections[].rows[]` | `FormRow[]` | Sim | `[]` | component-defined | Grade interna por seção. |
127
+ | `sections[].rows[].columns[]` | `FormColumn[]` | Sim | `[]` | component-defined | Unidades de drop de campos e blocos visuais. |
128
+ | `sections[].rows[].columns[].items[]` | `FormLayoutItem[]` | Não | derivado de `fields[]` quando ausente | component-defined | Ordem canônica de campos e blocos visuais. |
129
+ | `sections[].rows[].columns[].fields[]` | `string[]` | Não | projeção de `items[]` | component-defined | Projeção/migração dos itens de campo. |
130
+ | `fieldMetadata[]` | `FieldMetadata[]` | Sim | `[]` | component-defined | Fonte para lista de campos disponíveis. |
131
+ | `fieldMetadata[].formHidden` | `boolean` | Não | `false` | component-defined | Campos ocultos não aparecem na palette. |
132
+ | `actions/behavior/messages/hooks/api/...` | objeto | Não | n/a | component-defined | Não manipulados neste editor de layout. |
133
+
134
+ ### Input bindings
135
+
136
+ | Binding/Path | Type | Required | Source | Runtime normalization | Notes |
137
+ | --- | --- | --- | --- | --- | --- |
138
+ | `config` | `FormConfig` | Sim | component-input | not-yet-verified | Fonte do layout e dos campos disponiveis. |
139
+
140
+ ### Output events
141
+
142
+ | Event | Payload | Trigger | Stability | Notes |
143
+ | --- | --- | --- | --- | --- |
144
+ | `configChange` | `FormConfig` | Toda alteracao estrutural (add/remove/reorder/drop/update style). | Partial | Preservado da documentação anterior. |
145
+ | `select` | `{ type, sectionIndex?, rowIndex?, columnIndex?, fieldName? }` | Alteracao de foco/selecao no editor. | Partial | Preservado da documentação anterior. |
146
+
147
+ ### External side channels
148
+
149
+ | Channel | Direction | Contract | Failure mode | Notes |
150
+ | --- | --- | --- | --- | --- |
151
+ | host/services/storage | bidirectional | see-detailed-api | not-yet-verified | Side channels dependem do componente e do host consumidor. |
152
+
153
+ ### Host/runtime dependencies
154
+
155
+ | Dependency | Required | Environment | Purpose | Notes |
156
+ | --- | --- | --- | --- | --- |
157
+ | see-source-of-truth | true | browser/dev/prod/ssr | runtime linkage | Confirmar por componente quando necessario. |
158
+
159
+ ## Coverage matrix
160
+
161
+ | Surface | Verified | Coverage status | Evidence | Notes |
162
+ | --- | --- | --- | --- | --- |
163
+ | Runtime | false | Partial | source_of_truth + conteudo preservado | Revisao estrutural concluida; validacao comportamental fina pode exigir follow-up. |
164
+ | Schema/Types | true | Partial | interfaces/modelos citados | Mapeamento formal de todos os campos ainda pode requerer refinamento. |
165
+ | Editor/Tooling | false | Partial | secoes de editor quando presentes | Cobertura de editor/tooling nem sempre confirmada por evidencia direta. |
166
+
167
+ ## Runtime coverage boundaries
168
+
169
+ - Cobertura consolidada com base em documentacao existente e source of truth declarado.
170
+ - Comportamentos fora de evidencia direta foram marcados como not-yet-verified ou Partial.
171
+ - Compatibilidade legada, quando detectada, foi separada em classificacao explicita.
172
+
173
+ ## Resolution model
174
+
175
+ ### Merge order
176
+
177
+ 1. defaults do componente
178
+ 2. contrato JSON recebido
179
+ 3. overrides de host/runtime
180
+ 4. normalizacoes internas
181
+
182
+ ### Fallback order
183
+
184
+ contrato explicito -> aliases legados (quando suportados) -> defaults internos -> comportamento seguro
185
+
186
+ ### Override points
187
+
188
+ - inputs publicos do componente
189
+ - configuracao JSON de runtime
190
+ - integracoes de host (servicos/tokens/adapters)
191
+
192
+ ### Runtime normalization
193
+
194
+ Campos e aliases preservados do documento anterior devem convergir progressivamente para paths canonicos declarados.
195
+
196
+ ### Precedence rules
197
+
198
+ Quando houver conflito entre alias e path canonico, priorizar path canonico e manter alias apenas para backward compatibility.
199
+
200
+ ## Validation and error semantics
201
+
202
+ ### Validation model
203
+
204
+ | Path/Rule | Validation phase | Behavior on fail | Error code / warning | Notes |
205
+ | --- | --- | --- | --- | --- |
206
+ | see-detailed-api | runtime | warn-or-reject | not-yet-standardized | Semantica de validacao preservada do documento anterior. |
207
+
208
+ ### Error semantics
209
+
210
+ Erros devem ser classificados em warnings recuperaveis versus falhas bloqueantes. Quando a evidencia nao estiver explicita, tratar como not yet verified.
211
+
212
+ ### Fail-open / fail-closed behavior
213
+
214
+ | Condition | Mode | Runtime behavior | Consumer impact |
215
+ | --- | --- | --- | --- |
216
+ | invalid-or-unknown-field | component-defined | not-yet-verified | Variavel por componente; requer verificacao em runtime. |
217
+
218
+ ### Invalid or unknown field handling
219
+
220
+ - Campos desconhecidos: comportamento depende da estrategia do componente (ignore, warn ou reject).
221
+ - Campos invalidos: podem gerar fallback, warning ou falha conforme implementacao.
222
+ - Registrar divergencias observadas em Known limitations and mismatches.
223
+
224
+ ### Runtime warnings vs hard failures
225
+
226
+ | Condition | Severity | Observability | Consumer action |
227
+ | --- | --- | --- | --- |
228
+ | partial-or-declared-only-coverage | warning | logs/eventos do componente | confirmar ligacao runtime antes de uso critico |
229
+
230
+ ## Detailed API
231
+
232
+ ### Preserved technical reference (normalized from previous revision)
233
+
234
+ ### 1. Visao Geral e Quando Usar
235
+ `praxis-layout-editor` e o editor visual de estrutura de formulario (`sections/rows/columns/items`) com drag and drop.
236
+ Ele recebe um `FormConfig`, ordena campos da API e blocos visuais em
237
+ `FormColumn.items[]` e emite versoes atualizadas do layout conforme a
238
+ interacao.
239
+
240
+ Use quando precisar de:
241
+ - montagem visual de secoes e colunas;
242
+ - distribuicao de campos e blocos visuais por drag and drop;
243
+ - reordenacao de secoes, campos e itens visuais;
244
+ - feedback de selecao de elemento (section/row/column/field/visualBlock) para editores auxiliares.
245
+
246
+ ### 2. API do Componente
247
+
248
+ #### 2.1 Inputs
249
+ | Input | Tipo | Obrigatorio | Status | Comportamento |
250
+ | --- | --- | --- | --- | --- |
251
+ | `config` | `FormConfig` | Sim | Active | Fonte do layout e dos campos disponiveis. |
252
+
253
+ #### 2.2 Outputs
254
+ | Output | Payload | Quando emite |
255
+ | --- | --- | --- |
256
+ | `configChange` | `FormConfig` | Toda alteracao estrutural (add/remove/reorder/drop/update style). |
257
+ | `select` | `{ type, sectionIndex?, rowIndex?, columnIndex?, fieldName? }` | Alteracao de foco/selecao no editor. |
258
+
259
+ ### 3. Cobertura JSON de `config`
260
+ | Caminho | Status | Runtime notes |
261
+ | --- | --- | --- |
262
+ | `sections[]` | Active | Base estrutural do canvas. |
263
+ | `sections[].rows[]` | Active | Grade interna por secao. |
264
+ | `sections[].rows[].columns[]` | Active | Unidades de drop de campos. |
265
+ | `sections[].rows[].columns[].items[]` | Active | Ordem canônica de campos e blocos visuais. |
266
+ | `sections[].rows[].columns[].fields[]` | Active | Projeção/migração dos itens de campo. |
267
+ | `fieldMetadata[]` | Active | Fonte para lista de campos disponíveis. |
268
+ | `fieldMetadata[].formHidden` | Active | Campos ocultos não aparecem na palette. |
269
+ | `actions/behavior/messages/hooks/api/...` | Declared-only | Não manipulados neste editor de layout. |
270
+
271
+ Extensoes de runtime no editor (fora do contrato canonico):
272
+ - `section.gapCustomized` (controle interno de aplicacao de gap).
273
+
274
+ ### 4. Mapeamento de Comportamento
275
+ - Palette de campos:
276
+ - `availableFields` = `fieldMetadata` não oculto e ainda não alocado em `sections[].rows[].columns[].items[]` como item `kind: 'field'`.
277
+ - A ação "Campos da API" reinsere apenas campos já existentes em `fieldMetadata[]`; ela grava `kind: 'field'` em `items[]` e atualiza `fields[]` somente como projeção derivada.
278
+ - Estado colapsado da palette é persistido em `LayoutPrefsService`.
279
+ - Blocos visuais:
280
+ - A ação "Adicionar bloco visual" oferece presets de authoring internos para texto, aviso, separador, card informativo, `callout`, `keyValueList`, `recordSummary`, `disclosure` e `emptyState`.
281
+ - Cada preset gera `RichContentDocument` válido em item `kind: 'richContent'`; presets não criam novo `kind`, não escrevem em `fieldMetadata[]` e não entram no payload de submit.
282
+ - Presets como `emptyState` já podem semear `actionButton`, e o runtime do formulário encaminha essas ações pela mesma trilha de `customAction/globalAction` usada pelos demais CTAs do componente.
283
+ - O guia didático completo está em `projects/praxis-dynamic-form/docs/layout-items-visual-blocks.md`.
284
+ - Drag and drop:
285
+ - move entre colunas, entre linhas/secoes e entre palette/canvas.
286
+ - reordenacao de secoes via `dropSection`.
287
+ - Operacoes estruturais:
288
+ - `addSection`, `removeSection`, `onSectionUpdated`, `onApplyStyleToAll`.
289
+ - Emissao:
290
+ - toda alteracao gera novo `FormConfig` em `configChange`.
291
+
292
+ ### 5. Exemplo Minimo
293
+ ```html
294
+ <praxis-layout-editor
295
+ [config]="editedConfig"
296
+ (configChange)="onLayoutConfigChange($event)"
297
+ ></praxis-layout-editor>
298
+ ```
299
+
300
+ ### 6. Exemplo Corporativo (inspector lateral por selecao)
301
+ ```html
302
+ <praxis-layout-editor
303
+ [config]="editedConfig"
304
+ (configChange)="editedConfig = $event"
305
+ (select)="onLayoutSelect($event)"
306
+ ></praxis-layout-editor>
307
+ ```
308
+
309
+ ```ts
310
+ onLayoutSelect(sel: any) {
311
+ if (sel?.type === 'column') {
312
+ this.openColumnInspector(sel.sectionIndex, sel.rowIndex, sel.columnIndex);
313
+ }
314
+ }
315
+ ```
316
+
317
+ ### 7. Problemas Comuns e Armadilhas
318
+ 1. Passar `config` sem `sections` ou sem `fieldMetadata`.
319
+ Correcao: envie objeto completo; faltas reduzem operacoes do editor.
320
+
321
+ 2. Esperar que campos com `formHidden=true` aparecam na palette.
322
+ Correcao: esses campos sao filtrados por design.
323
+
324
+ 3. Alterar estado externo sem refletir de volta em `[config]`.
325
+ Correcao: trate `configChange` como fonte oficial de atualizacao no host.
326
+
327
+ 4. Assumir que este editor atualiza `actions/messages/behavior`.
328
+ Correcao: ele cobre layout; demais blocos sao editados em componentes dedicados.
329
+
330
+ 5. Ignorar `select` e perder contexto de qual elemento esta em foco.
331
+ Correcao: conecte `select` com painel lateral/inspector quando houver.
332
+
333
+ 6. Persistir extensoes internas (`gapCustomized`) como se fossem contrato estavel.
334
+ Correcao: trate como detalhe de editor; sanitize se necessario no pipeline.
335
+
336
+ ### 8. Referencias Cruzadas
337
+ - Orquestrador superior: `projects/praxis-dynamic-form/src/lib/config-editor/praxis-dynamic-form-config-editor.ts`
338
+ - Componentes auxiliares: `section-configurator.component.ts`, `field-configurator.component.ts`
339
+ - Modelo base: `projects/praxis-core/src/lib/models/form/form-config.model.ts`
340
+
341
+ ### 9. Premissas
342
+ - O host e responsavel por persistencia e versionamento da configuracao resultante.
343
+ - Integridade de `fieldMetadata.name` deve ser preservada para evitar perda de mapeamento.
344
+ - Validacao de regras de negocio nao e responsabilidade deste editor visual.
345
+
346
+ ### 10. Relatorio de Validacao Estrutural
347
+ - Visao geral: PASS
348
+ - Inputs/outputs: PASS
349
+ - Cobertura de JSON por status: PASS
350
+ - Mapeamento de comportamento: PASS
351
+ - Exemplo minimo: PASS
352
+ - Exemplo corporativo: PASS
353
+ - Problemas comuns (>=5): PASS
354
+ - Referencias cruzadas: PASS
355
+ - Premissas explicitas: PASS
356
+
357
+ ## JSON path index
358
+
359
+ | Path | Type | Required | Default | Status | Notes |
360
+ | --- | --- | --- | --- | --- | --- |
361
+ | `sections[]` | `FormSection[]` | Sim | `[]` | Active | Base estrutural do canvas. |
362
+ | `sections[].rows[]` | `FormRow[]` | Sim | `[]` | Active | Grade interna por seção. |
363
+ | `sections[].rows[].columns[]` | `FormColumn[]` | Sim | `[]` | Active | Unidades de drop de campos e blocos visuais. |
364
+ | `sections[].rows[].columns[].items[]` | `FormLayoutItem[]` | Não | derivado de `fields[]` quando ausente | Active | Ordem canônica de campos e blocos visuais. |
365
+ | `sections[].rows[].columns[].fields[]` | `string[]` | Não | projeção de `items[]` | Active | Projeção/migração dos itens de campo. |
366
+ | `fieldMetadata[]` | `FieldMetadata[]` | Sim | `[]` | Active | Fonte para lista de campos disponíveis. |
367
+ | `fieldMetadata[].formHidden` | `boolean` | Não | `false` | Active | Campos ocultos não aparecem na palette. |
368
+ | `actions/behavior/messages/hooks/api/...` | objeto | Não | n/a | Declared-only | Não manipulados neste editor de layout. |
369
+
370
+ ## Events
371
+
372
+ | Event | Payload | Trigger | Stability | Notes |
373
+ | --- | --- | --- | --- | --- |
374
+ | `configChange` | `FormConfig` | Toda alteracao estrutural (add/remove/reorder/drop/update style). | Partial | Preservado da documentação anterior. |
375
+ | `select` | `{ type, sectionIndex?, rowIndex?, columnIndex?, fieldName? }` | Alteracao de foco/selecao no editor. | Partial | Preservado da documentação anterior. |
376
+
377
+ ## Styling API
378
+
379
+ | Token/Class | Scope | Purpose | Notes |
380
+ | --- | --- | --- | --- |
381
+ | see-detailed-api | component | styling/runtime | Consolidar naming canonico quando aplicavel. |
382
+
383
+ ## Editor and tooling notes
384
+
385
+ - Cobertura de editor/tooling foi separada da cobertura de runtime para evitar confusao de suporte.
386
+ - Quando nao houver evidencia direta no codigo, o status deve permanecer not yet verified.
387
+
388
+ ## Examples
389
+
390
+ ### Minimal valid
391
+
392
+ ```json
393
+ {}
394
+ ```
395
+
396
+ ### Typical/common
397
+
398
+ ```json
399
+ {}
400
+ ```
401
+
402
+ ### Advanced
403
+
404
+ ```json
405
+ {}
406
+ ```
407
+
408
+ ### Enterprise scenario
409
+
410
+ ```json
411
+ {}
412
+ ```
413
+
414
+ ## Known limitations and mismatches
415
+
416
+ | Path/Behavior | Observed behavior (runtime) | Desired behavior | Impact | Tracking issue | Target fix |
417
+ | --- | --- | --- | --- | --- | --- |
418
+ | coverage/mapping | Evidência textual preservada indica itens Partial/Declared-only. | Cobertura confirmada por evidência runtime + schema + editor. | Pode gerar uso de paths não totalmente ligados. | to-be-linked | next-doc-cycle |
419
+
420
+ ## Compatibility and migration notes
421
+
422
+ | Concern | Affected versions | Migration action | Deadline | Notes |
423
+ | --- | --- | --- | --- | --- |
424
+ | legacy aliases and mixed status vocabulary | pre-canonical docs | unificar para taxonomia canonica (Active/Partial/Declared-only/...) | next-doc-cycle | manter backward compatibility documentada |
425
+
426
+ ## Source references
427
+
428
+ | Source type | Path/URL | Why it is source of truth | Last verified (YYYY-MM-DD) | Notes |
429
+ | --- | --- | --- | --- | --- |
430
+ | local-file | projects/praxis-dynamic-form/src/lib/layout-editor/layout-editor.component.ts | Evidencia de implementacao e contrato. | 2026-03-05 | referencia preservada da versao anterior |
431
+ | local-file | projects/praxis-dynamic-form/src/lib/layout-editor/layout-editor.component.spec.ts | Evidencia de implementacao e contrato. | 2026-03-05 | referencia preservada da versao anterior |
432
+ | 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 |