@praxisui/list 8.0.0-beta.19 → 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,523 @@
1
+ ---
2
+ title: "praxis-list-config-editor JSON API (Canonical)"
3
+ slug: "praxis-list-config-editor-json-api"
4
+ doc_type: "api-reference"
5
+ component: "praxis-list-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 praxis-list-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-list/src/lib/editors/list-config-editor.component.ts"
22
+ - "projects/praxis-list/src/lib/editors/list-config-editor.component.html"
23
+ - "projects/praxis-list/src/lib/models/list-config.model.ts"
24
+ - "projects/praxis-list/src/lib/utils/templating-inference.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
+ - "praxis-list-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: true
40
+ related_components: []
41
+ ---
42
+
43
+ # praxis-list-config-editor
44
+
45
+ Este documento e a referencia canonica da API JSON de praxis-list-config-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 herdado: Referencia canonica da JSON API do `praxis-list-config-editor` (superficie de autoria do `ListAuthoringDocument`).
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-list/src/lib/editors/list-config-editor.component.ts | runtime-code | Source de implementacao declarado no repositorio. |
65
+ | projects/praxis-list/src/lib/editors/list-config-editor.component.html | template-style | Source de implementacao declarado no repositorio. |
66
+ | projects/praxis-list/src/lib/models/list-config.model.ts | runtime-code | Source de implementacao declarado no repositorio. |
67
+ | projects/praxis-list/src/lib/utils/templating-inference.ts | runtime-code | Source de implementacao declarado no repositorio. |
68
+
69
+ ## Support legend
70
+
71
+ - Active: suportado e observado no runtime atual.
72
+ - Partial: suporte parcial, com restricoes conhecidas.
73
+ - Declared-only: declarado em tipos/schema sem ligacao runtime confirmada.
74
+ - Schema-only: presente em schema/modelo sem confirmacao de execucao.
75
+ - Deprecated: mantido por compatibilidade legada com migracao prevista.
76
+
77
+ ## Contract classification
78
+
79
+ ### Canonical paths (public contract)
80
+
81
+ | Path | Type | Required | Default | Status | Notes |
82
+ | --- | --- | --- | --- | --- | --- |
83
+ | `id` | not-specified | not-specified | n/a | Declared-only | Preservado no objeto; sem campo dedicado no editor. |
84
+ | `dataSource.resourcePath` | not-specified | not-specified | n/a | Active | Campo principal para schema remoto. |
85
+ | `dataSource.query` | not-specified | not-specified | n/a | Active | JSON editavel com validacao sintatica. |
86
+ | `dataSource.sort` | not-specified | not-specified | n/a | Active | Gerado por `sortField/sortDir` e por UI sort rows. |
87
+ | `dataSource.data` | not-specified | not-specified | n/a | Declared-only | Nao possui editor dedicado para dataset local. |
88
+ | `layout.variant` | not-specified | not-specified | n/a | Active | `list/cards/tiles`. |
89
+ | `layout.model` | not-specified | not-specified | n/a | Active | `standard/media/hotel`. |
90
+ | `layout.lines` | not-specified | not-specified | n/a | Active | `1/2/3`. |
91
+ | `layout.density` | not-specified | not-specified | n/a | Active | `default/comfortable/compact`. |
92
+ | `layout.dividers` | not-specified | not-specified | n/a | Active | `none/between/all`. |
93
+ | `layout.groupBy` | not-specified | not-specified | n/a | Active | Texto livre ou campo de schema quando disponivel. |
94
+ | `layout.stickySectionHeader` | not-specified | not-specified | n/a | Active | Toggle dedicado. |
95
+ | `layout.virtualScroll` | not-specified | not-specified | n/a | Active | Toggle dedicado (mesmo que runtime possa nao aplicar). |
96
+ | `layout.pageSize` | not-specified | not-specified | n/a | Active | Numero inteiro >= 1. |
97
+
98
+ ### Supported legacy paths
99
+
100
+ Nenhum path legado suportado foi identificado nesta revisão baseada em evidência textual preservada.
101
+
102
+ ### Internal-only paths
103
+
104
+ | Path | Internal consumer | Runtime presence | Public support | Notes |
105
+ | --- | --- | --- | --- | --- |
106
+ | not-yet-mapped | not-yet-verified | not-yet-verified | No | Caminhos internos nao mapeados explicitamente nesta revisao automatizada. |
107
+
108
+ ### Experimental paths
109
+
110
+ | Path | Enablement (flag/guard) | Stability | Rollout notes | Notes |
111
+ | --- | --- | --- | --- | --- |
112
+ | not-yet-mapped | not-yet-verified | Experimental | not-yet-verified | Registrar somente quando houver evidencia em runtime/codigo. |
113
+
114
+ ## Overview
115
+
116
+ 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.
117
+
118
+ ## Public contract surface
119
+
120
+ ### Top-level configuration blocks
121
+
122
+ | Block | Purpose | Required | Merge strategy | Notes |
123
+ | --- | --- | --- | --- | --- |
124
+ | id | Configuração top-level identificada na referência preservada. | not-yet-verified | component-defined | 1 path(s) mapeado(s), status predominante Declared-only. |
125
+ | dataSource | Configuração top-level identificada na referência preservada. | not-yet-verified | component-defined | 4 path(s) mapeado(s), status predominante Active. |
126
+ | layout | Configuração top-level identificada na referência preservada. | not-yet-verified | component-defined | 9 path(s) mapeado(s), status predominante Active. |
127
+
128
+ ### Nested configuration blocks
129
+
130
+ | Path | Type | Required | Default | Constraints | Notes |
131
+ | --- | --- | --- | --- | --- | --- |
132
+ | `id` | not-specified | not-specified | n/a | component-defined | Preservado no objeto; sem campo dedicado no editor. |
133
+ | `dataSource.resourcePath` | not-specified | not-specified | n/a | component-defined | Campo principal para schema remoto. |
134
+ | `dataSource.query` | not-specified | not-specified | n/a | component-defined | JSON editavel com validacao sintatica. |
135
+ | `dataSource.sort` | not-specified | not-specified | n/a | component-defined | Gerado por `sortField/sortDir` e por UI sort rows. |
136
+ | `dataSource.data` | not-specified | not-specified | n/a | component-defined | Nao possui editor dedicado para dataset local. |
137
+ | `layout.variant` | not-specified | not-specified | n/a | component-defined | `list/cards/tiles`. |
138
+ | `layout.model` | not-specified | not-specified | n/a | component-defined | `standard/media/hotel`. |
139
+ | `layout.lines` | not-specified | not-specified | n/a | component-defined | `1/2/3`. |
140
+ | `layout.density` | not-specified | not-specified | n/a | component-defined | `default/comfortable/compact`. |
141
+ | `layout.dividers` | not-specified | not-specified | n/a | component-defined | `none/between/all`. |
142
+
143
+ ### Input bindings
144
+
145
+ | Binding/Path | Type | Required | Source | Runtime normalization | Notes |
146
+ | --- | --- | --- | --- | --- | --- |
147
+ | `config` | `PraxisListConfig` | not-specified | component-input | not-yet-verified | Base interna editada e projetada para `document.config`. |
148
+ | `document` | `ListAuthoringDocument \| undefined` | not-specified | component-input | not-yet-verified | Boundary canônico de autoria. |
149
+ | `listId` | `string \| undefined` | not-specified | component-input | not-yet-verified | Retornado no payload de save (`{ config, id }`). |
150
+
151
+ ### Output events
152
+
153
+ | Event | Payload | Trigger | Stability | Notes |
154
+ | --- | --- | --- | --- | --- |
155
+ | component-outputs | see-detailed-api | runtime-event | Partial | Eventos preservados na referência detalhada. |
156
+
157
+ ### External side channels
158
+
159
+ | Channel | Direction | Contract | Failure mode | Notes |
160
+ | --- | --- | --- | --- | --- |
161
+ | host/services/storage | bidirectional | see-detailed-api | not-yet-verified | Side channels dependem do componente e do host consumidor. |
162
+
163
+ ### Host/runtime dependencies
164
+
165
+ | Dependency | Required | Environment | Purpose | Notes |
166
+ | --- | --- | --- | --- | --- |
167
+ | see-source-of-truth | true | browser/dev/prod/ssr | runtime linkage | Confirmar por componente quando necessario. |
168
+
169
+ ## Coverage matrix
170
+
171
+ | Surface | Verified | Coverage status | Evidence | Notes |
172
+ | --- | --- | --- | --- | --- |
173
+ | Runtime | false | Partial | source_of_truth + conteudo preservado | Revisao estrutural concluida; validacao comportamental fina pode exigir follow-up. |
174
+ | Schema/Types | true | Partial | interfaces/modelos citados | Mapeamento formal de todos os campos ainda pode requerer refinamento. |
175
+ | Editor/Tooling | false | Partial | secoes de editor quando presentes | Cobertura de editor/tooling nem sempre confirmada por evidencia direta. |
176
+
177
+ ## Runtime coverage boundaries
178
+
179
+ - Cobertura consolidada com base em documentacao existente e source of truth declarado.
180
+ - Comportamentos fora de evidencia direta foram marcados como not-yet-verified ou Partial.
181
+ - Compatibilidade legada, quando detectada, foi separada em classificacao explicita.
182
+
183
+ ## Resolution model
184
+
185
+ ### Merge order
186
+
187
+ 1. defaults do componente
188
+ 2. contrato JSON recebido
189
+ 3. overrides de host/runtime
190
+ 4. normalizacoes internas
191
+
192
+ ### Fallback order
193
+
194
+ contrato explicito -> aliases legados (quando suportados) -> defaults internos -> comportamento seguro
195
+
196
+ ### Override points
197
+
198
+ - inputs publicos do componente
199
+ - configuracao JSON de runtime
200
+ - integracoes de host (servicos/tokens/adapters)
201
+
202
+ ### Runtime normalization
203
+
204
+ Campos e aliases preservados do documento anterior devem convergir progressivamente para paths canonicos declarados.
205
+
206
+ ### Precedence rules
207
+
208
+ Quando houver conflito entre alias e path canonico, priorizar path canonico e manter alias apenas para backward compatibility.
209
+
210
+ ## Validation and error semantics
211
+
212
+ ### Validation model
213
+
214
+ | Path/Rule | Validation phase | Behavior on fail | Error code / warning | Notes |
215
+ | --- | --- | --- | --- | --- |
216
+ | see-detailed-api | runtime | warn-or-reject | not-yet-standardized | Semantica de validacao preservada do documento anterior. |
217
+
218
+ ### Error semantics
219
+
220
+ Erros devem ser classificados em warnings recuperaveis versus falhas bloqueantes. Quando a evidencia nao estiver explicita, tratar como not yet verified.
221
+
222
+ ### Fail-open / fail-closed behavior
223
+
224
+ | Condition | Mode | Runtime behavior | Consumer impact |
225
+ | --- | --- | --- | --- |
226
+ | invalid-or-unknown-field | component-defined | not-yet-verified | Variavel por componente; requer verificacao em runtime. |
227
+
228
+ ### Invalid or unknown field handling
229
+
230
+ - Campos desconhecidos: comportamento depende da estrategia do componente (ignore, warn ou reject).
231
+ - Campos invalidos: podem gerar fallback, warning ou falha conforme implementacao.
232
+ - Registrar divergencias observadas em Known limitations and mismatches.
233
+
234
+ ### Runtime warnings vs hard failures
235
+
236
+ | Condition | Severity | Observability | Consumer action |
237
+ | --- | --- | --- | --- |
238
+ | partial-or-declared-only-coverage | warning | logs/eventos do componente | confirmar ligacao runtime antes de uso critico |
239
+
240
+ ## Detailed API
241
+
242
+ ### Preserved technical reference (normalized from previous revision)
243
+
244
+ Referencia canonica da JSON API do `praxis-list-config-editor` (superficie de autoria do `ListAuthoringDocument`).
245
+
246
+ Foco:
247
+
248
+ - o que o editor aceita e devolve para o host (`SettingsPanel`);
249
+ - regras de validacao aplicadas durante edicao;
250
+ - divergencias entre "campo editavel" e "campo consumido no runtime da lista".
251
+
252
+ Legenda de suporte:
253
+
254
+ - `Active`: editavel e persistido pelo editor.
255
+ - `Partial`: editavel com restricoes ou heuristicas.
256
+ - `Declared-only`: preservado no objeto, sem editor dedicado.
257
+
258
+ ### Overview
259
+
260
+ `praxis-list-config-editor` e um componente standalone de configuracao visual para `ListAuthoringDocument`, com `config` como payload interno principal.
261
+
262
+ Fluxo macro:
263
+
264
+ 1. Recebe `document` canônico ou `config` legado (via `@Input` ou `SETTINGS_PANEL_DATA`).
265
+ 2. Faz parse para `ListAuthoringDocument` e projeta o documento via capability pública; o editor visual só hidrata estado transitório de UI em cima do documento canônico.
266
+ 3. Mantem estado de formulario e mapeamento (`mappingPrimary`, `mappingMeta`, `features`, `actions`, etc.).
267
+ 4. Valida continuamente (`verify`) e sinaliza `isDirty$` / `isValid$` / `isBusy$`.
268
+ 5. Em `getSettingsValue()` e `onSave()`, consolida mapeamentos e retorna `{ document, config, id }`, com `document` como boundary principal.
269
+
270
+ ### API
271
+
272
+ #### Component inputs
273
+
274
+ | Input | Tipo | Default | Status | Runtime notes |
275
+ | --- | --- | --- | --- | --- |
276
+ | `config` | `PraxisListConfig` | obrigatorio logico | Active | Base interna editada e projetada para `document.config`. |
277
+ | `document` | `ListAuthoringDocument \| undefined` | opcional | Active | Boundary canônico de autoria. Quando ausente, `config` legado e convertido. |
278
+ | `listId` | `string \| undefined` | `undefined` | Active | Retornado no payload de save (`{ document, config, id }`). |
279
+
280
+ #### Component outputs
281
+
282
+ Sem `@Output` publico.
283
+
284
+ A integracao com host ocorre por `SettingsValueProvider`:
285
+
286
+ - `getSettingsValue(): { document, config, id }`
287
+ - `onSave(): { document, config, id }`
288
+
289
+ #### Estado observavel
290
+
291
+ | Canal | Tipo | Papel |
292
+ | --- | --- | --- |
293
+ | `isDirty$` | `BehaviorSubject<boolean>` | Indica divergencia em relacao ao snapshot inicial. |
294
+ | `isValid$` | `BehaviorSubject<boolean>` | Resultado da validacao estrutural do editor. |
295
+ | `isBusy$` | `BehaviorSubject<boolean>` | Estado de busy durante carregamento de schema. |
296
+
297
+ ### Authoring Coverage Matrix (`PraxisListConfig`)
298
+
299
+ | JSON path | Status | Editor notes |
300
+ | --- | --- | --- |
301
+ | `id` | Declared-only | Preservado no objeto; sem campo dedicado no editor. |
302
+ | `dataSource.resourcePath` | Active | Campo principal para schema remoto. |
303
+ | `dataSource.query` | Active | JSON editavel com validacao sintatica. |
304
+ | `dataSource.sort` | Active | Gerado por `sortField/sortDir` e por UI sort rows. |
305
+ | `dataSource.data` | Declared-only | Nao possui editor dedicado para dataset local. |
306
+ | `layout.variant` | Active | `list/cards/tiles`. |
307
+ | `layout.model` | Active | `standard/media/hotel`. |
308
+ | `layout.lines` | Active | `1/2/3`. |
309
+ | `layout.density` | Active | `default/comfortable/compact`. |
310
+ | `layout.dividers` | Active | `none/between/all`. |
311
+ | `layout.groupBy` | Active | Texto livre ou campo de schema quando disponivel. |
312
+ | `layout.stickySectionHeader` | Active | Toggle dedicado. |
313
+ | `layout.virtualScroll` | Active | Toggle dedicado (mesmo que runtime possa nao aplicar). |
314
+ | `layout.pageSize` | Active | Numero inteiro >= 1. |
315
+ | `skin.type` | Active | Presets + selecao manual. |
316
+ | `skin.gradient/radius/shadow/border/backdropBlur/class/inlineStyle` | Active | Edicao direta + presets. |
317
+ | `selection.mode` | Active | `none/single/multiple`. |
318
+ | `selection.formControlName` | Active | Binding por nome. |
319
+ | `selection.formControlPath` | Active | Binding por path. |
320
+ | `selection.compareBy` | Active | Validado contra campos do schema quando disponiveis. |
321
+ | `selection.return` | Active | `value/item/id`. |
322
+ | `templating.<slot>.type` | Partial | Suporta tipos visuais; `slot` nao possui fluxo dedicado no editor. |
323
+ | `templating.<slot>.expr/class/style` | Active | Mapeado por builders e assistentes. |
324
+ | `templating.<slot>.badge.*` | Active | Suporte para imagens com badge. |
325
+ | `templating.<slot>.props.rating.*` | Active | `max/size/color` com limites validados. |
326
+ | `templating.metaPlacement/metaPrefixIcon/statusPosition` | Active | Controles dedicados. |
327
+ | `templating.features*` | Active | CRUD de features + modo de exibicao. |
328
+ | `templating.iconColorMap/chipColorMap/chipLabelMap` | Active | Editor de pares chave/valor com normalizacao. |
329
+ | `templating.skeleton.count` | Active | Controle numerico (>=0). |
330
+ | `actions[].id/icon/label/color/kind/buttonVariant/showIf` | Active | Authoring completo de ações por item; `showIf` usa Json Logic serializável. |
331
+ | `actions[].globalAction/emitLocal/showLoading/confirmation` | Active | Suporte a acoes globais estruturadas, incluindo `navigation.openRoute` como navegacao interna canonica, e confirmacao. |
332
+ | `actions[].emitPayload` | Active | Campo editavel no editor; consumo runtime depende da lista. |
333
+ | `ui.showSearch/searchField/searchPlaceholder` | Active | Bloco de busca. |
334
+ | `ui.showSort/sortOptions` | Active | Editor visual com deteccao de duplicatas. |
335
+ | `ui.showRange` | Active | Toggle dedicado. |
336
+ | `i18n.locale/currency` | Active | Usado em formatacao de preview/runtime. |
337
+ | `a11y.ariaLabel/ariaLabelledBy/highContrast/reduceMotion` | Active | Editavel no tab de acessibilidade. |
338
+ | `events.itemClick/actionClick/selectionChange/loaded` | Active | Mapeamentos editaveis no tab de eventos. |
339
+
340
+ ### Validacao Estrutural
341
+
342
+ `verify()` aplica validacoes de consistencia em loop assicrono:
343
+
344
+ 1. `layout.pageSize` deve ser inteiro >= 1 (quando definido).
345
+ 2. `layout.lines` deve estar em `{1,2,3}`.
346
+ 3. `sortField` e `selection.compareBy` devem existir em `fields[]` quando schema remoto foi carregado.
347
+ 4. `ui.sortOptions` nao pode ter duplicatas de `field,dir`.
348
+ 5. `queryJson` precisa ser JSON valido quando preenchido.
349
+ 6. URLs de imagem (leading/trailing/sectionHeader/emptyState) precisam seguir formato aceito.
350
+ 7. `ratingSize` deve estar em `10..32`; `ratingMax` em `1..10`.
351
+ 8. `actions[].globalAction.payload` deve ser JSON valido quando "parece JSON" (`{}` ou `[]`).
352
+
353
+ ### Integracao com schema remoto
354
+
355
+ - O editor observa `resourcePath` com debounce de `300ms`.
356
+ - Quando `GenericCrudService` esta disponivel:
357
+ - chama `configure(path)` + `getSchema()`;
358
+ - popula `fields[]` para combos e validacoes;
359
+ - marca `isBusy$` durante a operacao.
360
+ - Em erro de schema, retorna `fields=[]` sem quebrar o editor.
361
+
362
+ ### Regras de Save e Round-trip
363
+
364
+ Antes de devolver configuracao para host:
365
+
366
+ 1. `ensureMappingApplied()` consolida estado dos mapeadores (`mapping*`) em `working.templating`.
367
+ 2. `normalizeActionPayloads()` converte `globalAction.payload` string para objeto/array quando JSON valido, inclusive payloads de navegacao interna com `query` e `state`.
368
+ 3. Retorno padrao: `{ config: working, id: listId }`.
369
+
370
+ ### Exemplos
371
+
372
+ #### 1) Integracao no SettingsPanel
373
+
374
+ ```ts
375
+ const ref = settingsPanel.open({
376
+ id: 'praxis-list-editor:lista-rh',
377
+ title: 'Lista - Configuracoes',
378
+ content: {
379
+ component: PraxisListConfigEditor,
380
+ inputs: { config, listId: 'lista-rh' },
381
+ },
382
+ });
383
+
384
+ ref.saved$.subscribe((payload) => {
385
+ // payload = { config, id }
386
+ updateListConfig(payload.config);
387
+ });
388
+ ```
389
+
390
+ #### 2) Caso valido de acao global
391
+
392
+ ```json
393
+ {
394
+ "actions": [
395
+ {
396
+ "id": "approve",
397
+ "globalAction": {
398
+ "actionId": "workflow.approve",
399
+ "payload": { "id": "${item.id}" }
400
+ },
401
+ "showLoading": true,
402
+ "emitLocal": true
403
+ }
404
+ ]
405
+ }
406
+ ```
407
+
408
+ #### 3) Navegacao interna canonica
409
+
410
+ ```json
411
+ {
412
+ "actions": [
413
+ {
414
+ "id": "details",
415
+ "globalAction": {
416
+ "actionId": "navigation.openRoute",
417
+ "payload": {
418
+ "path": "/clientes/detalhe",
419
+ "query": { "id": "${item.id}" },
420
+ "state": { "source": "list", "selectedId": "${item.id}" }
421
+ }
422
+ }
423
+ }
424
+ ]
425
+ }
426
+ ```
427
+
428
+ ### Known limitations and pending investigation
429
+
430
+ 1. Nao existe editor dedicado para `dataSource.data` (dataset local grande).
431
+ 2. O editor permite campos que podem nao ter efeito no runtime final (ex.: flags declarativas sem binding atual).
432
+ 3. `isDirty$` usa comparacao por snapshot JSON; mudancas de ordenacao de chaves/objetos podem gerar ruido em cenarios extremos.
433
+ 4. Conversao automatica de `globalAction.payload` string para JSON e heuristica (so quando formato parece objeto/array).
434
+
435
+ ### Source references
436
+
437
+ - `projects/praxis-list/src/lib/editors/list-config-editor.component.ts`
438
+ - `projects/praxis-list/src/lib/editors/list-config-editor.component.html`
439
+ - `projects/praxis-list/src/lib/models/list-config.model.ts`
440
+ - `projects/praxis-list/src/lib/utils/templating-inference.ts`
441
+
442
+ ## JSON path index
443
+
444
+ | Path | Type | Required | Default | Status | Notes |
445
+ | --- | --- | --- | --- | --- | --- |
446
+ | `id` | not-specified | not-specified | n/a | Declared-only | Preservado no objeto; sem campo dedicado no editor. |
447
+ | `dataSource.resourcePath` | not-specified | not-specified | n/a | Active | Campo principal para schema remoto. |
448
+ | `dataSource.query` | not-specified | not-specified | n/a | Active | JSON editavel com validacao sintatica. |
449
+ | `dataSource.sort` | not-specified | not-specified | n/a | Active | Gerado por `sortField/sortDir` e por UI sort rows. |
450
+ | `dataSource.data` | not-specified | not-specified | n/a | Declared-only | Nao possui editor dedicado para dataset local. |
451
+ | `layout.variant` | not-specified | not-specified | n/a | Active | `list/cards/tiles`. |
452
+ | `layout.model` | not-specified | not-specified | n/a | Active | `standard/media/hotel`. |
453
+ | `layout.lines` | not-specified | not-specified | n/a | Active | `1/2/3`. |
454
+ | `layout.density` | not-specified | not-specified | n/a | Active | `default/comfortable/compact`. |
455
+ | `layout.dividers` | not-specified | not-specified | n/a | Active | `none/between/all`. |
456
+ | `layout.groupBy` | not-specified | not-specified | n/a | Active | Texto livre ou campo de schema quando disponivel. |
457
+ | `layout.stickySectionHeader` | not-specified | not-specified | n/a | Active | Toggle dedicado. |
458
+ | `layout.virtualScroll` | not-specified | not-specified | n/a | Active | Toggle dedicado (mesmo que runtime possa nao aplicar). |
459
+ | `layout.pageSize` | not-specified | not-specified | n/a | Active | Numero inteiro >= 1. |
460
+
461
+ ## Events
462
+
463
+ | Event | Payload | Trigger | Stability | Notes |
464
+ | --- | --- | --- | --- | --- |
465
+ | component-outputs | see-detailed-api | runtime-event | Partial | Eventos preservados na referência detalhada. |
466
+
467
+ ## Styling API
468
+
469
+ | Token/Class | Scope | Purpose | Notes |
470
+ | --- | --- | --- | --- |
471
+ | see-detailed-api | component | styling/runtime | Consolidar naming canonico quando aplicavel. |
472
+
473
+ ## Editor and tooling notes
474
+
475
+ - Cobertura de editor/tooling foi separada da cobertura de runtime para evitar confusao de suporte.
476
+ - Quando nao houver evidencia direta no codigo, o status deve permanecer not yet verified.
477
+
478
+ ## Examples
479
+
480
+ ### Minimal valid
481
+
482
+ ```json
483
+ {}
484
+ ```
485
+
486
+ ### Typical/common
487
+
488
+ ```json
489
+ {}
490
+ ```
491
+
492
+ ### Advanced
493
+
494
+ ```json
495
+ {}
496
+ ```
497
+
498
+ ### Enterprise scenario
499
+
500
+ ```json
501
+ {}
502
+ ```
503
+
504
+ ## Known limitations and mismatches
505
+
506
+ | Path/Behavior | Observed behavior (runtime) | Desired behavior | Impact | Tracking issue | Target fix |
507
+ | --- | --- | --- | --- | --- | --- |
508
+ | 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 |
509
+
510
+ ## Compatibility and migration notes
511
+
512
+ | Concern | Affected versions | Migration action | Deadline | Notes |
513
+ | --- | --- | --- | --- | --- |
514
+ | legacy aliases and mixed status vocabulary | pre-canonical docs | unificar para taxonomia canonica (Active/Partial/Declared-only/...) | next-doc-cycle | manter backward compatibility documentada |
515
+
516
+ ## Source references
517
+
518
+ | Source type | Path/URL | Why it is source of truth | Last verified (YYYY-MM-DD) | Notes |
519
+ | --- | --- | --- | --- | --- |
520
+ | local-file | projects/praxis-list/src/lib/editors/list-config-editor.component.ts | Evidencia de implementacao e contrato. | 2026-03-05 | referencia preservada da versao anterior |
521
+ | local-file | projects/praxis-list/src/lib/editors/list-config-editor.component.html | Evidencia de implementacao e contrato. | 2026-03-05 | referencia preservada da versao anterior |
522
+ | local-file | projects/praxis-list/src/lib/models/list-config.model.ts | Evidencia de implementacao e contrato. | 2026-03-05 | referencia preservada da versao anterior |
523
+ | local-file | projects/praxis-list/src/lib/utils/templating-inference.ts | Evidencia de implementacao e contrato. | 2026-03-05 | referencia preservada da versao anterior |