@praxisui/list 9.0.0-beta.4 → 9.0.0-beta.40
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 +1 -1
- package/ai/component-registry.json +6598 -0
- package/docs/2026-03-executive-list-platform-backlog.md +13 -12
- package/docs/2026-03-executive-list-reference-checklist.md +3 -2
- package/docs/adr/2026-03-list-inline-expansion-v1.md +101 -7
- package/fesm2022/praxisui-list.mjs +1214 -44
- package/package.json +11 -7
- package/src/lib/editors/praxis-list-config-editor.json-api.md +30 -9
- package/src/lib/praxis-list.json-api.md +14 -7
- package/types/praxisui-list.d.ts +388 -14
package/package.json
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@praxisui/list",
|
|
3
|
-
"version": "9.0.0-beta.
|
|
3
|
+
"version": "9.0.0-beta.40",
|
|
4
4
|
"description": "List components and helpers for Praxis UI.",
|
|
5
5
|
"peerDependencies": {
|
|
6
6
|
"@angular/common": "^21.0.0",
|
|
7
7
|
"@angular/core": "^21.0.0",
|
|
8
8
|
"@angular/material": "^21.0.0",
|
|
9
|
-
"@praxisui/dynamic-fields": "^9.0.0-beta.
|
|
9
|
+
"@praxisui/dynamic-fields": "^9.0.0-beta.40",
|
|
10
10
|
"rxjs": ">=7 <9",
|
|
11
11
|
"@angular/forms": "^21.0.0",
|
|
12
12
|
"@angular/router": "^21.0.0",
|
|
13
|
-
"@praxisui/ai": "^9.0.0-beta.
|
|
14
|
-
"@praxisui/core": "^9.0.0-beta.
|
|
15
|
-
"@praxisui/rich-content": "^9.0.0-beta.
|
|
16
|
-
"@praxisui/settings-panel": "^9.0.0-beta.
|
|
13
|
+
"@praxisui/ai": "^9.0.0-beta.40",
|
|
14
|
+
"@praxisui/core": "^9.0.0-beta.40",
|
|
15
|
+
"@praxisui/rich-content": "^9.0.0-beta.40",
|
|
16
|
+
"@praxisui/settings-panel": "^9.0.0-beta.40"
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
19
|
"tslib": "^2.3.0",
|
|
@@ -27,6 +27,7 @@
|
|
|
27
27
|
"keywords": [
|
|
28
28
|
"angular",
|
|
29
29
|
"praxisui",
|
|
30
|
+
"praxis",
|
|
30
31
|
"list",
|
|
31
32
|
"cards",
|
|
32
33
|
"selection",
|
|
@@ -42,7 +43,10 @@
|
|
|
42
43
|
".": {
|
|
43
44
|
"types": "./types/praxisui-list.d.ts",
|
|
44
45
|
"default": "./fesm2022/praxisui-list.mjs"
|
|
46
|
+
},
|
|
47
|
+
"./ai/component-registry.json": {
|
|
48
|
+
"default": "./ai/component-registry.json"
|
|
45
49
|
}
|
|
46
50
|
},
|
|
47
51
|
"type": "module"
|
|
48
|
-
}
|
|
52
|
+
}
|
|
@@ -302,7 +302,7 @@ A integracao com host ocorre por `SettingsValueProvider`:
|
|
|
302
302
|
| `dataSource.resourcePath` | Active | Campo principal para schema remoto. |
|
|
303
303
|
| `dataSource.query` | Active | JSON editavel com validacao sintatica. |
|
|
304
304
|
| `dataSource.sort` | Active | Gerado por `sortField/sortDir` e por UI sort rows. |
|
|
305
|
-
| `dataSource.data` |
|
|
305
|
+
| `dataSource.data` | Active | Preservado no objeto; editor mostra resumo, colunas de amostra e aviso de precedencia sobre `resourcePath`. |
|
|
306
306
|
| `layout.variant` | Active | `list/cards/tiles`. |
|
|
307
307
|
| `layout.model` | Active | `standard/media/hotel`. |
|
|
308
308
|
| `layout.lines` | Active | `1/2/3`. |
|
|
@@ -312,6 +312,11 @@ A integracao com host ocorre por `SettingsValueProvider`:
|
|
|
312
312
|
| `layout.stickySectionHeader` | Active | Toggle dedicado. |
|
|
313
313
|
| `layout.virtualScroll` | Active | Toggle dedicado (mesmo que runtime possa nao aplicar). |
|
|
314
314
|
| `layout.pageSize` | Active | Numero inteiro >= 1. |
|
|
315
|
+
| `layout.rowLayout.type/columns/gap/itemAlignY/class/style` | Active | Editor guiado de colunas estaveis para listas corporativas. |
|
|
316
|
+
| `export.enabled/formats/general.*` | Active | Editor guiado de formatos, escopo, cabecalhos, limite, nome de arquivo, formatacao e campos incluidos. |
|
|
317
|
+
| `interaction.expandable/expandTrigger/expandMode/expandPlacement` | Active | Editor guiado de comportamento expansivel da linha. |
|
|
318
|
+
| `expansion.sections/rendering` | Active | Editor guiado para secoes inline e shell visual da expansao. |
|
|
319
|
+
| `rules.itemStyles/slotOverrides` | Active | Editor guiado basico para Json Logic, classe, estilo, template de slot, ocultacao e primeiro `effects[]` canonico. |
|
|
315
320
|
| `skin.type` | Active | Presets + selecao manual. |
|
|
316
321
|
| `skin.gradient/radius/shadow/border/backdropBlur/class/inlineStyle` | Active | Edicao direta + presets. |
|
|
317
322
|
| `selection.mode` | Active | `none/single/multiple`. |
|
|
@@ -327,15 +332,27 @@ A integracao com host ocorre por `SettingsValueProvider`:
|
|
|
327
332
|
| `templating.features*` | Active | CRUD de features + modo de exibicao. |
|
|
328
333
|
| `templating.iconColorMap/chipColorMap/chipLabelMap` | Active | Editor de pares chave/valor com normalizacao. |
|
|
329
334
|
| `templating.skeleton.count` | Active | Controle numerico (>=0). |
|
|
330
|
-
| `actions[].id/icon/label/color/kind/buttonVariant/showIf` | Active | Authoring completo de
|
|
331
|
-
| `actions[].globalAction/emitLocal/showLoading/confirmation` | Active | Suporte a acoes globais estruturadas,
|
|
332
|
-
| `actions[].
|
|
335
|
+
| `actions[].id/icon/label/color/kind/buttonVariant/showIf/placement` | Active | Authoring completo de acoes por item; `showIf` usa Json Logic serializavel e `placement` controla a regiao visual da acao. |
|
|
336
|
+
| `actions[].globalAction/emitLocal/showLoading/confirmation` | Active | Suporte a acoes globais estruturadas, confirmacao para acoes locais e globais, loading por acao e emissao local opcional. |
|
|
337
|
+
| `actions[].globalAction.payload/payloadExpr` | Active | `payload` estruturado e `payloadExpr` avancado sao editaveis; ao definir um deles, o editor remove o outro para manter semantica canonica de execucao. |
|
|
338
|
+
| `actions[].emitPayload` | Declared-only | Preservado em JSON/config round-trip; nao aparece no editor visual de Ações porque nao altera o payload nativo da lista. |
|
|
333
339
|
| `ui.showSearch/searchField/searchPlaceholder` | Active | Bloco de busca. |
|
|
334
340
|
| `ui.showSort/sortOptions` | Active | Editor visual com deteccao de duplicatas. |
|
|
335
341
|
| `ui.showRange` | Active | Toggle dedicado. |
|
|
336
342
|
| `i18n.locale/currency` | Active | Usado em formatacao de preview/runtime. |
|
|
337
343
|
| `a11y.ariaLabel/ariaLabelledBy/highContrast/reduceMotion` | Active | Editavel no tab de acessibilidade. |
|
|
338
|
-
| `events.itemClick/actionClick/selectionChange/loaded` | Active | Mapeamentos editaveis no tab de eventos. |
|
|
344
|
+
| `events.itemClick/actionClick/selectionChange/exportAction/loaded` | Active | Mapeamentos editaveis no tab de eventos. |
|
|
345
|
+
|
|
346
|
+
### Coverage inventory for runtime/editor parity
|
|
347
|
+
|
|
348
|
+
| Area | Adherence | Current editor coverage | Recommended next step |
|
|
349
|
+
| --- | --- | --- | --- |
|
|
350
|
+
| `events.exportAction` | ja-suportado-so-ux | Campo visual no tab de eventos. | Manter coberto por spec focal de round-trip. |
|
|
351
|
+
| `layout.rowLayout` | ja-suportado-so-ux | Editor guiado cobre ativacao, preset corporativo, tipo, colunas, largura, alinhamento, gap, CSS avancado e warnings inline para slots sem materializacao. | Evoluir depois com preview visual por slot. |
|
|
352
|
+
| `export` | ja-suportado-so-ux | Editor guiado cobre habilitacao, formatos, escopo, cabecalhos, limite, nome de arquivo, formatacao, campos incluidos, warning para campo inexistente quando o schema esta carregado e preview compacto de colunas/amostra. | Evoluir depois com preview fiel do payload final gerado pelo runtime. |
|
|
353
|
+
| `interaction`/`expansion` | suportado-parcialmente | Editor guiado cobre interacao expansivel, secoes inline, rendering e diagnostico de `dataSource`/`schemaContract` remotos preservados por JSON. | Evoluir fonte remota/schemaContract apenas com validacao de seguranca e prova runtime. |
|
|
354
|
+
| `rules.itemStyles`/`rules.slotOverrides` | ja-suportado-so-ux | Editor guiado cobre condicao Json Logic, estilo de item, override de slot, template basico, ocultacao e primeira materializacao canonica `effects[0]`. | Evoluir depois com builder visual de Json Logic, preview por item e suporte multi-effect se o runtime passar a consumir mais de um efeito. |
|
|
355
|
+
| `dataSource.data` | ja-suportado-mal-nomeado-ou-mal-materializado | Round-trip por JSON com resumo visual, colunas de amostra e aviso de precedencia sobre `resourcePath`. | Manter JSON-only para datasets grandes; considerar import dedicado apenas se houver demanda operacional. |
|
|
339
356
|
|
|
340
357
|
### Validacao Estrutural
|
|
341
358
|
|
|
@@ -427,10 +444,14 @@ ref.saved$.subscribe((payload) => {
|
|
|
427
444
|
|
|
428
445
|
### Known limitations and pending investigation
|
|
429
446
|
|
|
430
|
-
1. Nao existe editor dedicado para `dataSource.data` (dataset local grande).
|
|
431
|
-
2.
|
|
432
|
-
3. `
|
|
433
|
-
4.
|
|
447
|
+
1. Nao existe editor dedicado para alterar `dataSource.data` (dataset local grande); o editor mostra resumo, amostra e precedencia para evitar erro silencioso.
|
|
448
|
+
2. `rules` possui editor guiado basico com `effects[0]`, mas ainda nao tem builder visual de Json Logic, preview de impacto por item ou authoring multi-effect. O runtime atualmente materializa o primeiro efeito valido.
|
|
449
|
+
3. `layout.rowLayout` possui editor guiado com warnings inline para slots sem materializacao, mas ainda nao tem preview visual por slot.
|
|
450
|
+
4. `export` possui editor guiado com warning de `includeFields` desconhecido e preview compacto de colunas/amostra, mas ainda nao tem preview fiel do payload final gerado pelo runtime.
|
|
451
|
+
5. `expansion.dataSource` remoto e `expansion.schemaContract` permanecem JSON-only para authoring; o editor mostra diagnostico de seguranca e preservacao ate existir prova runtime especifica de carregamento remoto.
|
|
452
|
+
6. O editor preserva em JSON/config campos declared-only que podem nao ter efeito no runtime final, mas nao deve promove-los como controles visuais ativos.
|
|
453
|
+
7. `isDirty$` usa comparacao por snapshot JSON; mudancas de ordenacao de chaves/objetos podem gerar ruido em cenarios extremos.
|
|
454
|
+
8. Conversao automatica de `globalAction.payload` string para JSON e heuristica (so quando formato parece objeto/array).
|
|
434
455
|
|
|
435
456
|
### Source references
|
|
436
457
|
|
|
@@ -30,8 +30,8 @@ source_of_truth:
|
|
|
30
30
|
- "projects/praxis-list/src/lib/ai/list-ai.adapter.ts"
|
|
31
31
|
- "projects/praxis-list/src/lib/ai/list-ai-capabilities.ts"
|
|
32
32
|
- "projects/praxis-list/src/lib/ai/list-context-pack.ts"
|
|
33
|
-
source_of_truth_last_verified: "2026-06-
|
|
34
|
-
last_updated: "2026-06-
|
|
33
|
+
source_of_truth_last_verified: "2026-06-16"
|
|
34
|
+
last_updated: "2026-06-16"
|
|
35
35
|
toc: true
|
|
36
36
|
sidebar: true
|
|
37
37
|
tags:
|
|
@@ -181,7 +181,7 @@ Este arquivo foi adaptado para o padrao canonico atual sem remover conteudo tecn
|
|
|
181
181
|
| Event | Payload | Trigger | Stability | Notes |
|
|
182
182
|
| ----------------- | -------------------- | --------------------------------------------------- | --------- | ------------------------------------ |
|
|
183
183
|
| `itemClick` | `ListItemEvent` | clique (mouse/teclado) em item | Partial | Preservado da documentação anterior. |
|
|
184
|
-
| `actionClick` | `ListActionEvent` | acao local de item
|
|
184
|
+
| `actionClick` | `ListActionEvent` | acao local de item, global com `emitLocal=true` ou acao de `rich-content` hospedado | Partial | `rich-content` inclui `payload?` e `source='rich-content'`. |
|
|
185
185
|
| `selectionChange` | `ListSelectionEvent` | alteracao de selecao em `mat-selection-list` | Partial | Preservado da documentação anterior. |
|
|
186
186
|
| `exportAction` | `any` | resultado ou erro de exportacao de colecao | Active | Usa `PraxisCollectionExportService`. |
|
|
187
187
|
|
|
@@ -273,7 +273,7 @@ A maior parte das falhas opera em modo fail-open (persistência, inferência, co
|
|
|
273
273
|
| Condition | Mode | Runtime behavior | Consumer impact |
|
|
274
274
|
| --------------------------------- | --------- | ------------------------------------------------ | ---------------------------------- |
|
|
275
275
|
| Falha em `loadConfig/saveConfig` | fail-open | ignora persistência e mantém config ativa | sem perda de renderização |
|
|
276
|
-
| `showIf`
|
|
276
|
+
| `showIf` invalido | fail-closed | item/acao e ocultado com warning | evita renderizacao indevida |
|
|
277
277
|
| comando global não disponível | fail-open | ação global não executa; fluxo local continua | comportamento parcial, sem crash |
|
|
278
278
|
| contrato de seleção inconsistente | fail-soft | adapter normaliza payload para formato suportado | pode reduzir fidelidade do payload |
|
|
279
279
|
|
|
@@ -658,14 +658,19 @@ Tipo declarado sem renderer dedicado:
|
|
|
658
658
|
| `expansion.sections` | Active | array de secoes da detail row |
|
|
659
659
|
| `expansion.sections[].id` | Active | identidade da secao |
|
|
660
660
|
| `expansion.sections[].title` | Active | titulo visivel da secao |
|
|
661
|
-
| `expansion.sections[].type` | Active | `info-list/chip-list/timeline/key-value` |
|
|
661
|
+
| `expansion.sections[].type` | Active | `info-list/chip-list/timeline/key-value/metadata/component/rich-content` |
|
|
662
662
|
| `expansion.sections[].itemsExpr` | Active | expr de colecao/objeto por item |
|
|
663
|
+
| `expansion.sections[].document` | Active | `RichContentDocument` canonico para secoes `rich-content` |
|
|
664
|
+
| `expansion.sections[].documentExpr` | Active | expr que resolve um `RichContentDocument` por item |
|
|
663
665
|
| `expansion.sections[].emptyLabel` | Active | mensagem vazia por secao |
|
|
664
666
|
|
|
665
667
|
Notas de UX/WCAG:
|
|
666
668
|
|
|
667
669
|
- `aria-expanded` e `aria-controls` ficam no owner real do trigger (`row` ou `icon`);
|
|
668
670
|
- com `selection.mode !== 'none'`, a selecao continua dona da linha e a expansao passa a ser acionada apenas pelo icone;
|
|
671
|
+
- `expansion.sections[].itemsExpr` pode resolver arrays/objetos JSON com placeholders; o runtime materializa a estrutura em vez de exibir JSON cru;
|
|
672
|
+
- para detalhes editoriais avancados, use `type='rich-content'` com `document`/`documentExpr`; a lista hospeda o contrato canonico `RichContentDocument` em vez de criar DSL visual paralela;
|
|
673
|
+
- ações dentro de seções `rich-content` são mediadas por `hostCapabilities` da própria lista, reemitidas em `actionClick` com `payload?` e `source='rich-content'`, e `confirmMessage` usa o mesmo `GLOBAL_DIALOG_SERVICE` das ações nativas;
|
|
669
674
|
- a V1 nao suporta markup arbitrario nem detail builders livres;
|
|
670
675
|
- `cards` e `tiles` permanecem fora de escopo.
|
|
671
676
|
- o scenario `executive-expansion` da doc page e uma composicao editorial canonica de validacao visual; campos como `balanceDisplay`, `limitDisplay`, `usageLabel`, `riskDisplay` e `riskLabel` pertencem ao dataset de exemplo, nao ao contrato base de `PraxisListConfig`.
|
|
@@ -681,7 +686,7 @@ Notas de UX/WCAG:
|
|
|
681
686
|
| `actions[].kind` | Active | `icon` ou `button` |
|
|
682
687
|
| `actions[].buttonVariant` | Active | `stroked/raised/flat` |
|
|
683
688
|
| `actions[].showIf` | Active | condição Json Logic avaliada no contexto `row` |
|
|
684
|
-
| `actions[].emitPayload` | Declared-only | sem uso no payload de `
|
|
689
|
+
| `actions[].emitPayload` | Declared-only | sem uso no payload de ações nativas; ações `rich-content` hospedadas podem emitir `payload?` próprio |
|
|
685
690
|
| `actions[].globalAction` | Active | integra com `GlobalActionService.executeRef`; suporta `navigation.openRoute` para navegação interna canônica |
|
|
686
691
|
| `actions[].globalAction.actionId` | Active | identificador canonico da acao global |
|
|
687
692
|
| `actions[].globalAction.payload` | Active | template/JSON resolvido recursivamente, inclusive `item.id` em rotas internas |
|
|
@@ -849,8 +854,10 @@ AI:
|
|
|
849
854
|
| `expansion.sections` | Active | secoes do detail row |
|
|
850
855
|
| `expansion.sections[].id` | Active | id |
|
|
851
856
|
| `expansion.sections[].title` | Active | title |
|
|
852
|
-
| `expansion.sections[].type` | Active | info-list/chip-list/timeline/key-value |
|
|
857
|
+
| `expansion.sections[].type` | Active | info-list/chip-list/timeline/key-value/metadata/component/rich-content |
|
|
853
858
|
| `expansion.sections[].itemsExpr` | Active | expr |
|
|
859
|
+
| `expansion.sections[].document` | Active | `RichContentDocument` para `rich-content` |
|
|
860
|
+
| `expansion.sections[].documentExpr` | Active | expr que resolve `RichContentDocument` |
|
|
854
861
|
| `expansion.sections[].emptyLabel` | Active | empty state da secao |
|
|
855
862
|
| `actions` | Partial | bloco de acoes |
|
|
856
863
|
| `actions[].id` | Active | id |
|