@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.
package/README.md CHANGED
@@ -326,6 +326,25 @@ actions: [
326
326
 
327
327
  When `globalAction` is set, `actionClick` is **not emitted** by default. Use `emitLocal: true` to emit both.
328
328
 
329
+ For internal navigation from a row or item button, use `navigation.openRoute` and bind the selected item id into `query` or `state`:
330
+
331
+ ```ts
332
+ actions: [
333
+ {
334
+ id: 'details',
335
+ icon: 'open_in_new',
336
+ label: 'Open details',
337
+ globalAction: {
338
+ actionId: 'navigation.openRoute',
339
+ payload: {
340
+ path: '/clientes/detalhe',
341
+ query: { id: '${item.id}' },
342
+ },
343
+ },
344
+ }
345
+ ]
346
+ ```
347
+
329
348
  ### Confirmation and loading
330
349
 
331
350
  ```ts
@@ -0,0 +1,140 @@
1
+ # Backlog Tecnico — Executive List Platform
2
+
3
+ Data: 2026-03-20
4
+ Escopo: `projects/praxis-list`
5
+ Status: draft
6
+
7
+ ## Objetivo
8
+
9
+ Evoluir a `praxis-list` para suportar listas executivas com fidelidade visual ao layout de referencia em `praxis-ui-landing-page/issues/playground/problemas/referencia-list`, sem criar uma API publica paralela (`V2`) e sem depender de hacks baseados em `html` inline, parsing por quebra de linha ou CSS acoplado a `nth-child`.
10
+
11
+ ## Principios
12
+
13
+ - Manter a API publica em `PraxisListConfig`.
14
+ - Introduzir um modelo interno normalizado unico para o runtime.
15
+ - Reaproveitar da `praxis-table` o desenho correto de seguranca e resolucao remota.
16
+ - Tratar a linha da list como composicao de slots renderizaveis, nao como HTML livre.
17
+ - Priorizar a solucao correta de plataforma, nao remendos de demo.
18
+
19
+ ## Fase 1 — Base Contratual e Runtime
20
+
21
+ Objetivo: suportar a linha fechada da referencia sem hacks.
22
+
23
+ ### Itens
24
+
25
+ - Expandir `TemplateType` com `metric`, `compose` e `component`.
26
+ - Evoluir `TemplateDef.props` para suportar `metric`, `compose` e `component`.
27
+ - Adicionar `layout.rowLayout`.
28
+ - Adicionar `rules.itemStyles`.
29
+ - Adicionar `rules.slotOverrides`.
30
+ - Criar `NormalizedListRuntimeConfig`.
31
+ - Criar `normalizeListConfig()`.
32
+ - Criar `normalizeTemplateNode()` e `normalizeTemplating()`.
33
+ - Criar `normalizeLayout()`.
34
+ - Atualizar o runtime da list para renderizar `metric`.
35
+ - Atualizar o runtime da list para renderizar `compose`.
36
+ - Aplicar `rules.itemStyles` no container do item.
37
+ - Aplicar `rules.slotOverrides` por slot.
38
+
39
+ ### Criterios de aceite
40
+
41
+ - A linha consegue alinhar colunas de forma estavel entre todos os itens.
42
+ - O conteudo das colunas fica centralizado verticalmente.
43
+ - As metricas `SALDO`, `LIMITE DISPONIVEL` e `RISCO` nao dependem de `nth-child`.
44
+ - O risco pode variar cor e icone por regra.
45
+
46
+ ## Fase 2 — Renderers Canonicos da Linha Executiva
47
+
48
+ Objetivo: reduzir verbosidade e eliminar `html` inline no cenario executivo.
49
+
50
+ ### Itens
51
+
52
+ - Criar renderer `account-identity`.
53
+ - Criar renderer `executive-metric`.
54
+ - Criar renderer `executive-trailing`.
55
+ - Criar registry interno de renderers da list.
56
+ - Fazer `TemplateDef.type = 'component'` resolver via registry.
57
+ - Migrar `PraxisListDocPageComponent` para o contrato canônico novo.
58
+ - Remover dependencia de `executiveNameHtml`, `executiveSubtitleHtml` e `executiveTrailingHtml`.
59
+ - Reduzir CSS hardcoded da `executive-inline-skin`.
60
+
61
+ ### Criterios de aceite
62
+
63
+ - O cenario `Executive expansion` usa renderers canônicos para identidade, metricas e trailing.
64
+ - O template nao depende mais de `innerHTML` para a linha executiva.
65
+ - A skin volta a ser refinamento visual, nao mecanismo principal.
66
+
67
+ ## Fase 3 — Expansao Schema-Driven e Detail Remoto
68
+
69
+ Objetivo: suportar a referencia aberta e preparar cenarios reais.
70
+
71
+ ### Itens
72
+
73
+ - Evoluir `ListExpansionSectionDef` com `metadata` e `component`.
74
+ - Evoluir `expansion` com `dataSource`, `schemaContract` e `rendering`.
75
+ - Implementar `expansion.dataSource.mode = inline`.
76
+ - Implementar `expansion.dataSource.mode = resource`.
77
+ - Implementar `expansion.dataSource.mode = resourcePath`.
78
+ - Implementar interpolacao por `paramsMap`.
79
+ - Implementar `resourceAllowList`.
80
+ - Bloquear `resourcePath` absoluto ou com scheme.
81
+ - Implementar cache por item expandido.
82
+ - Implementar cancelamento ao colapsar.
83
+ - Implementar sanitizacao de schema com `allowedNodes`.
84
+ - Implementar shell visual `attached` para detail row.
85
+
86
+ ### Criterios de aceite
87
+
88
+ - A list suporta detalhe lazy por item expandido.
89
+ - A politica de seguranca opera em fail-closed.
90
+ - O detail remoto pode ser carregado por `resourcePath` relativo com allowlist.
91
+ - A estrutura aberta da referencia pode ser reproduzida sem hardcode por tela.
92
+
93
+ ## Fase 4 — Testes, Docs e Governanca
94
+
95
+ Objetivo: consolidar a plataforma.
96
+
97
+ ### Itens
98
+
99
+ - Criar specs para o normalizador de config.
100
+ - Criar specs para `metric`, `compose` e `component`.
101
+ - Criar specs para `rules`.
102
+ - Criar specs para `expansion.resourcePath`.
103
+ - Criar regressao visual/estrutural do cenario executivo.
104
+ - Atualizar `README.md` da list.
105
+ - Atualizar a documentacao JSON API da list.
106
+ - Documentar regras de seguranca da expansao remota.
107
+
108
+ ### Criterios de aceite
109
+
110
+ - A cobertura de testes protege a normalizacao, renderizacao e seguranca.
111
+ - A doc page reflete o contrato canonico.
112
+ - O backlog desta rodada deixa de ser apenas analise e vira plataforma verificavel.
113
+
114
+ ## Ordem Recomendada
115
+
116
+ 1. Fase 1 completa
117
+ 2. Fase 2 completa
118
+ 3. Fase 3 completa
119
+ 4. Fase 4 completa
120
+
121
+ ## Decisoes Ja Tomadas
122
+
123
+ - Nao criar `PraxisListConfigV2`.
124
+ - Evoluir o contrato atual.
125
+ - Introduzir modelo interno normalizado.
126
+ - Reaproveitar o padrao de seguranca da `praxis-table` para detail remoto.
127
+
128
+ ## Riscos Conhecidos
129
+
130
+ - Crescimento do template principal da list se a normalizacao nao vier antes dos renderers.
131
+ - Acoplamento excessivo a CSS se `metric` e `compose` forem introduzidos sem `rowLayout`.
132
+ - Duplicacao conceitual com a `praxis-table` se a expansao remota da list ignorar `schemaContract` e `resourceAllowList`.
133
+
134
+ ## Definicao de Pronto desta iniciativa
135
+
136
+ - Linha executiva fechada identica a referencia.
137
+ - Linha executiva aberta identica a referencia.
138
+ - Variacoes do mesmo padrao possiveis via contrato.
139
+ - Sem `html` inline como mecanismo principal.
140
+ - Sem hacks de `nth-child` e pseudo-elementos como contrato.
@@ -0,0 +1,110 @@
1
+ # Checklist de Aderencia — Referencia Executive List
2
+
3
+ Data: 2026-03-20
4
+ Escopo: `projects/praxis-list`
5
+ Status: draft
6
+
7
+ ## Referencia
8
+
9
+ - Fechado: `praxis-ui-landing-page/issues/playground/problemas/referencia-list/fechado.png`
10
+ - Aberto: `praxis-ui-landing-page/issues/playground/problemas/referencia-list/aberto.png`
11
+
12
+ ## Objetivo
13
+
14
+ Confirmar, ponto a ponto, que a evolucao proposta para a `praxis-list` cobre a referencia visual de forma 1:1 e ainda permite variacoes controladas do mesmo padrao.
15
+
16
+ ## Checklist Estrutural
17
+
18
+ - [ ] A linha funciona como grade estavel de colunas.
19
+ - [ ] Todas as linhas compartilham o mesmo alinhamento horizontal entre colunas.
20
+ - [ ] O conteudo interno das colunas fica centralizado verticalmente.
21
+ - [ ] A linha suporta variacao discreta de borda/tom por severidade.
22
+
23
+ ## Checklist de Identidade
24
+
25
+ - [ ] O codigo/monograma da conta aparece em capsula dedicada.
26
+ - [ ] O titulo principal suporta icone decorativo adjacente.
27
+ - [ ] O subtitulo suporta badge de segmento.
28
+ - [ ] O subtitulo suporta composicao `tipo de conta + desde ano`.
29
+ - [ ] O bloco de identidade e reutilizavel como renderer proprio.
30
+
31
+ ## Checklist de Metricas
32
+
33
+ - [ ] `SALDO` suporta label pequena + valor forte.
34
+ - [ ] `LIMITE DISPONIVEL` suporta valor + barra inline + legenda.
35
+ - [ ] `RISCO` suporta icone + valor + barra + legenda.
36
+ - [ ] `RISCO` suporta variacao de icone por regra.
37
+ - [ ] `RISCO` suporta variacao de cor por regra.
38
+ - [ ] A barra de progresso pode variar por regra.
39
+ - [ ] O alinhamento das metricas e identico entre linhas.
40
+
41
+ ## Checklist de Trailing
42
+
43
+ - [ ] O trailing suporta alertas agregados.
44
+ - [ ] O trailing suporta owner resumido.
45
+ - [ ] O trailing suporta icones de acao.
46
+ - [ ] O trailing suporta chevron de expansao.
47
+ - [ ] A ordem visual do trailing e estavel.
48
+ - [ ] O trailing pode ser empacotado como renderer reutilizavel.
49
+
50
+ ## Checklist de Expansao
51
+
52
+ - [ ] A linha expandida fica visualmente anexada a linha principal.
53
+ - [ ] A expansao suporta layout em 3 colunas.
54
+ - [ ] `ALERTAS` suporta bloco de informacao destacado.
55
+ - [ ] `PRODUTOS CONTRATADOS` suporta chips.
56
+ - [ ] `PROXIMOS EVENTOS` suporta timeline.
57
+ - [ ] O shell da expansao pode ser configurado sem hardcode por tela.
58
+
59
+ ## Checklist de Detail Remoto
60
+
61
+ - [ ] A expansao pode operar com dados inline.
62
+ - [ ] A expansao pode operar com `resource`.
63
+ - [ ] A expansao pode operar com `resourcePath`.
64
+ - [ ] O `resourcePath` suporta `paramsMap`.
65
+ - [ ] O `resourcePath` exige `resourceAllowList`.
66
+ - [ ] O runtime bloqueia URL absoluta ou com scheme.
67
+ - [ ] O runtime sanitiza schema remoto por `schemaContract.allowedNodes`.
68
+
69
+ ## Checklist de Variacoes
70
+
71
+ - [ ] A mesma estrutura suporta portfolios diferentes.
72
+ - [ ] As metricas suportam layouts diferentes sem hacks.
73
+ - [ ] O trailing suporta diferentes combinacoes de alertas/owner/acoes.
74
+ - [ ] O bloco de identidade suporta variacao de badge, subtitulo e adornos.
75
+ - [ ] A expansao suporta sections declarativas adicionais.
76
+
77
+ ## Cobertura Esperada do Contrato
78
+
79
+ ### Cobertura completa
80
+
81
+ - `layout.rowLayout`
82
+ - `templating.metric`
83
+ - `templating.compose`
84
+ - `rules.itemStyles`
85
+ - `rules.slotOverrides`
86
+ - `expansion.dataSource`
87
+ - `expansion.schemaContract`
88
+ - `expansion.rendering`
89
+
90
+ ### Cobertura completa, mas recomendando renderer dedicado
91
+
92
+ - `account-identity`
93
+ - `executive-metric`
94
+ - `executive-trailing`
95
+
96
+ ## Sinais de Solucao Incorreta
97
+
98
+ - Uso de `html` inline como mecanismo principal de composicao.
99
+ - Dependencia de `nth-child` para semantica do contrato.
100
+ - Barras desenhadas apenas por pseudo-elemento sem dado semantico.
101
+ - Variacoes visuais dependentes de CSS acoplado ao cenario demo.
102
+ - Detail remoto sem `resourceAllowList`.
103
+
104
+ ## Definicao de Aderencia Concluida
105
+
106
+ - [ ] Fechado 1:1
107
+ - [ ] Aberto 1:1
108
+ - [ ] Variacoes controladas suportadas
109
+ - [ ] Sem hacks estruturais
110
+ - [ ] Composicao canônica reutilizavel
@@ -0,0 +1,40 @@
1
+ # Release Note — Navigation Open Route
2
+
3
+ Data: 2026-04-23
4
+ Escopo: `projects/praxis-list`
5
+ Status: concluido
6
+
7
+ ## Resumo
8
+
9
+ A `praxis-list` agora documenta e demonstra o contrato canônico `navigation.openRoute` para acoes de item.
10
+ O mesmo item que dispara `surface.open` também pode abrir uma rota interna, levando `item.id` no `query` ou no `state`.
11
+
12
+ ## O que foi alinhado
13
+
14
+ - Runtime de demonstração com uma action de item que abre `/components-showcase/surface-open-guide`.
15
+ - Spec unitária da demo ajustada para refletir o contrato real de `GlobalActionService.executeRef(...)`.
16
+ - Playwright de demonstração validando navegação real no browser.
17
+ - README e documentação JSON API da lista com exemplo de `navigation.openRoute`.
18
+ - Manifesto de IA da lista com exemplo sugestivo de action interna usando `item.id`.
19
+
20
+ ## Contrato de uso
21
+
22
+ Exemplo canônico:
23
+
24
+ ```ts
25
+ {
26
+ actionId: 'navigation.openRoute',
27
+ payload: {
28
+ path: '/components-showcase/surface-open-guide',
29
+ query: { funcionarioId: '${item.id}' },
30
+ state: { funcionarioId: '${item.id}', source: 'surface-open-list-demo' },
31
+ },
32
+ }
33
+ ```
34
+
35
+ ## Status do suporte
36
+
37
+ - `navigation.openRoute`: ativo no core e consumido pela `praxis-list`.
38
+ - `surface.open`: permanece como contrato canônico para abertura de superfícies.
39
+ - `actionClick`: continua sendo o evento local da lista quando `emitLocal` estiver habilitado.
40
+
@@ -0,0 +1,98 @@
1
+ # ADR: Protocolo Canônico de Autoria do `praxis-list`
2
+
3
+ ## Status
4
+
5
+ Aceito.
6
+
7
+ ## Problema
8
+
9
+ `praxis-list` evoluiu com múltiplas superfícies de autoria e aplicação:
10
+
11
+ - editor visual;
12
+ - edição JSON/manual;
13
+ - host runtime;
14
+ - integrações futuras com playground e IA.
15
+
16
+ Antes desta mudança, o boundary principal era implícito em `PraxisListConfig`, com lógica de normalização e apply espalhada entre editor e host. Isso criava fragilidade arquitetural, side effects opacos e risco de divergência entre superfícies.
17
+
18
+ ## Decisão
19
+
20
+ O contrato canônico de autoria de `praxis-list` passa a ser `ListAuthoringDocument`.
21
+
22
+ Regras normativas:
23
+
24
+ 1. O boundary principal de autoria é `ListAuthoringDocument`.
25
+ 2. `PraxisListConfig` continua sendo a projeção canônica de runtime, não o protocolo primário de autoria.
26
+ 3. O host deve aplicar documentos via:
27
+ - parse;
28
+ - validate;
29
+ - build apply plan;
30
+ - executor runtime fino.
31
+ 4. O editor visual e o editor JSON devem produzir e consumir `ListAuthoringDocument`.
32
+ 5. Regras de normalização, validação e inferência autoral pertencem à capability pública; o editor visual só pode projetar/hidratar estado transitório de UI.
33
+ 6. `applyConfigFromAdapter(...)` é mantido apenas por compatibilidade e deve delegar ao protocolo canônico.
34
+ 7. Inferência de schema não deve ficar escondida como side effect arquitetural opaco; ela deve ser uma etapa explícita do apply/runtime e sua decisão deve nascer do `ListApplyPlan`.
35
+ 8. Não forçamos `bindings` vazios no documento enquanto não houver requisito real fora de `config`.
36
+
37
+ ## Contrato novo
38
+
39
+ O protocolo é composto por:
40
+
41
+ - `ListAuthoringDocument`
42
+ - `ListValidationContext`
43
+ - `ListProjectionContext`
44
+ - `ListRuntimeContext`
45
+ - `ListApplyPlan`
46
+
47
+ Capability pública:
48
+
49
+ - `createListAuthoringDocument(...)`
50
+ - `parseLegacyOrListDocument(...)`
51
+ - `normalizeListAuthoringDocument(...)`
52
+ - `validateListAuthoringDocument(...)`
53
+ - `toCanonicalListConfig(...)`
54
+ - `buildListApplyPlan(...)`
55
+ - `serializeListAuthoringDocument(...)`
56
+
57
+ ## Boundary de Apply
58
+
59
+ O host não deve usar `applyDocument(target, doc)` como boundary principal.
60
+
61
+ O fluxo correto é:
62
+
63
+ 1. receber payload;
64
+ 2. converter para `ListAuthoringDocument`;
65
+ 3. validar;
66
+ 4. construir `ListApplyPlan`;
67
+ 5. executar o plano no runtime.
68
+
69
+ O executor do host é responsável apenas por efeitos de runtime:
70
+
71
+ - aplicar config;
72
+ - rebinding de seleção;
73
+ - reaplicar skin;
74
+ - persistir config quando necessário;
75
+ - executar inferência de schema explicitamente.
76
+
77
+ ## Compatibilidade legada
78
+
79
+ Compatibilidade continua suportada para payloads legados baseados em `config`.
80
+
81
+ Regra:
82
+
83
+ - quando houver `document`, ele tem precedência;
84
+ - quando houver apenas `config`, o host/editor convertem para `ListAuthoringDocument`.
85
+
86
+ ## Consequências
87
+
88
+ Benefícios:
89
+
90
+ - unificação entre editor visual, editor JSON e host;
91
+ - apply declarativo e mais auditável;
92
+ - menor risco de divergência conceitual com `praxis-table`;
93
+ - base melhor para playground e fluxos de IA.
94
+
95
+ Tradeoff:
96
+
97
+ - aumenta a disciplina de contrato;
98
+ - exige manutenção explícita da documentação e dos testes dos fluxos de autoria.