@praxisui/list 10.0.0-rc.33 → 10.0.0-rc.35
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/ai/component-registry.json +240 -49
- package/fesm2022/praxisui-list.mjs +738 -116
- package/package.json +6 -6
- package/src/lib/praxis-list.json-api.md +153 -43
- package/types/praxisui-list.d.ts +32 -1
package/package.json
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@praxisui/list",
|
|
3
|
-
"version": "10.0.0-rc.
|
|
3
|
+
"version": "10.0.0-rc.35",
|
|
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/cdk": "^21.0.0",
|
|
9
9
|
"@angular/material": "^21.0.0",
|
|
10
|
-
"@praxisui/dynamic-fields": "^10.0.0-rc.
|
|
10
|
+
"@praxisui/dynamic-fields": "^10.0.0-rc.35",
|
|
11
11
|
"rxjs": ">=7 <9",
|
|
12
12
|
"@angular/forms": "^21.0.0",
|
|
13
13
|
"@angular/router": "^21.0.0",
|
|
14
|
-
"@praxisui/ai": "^10.0.0-rc.
|
|
15
|
-
"@praxisui/core": "^10.0.0-rc.
|
|
16
|
-
"@praxisui/rich-content": "^10.0.0-rc.
|
|
17
|
-
"@praxisui/settings-panel": "^10.0.0-rc.
|
|
14
|
+
"@praxisui/ai": "^10.0.0-rc.35",
|
|
15
|
+
"@praxisui/core": "^10.0.0-rc.35",
|
|
16
|
+
"@praxisui/rich-content": "^10.0.0-rc.35",
|
|
17
|
+
"@praxisui/settings-panel": "^10.0.0-rc.35"
|
|
18
18
|
},
|
|
19
19
|
"dependencies": {
|
|
20
20
|
"tslib": "^2.3.0",
|
|
@@ -104,11 +104,13 @@ Este documento e a referencia canonica da API JSON de praxis-list.
|
|
|
104
104
|
| ------------ | ------------- | ------------- | ------- | ------------- | ---------------------------------------------------------------------------- |
|
|
105
105
|
| `id` | not-specified | not-specified | n/a | Declared-only | preservado no contrato, sem efeito direto |
|
|
106
106
|
| `dataSource` | not-specified | not-specified | n/a | Active | origem de dados, query e sort |
|
|
107
|
-
| `layout` | not-specified | not-specified | n/a | Partial | maioria ativa
|
|
107
|
+
| `layout` | not-specified | not-specified | n/a | Partial | maioria ativa (`rowLayout`, `virtualScroll`, `itemAppearance`); `stickySectionHeader` sem binding funcional |
|
|
108
108
|
| `skin` | not-specified | not-specified | n/a | Active | classes + css vars + inline style sanitizado |
|
|
109
|
-
| `selection` | not-specified | not-specified | n/a | Active | binding e shape do payload de selecao
|
|
110
|
-
| `templating` | not-specified | not-specified | n/a | Partial | quase completo; `type='slot'` sem renderer
|
|
111
|
-
| `
|
|
109
|
+
| `selection` | not-specified | not-specified | n/a | Active | binding, `showControl` e shape do payload de selecao |
|
|
110
|
+
| `templating` | not-specified | not-specified | n/a | Partial | quase completo (`compose`, `metric`, `datetime`, `relative` ativos); `type='slot'` sem renderer |
|
|
111
|
+
| `rules` | not-specified | not-specified | n/a | Active | `itemStyles` (com `tone` semântico) e `slotOverrides` condicionais por linha |
|
|
112
|
+
| `actions` | not-specified | not-specified | n/a | Partial | quase completo (`placement='actions'|'trailing'|'menu'`, `kind='icon'|'button'|'menu-item'`); `emitPayload` sem consumo no runtime |
|
|
113
|
+
| `itemActions`| not-specified | not-specified | n/a | Active | alias compatível para `actions` |
|
|
112
114
|
| `i18n` | not-specified | not-specified | n/a | Active | locale/currency para `date/currency` |
|
|
113
115
|
| `ui` | not-specified | not-specified | n/a | Active | busca/sort/range |
|
|
114
116
|
| `export` | not-specified | not-specified | n/a | Active | contrato compartilhado de exportação de coleções |
|
|
@@ -141,11 +143,13 @@ Este arquivo foi adaptado para o padrao canonico atual sem remover conteudo tecn
|
|
|
141
143
|
| Block | Purpose | Required | Merge strategy | Notes |
|
|
142
144
|
| ------------ | --------------------------------------------------- | -------- | -------------- | -------------------------------------------------------------- |
|
|
143
145
|
| `dataSource` | Origem de dados, query, sort e paginação | Yes | deep-merge | Base para `ListDataService`. |
|
|
144
|
-
| `layout` | Modelo visual e paginação do componente | No | deep-merge | `virtualScroll` e `
|
|
146
|
+
| `layout` | Modelo visual e paginação do componente | No | deep-merge | `rowLayout`, `virtualScroll` e `itemAppearance` ativos; `stickySectionHeader` declarativo. |
|
|
145
147
|
| `skin` | Tema visual com classes, css vars e style inline | No | replace-block | Processado por `ListSkinService`. |
|
|
146
|
-
| `selection` | Estratégia de seleção e integração com formulário | No | deep-merge | Normaliza modo single/multiple e payload de retorno.
|
|
147
|
-
| `templating` | Slots primário/secundário/meta/trailing | No | deep-merge | Avaliação por template engine + inferência opcional.
|
|
148
|
-
| `
|
|
148
|
+
| `selection` | Estratégia de seleção e integração com formulário | No | deep-merge | Normaliza modo single/multiple, `showControl` e payload de retorno. |
|
|
149
|
+
| `templating` | Slots primário/secundário/meta/trailing | No | deep-merge | Avaliação por template engine (`compose`, `metric`, `datetime`, `relative` inclusos) + inferência opcional. |
|
|
150
|
+
| `rules` | Regras condicionais de estilo e override de slot | No | deep-merge | `itemStyles` (com `tone`) e `slotOverrides` avaliados por item. |
|
|
151
|
+
| `actions` | Ações locais, inline, overflow menu e globais | No | replace-array | Suporta `placement` (`actions`, `trailing`, `menu`) e `kind` (`icon`, `button`, `menu-item`). |
|
|
152
|
+
| `itemActions`| Alias compatível de `actions` | No | replace-array | Normalizado para `actions` quando `actions` não for informado. |
|
|
149
153
|
| `i18n` | Locale/currency para renderizadores `date/currency` | No | deep-merge | Aplica fallback de locale/currency quando ausente. |
|
|
150
154
|
| `ui` | Busca, ordenação e elementos auxiliares de UX | No | deep-merge | Conecta com stream de pesquisa e estado de página. |
|
|
151
155
|
|
|
@@ -155,11 +159,13 @@ Este arquivo foi adaptado para o padrao canonico atual sem remover conteudo tecn
|
|
|
155
159
|
| ------------ | ------------- | ------------- | ------- | ----------------- | ---------------------------------------------------------------------------- |
|
|
156
160
|
| `id` | not-specified | not-specified | n/a | component-defined | preservado no contrato, sem efeito direto |
|
|
157
161
|
| `dataSource` | not-specified | not-specified | n/a | component-defined | origem de dados, query e sort |
|
|
158
|
-
| `layout` | not-specified | not-specified | n/a | component-defined | maioria ativa
|
|
162
|
+
| `layout` | not-specified | not-specified | n/a | component-defined | maioria ativa (`rowLayout`, `virtualScroll`, `itemAppearance`); `stickySectionHeader` sem binding funcional |
|
|
159
163
|
| `skin` | not-specified | not-specified | n/a | component-defined | classes + css vars + inline style sanitizado |
|
|
160
|
-
| `selection` | not-specified | not-specified | n/a | component-defined | binding e shape do payload de selecao
|
|
164
|
+
| `selection` | not-specified | not-specified | n/a | component-defined | binding, `showControl` e shape do payload de selecao |
|
|
161
165
|
| `templating` | not-specified | not-specified | n/a | component-defined | quase completo; `type='slot'` sem renderer |
|
|
162
|
-
| `
|
|
166
|
+
| `rules` | not-specified | not-specified | n/a | component-defined | `itemStyles` e `slotOverrides` ativos no runtime |
|
|
167
|
+
| `actions` | not-specified | not-specified | n/a | component-defined | quase completo (`placement` e `menu-item` ativos); `emitPayload` sem consumo |
|
|
168
|
+
| `itemActions`| not-specified | not-specified | n/a | component-defined | alias compatível para `actions` |
|
|
163
169
|
| `i18n` | not-specified | not-specified | n/a | component-defined | locale/currency para `date/currency` |
|
|
164
170
|
| `ui` | not-specified | not-specified | n/a | component-defined | busca/sort/range |
|
|
165
171
|
| `a11y` | not-specified | not-specified | n/a | component-defined | aria ativos; `highContrast/reduceMotion` sem efeito |
|
|
@@ -325,6 +331,8 @@ Legenda de suporte:
|
|
|
325
331
|
- [Skin API](#skin-api)
|
|
326
332
|
- [Selection API](#selection-api)
|
|
327
333
|
- [Templating API (deep dive)](#templating-api-deep-dive)
|
|
334
|
+
- [Rules API](#rules-api)
|
|
335
|
+
- [Expansion API](#expansion-api)
|
|
328
336
|
- [Actions API](#actions-api)
|
|
329
337
|
- [UI, i18n, a11y e events](#ui-i18n-a11y-e-events)
|
|
330
338
|
- [Expressoes suportadas (`expr` e `showIf`)](#expressoes-suportadas-expr-e-showif)
|
|
@@ -491,8 +499,10 @@ interface PraxisListConfig {
|
|
|
491
499
|
selection?: {...};
|
|
492
500
|
interaction?: {...};
|
|
493
501
|
templating?: {...};
|
|
502
|
+
rules?: {...};
|
|
494
503
|
expansion?: {...};
|
|
495
504
|
actions?: Array<...>;
|
|
505
|
+
itemActions?: Array<...>;
|
|
496
506
|
i18n?: {
|
|
497
507
|
locale?: string;
|
|
498
508
|
currency?: string;
|
|
@@ -510,13 +520,15 @@ interface PraxisListConfig {
|
|
|
510
520
|
| ------------- | ------------- | ---------------------------------------------------------------------------- |
|
|
511
521
|
| `id` | Declared-only | preservado no contrato, sem efeito direto |
|
|
512
522
|
| `dataSource` | Active | origem de dados, query e sort |
|
|
513
|
-
| `layout` | Partial | maioria ativa
|
|
523
|
+
| `layout` | Partial | maioria ativa (`rowLayout`, `virtualScroll`, `itemAppearance`); `stickySectionHeader` sem binding funcional |
|
|
514
524
|
| `skin` | Active | classes + css vars + inline style sanitizado |
|
|
515
|
-
| `selection` | Active | binding e shape do payload de selecao
|
|
525
|
+
| `selection` | Active | binding, `showControl` e shape do payload de selecao |
|
|
516
526
|
| `interaction` | Partial | expansao inline V1; apenas `variant=list` |
|
|
517
|
-
| `templating` | Partial | quase completo; `type='slot'` sem renderer
|
|
518
|
-
| `
|
|
519
|
-
| `
|
|
527
|
+
| `templating` | Partial | quase completo (`compose`, `metric`, `datetime`, `relative` ativos); `type='slot'` sem renderer |
|
|
528
|
+
| `rules` | Active | `itemStyles` (com `tone`) e `slotOverrides` condicionais por linha |
|
|
529
|
+
| `expansion` | Partial | detail row tipada da V1 (com pipes avaliados em `itemsExpr`) |
|
|
530
|
+
| `actions` | Partial | quase completo (`placement`, `menu-item` ativos); `emitPayload` sem consumo no runtime |
|
|
531
|
+
| `itemActions` | Active | alias compatível para `actions` |
|
|
520
532
|
| `i18n` | Active | locale/currency para `date/currency` |
|
|
521
533
|
| `ui` | Active | busca/sort/range |
|
|
522
534
|
| `export` | Active | exportação via contrato compartilhado de coleções |
|
|
@@ -534,19 +546,27 @@ interface PraxisListConfig {
|
|
|
534
546
|
|
|
535
547
|
#### Layout API
|
|
536
548
|
|
|
537
|
-
| Caminho
|
|
538
|
-
|
|
|
539
|
-
| `layout.variant`
|
|
540
|
-
| `layout.density`
|
|
541
|
-
| `layout.itemSpacing`
|
|
542
|
-
| `layout.itemAppearance`
|
|
543
|
-
| `layout.lines`
|
|
544
|
-
| `layout.dividers`
|
|
545
|
-
| `layout.model`
|
|
546
|
-
| `layout.groupBy`
|
|
547
|
-
| `layout.pageSize`
|
|
548
|
-
| `layout.
|
|
549
|
-
| `layout.
|
|
549
|
+
| Caminho | Status | Observacao |
|
|
550
|
+
| -------------------------------------- | ------------- | ----------------------------------------------------------------------------------------------------------- |
|
|
551
|
+
| `layout.variant` | Active | `list/cards/tiles` |
|
|
552
|
+
| `layout.density` | Active | classe `density-*` |
|
|
553
|
+
| `layout.itemSpacing` | Active | classe `item-spacing-*` |
|
|
554
|
+
| `layout.itemAppearance` | Active | `flat/card` (isola itens em cartões sob `variant: 'list'`) |
|
|
555
|
+
| `layout.lines` | Active | linhas de texto + classe `lines-*` |
|
|
556
|
+
| `layout.dividers` | Active | divisores no modo `list` |
|
|
557
|
+
| `layout.model` | Active | classe `model-*` |
|
|
558
|
+
| `layout.groupBy` | Active | agrupamento em `sections$` |
|
|
559
|
+
| `layout.pageSize` | Active | page size inicial |
|
|
560
|
+
| `layout.rowLayout.type` | Active | `'grid'` para distribuicao colunar explicita dos slots em `variant='list'` |
|
|
561
|
+
| `layout.rowLayout.gap` | Active | gap horizontal entre colunas do `rowLayout` |
|
|
562
|
+
| `layout.rowLayout.align` | Active | alinhamento vertical das celulas (`start/center/end/stretch`) |
|
|
563
|
+
| `layout.rowLayout.columns` | Active | array de colunas `{ id?, slot, width, align?, minWidth?, maxWidth? }` (`leading/primary/secondary/meta/trailing/actions`) |
|
|
564
|
+
| `layout.stickySectionHeader` | Declared-only | sem sticky runtime |
|
|
565
|
+
| `layout.virtualScroll.enabled` | Active | habilita CDK Virtual Scroll (`variant='list'` sem `groupBy`); quando combinado com `interaction.expandable=true`, aplica viewport delimitado com barra de rolagem fina |
|
|
566
|
+
| `layout.virtualScroll.itemSize` | Active | altura estimada por linha em px no CDK Virtual Scroll |
|
|
567
|
+
| `layout.virtualScroll.minBufferPx` | Active | buffer minimo em px |
|
|
568
|
+
| `layout.virtualScroll.maxBufferPx` | Active | buffer maximo em px |
|
|
569
|
+
| `layout.virtualScroll.viewportHeight` | Active | altura do viewport (ex: `360` ou `'360px'`) tanto em virtual scroll quanto no fallback com `expandable=true`|
|
|
550
570
|
|
|
551
571
|
#### Skin API
|
|
552
572
|
|
|
@@ -570,13 +590,14 @@ Notas de seguranca:
|
|
|
570
590
|
|
|
571
591
|
#### Selection API
|
|
572
592
|
|
|
573
|
-
| Caminho | Status | Observacao
|
|
574
|
-
| --------------------------- | ------ |
|
|
575
|
-
| `selection.mode` | Active | `none/single/multiple`
|
|
576
|
-
| `selection.
|
|
577
|
-
| `selection.
|
|
578
|
-
| `selection.
|
|
579
|
-
| `selection.
|
|
593
|
+
| Caminho | Status | Observacao |
|
|
594
|
+
| --------------------------- | ------ | -------------------------------------------------------------------------------------------------- |
|
|
595
|
+
| `selection.mode` | Active | `none/single/multiple` |
|
|
596
|
+
| `selection.showControl` | Active | exibe/oculta explicitamente o controle visual (`radio`/`checkbox`) sem desabilitar `selection.mode` |
|
|
597
|
+
| `selection.formControlName` | Active | binding em form externo |
|
|
598
|
+
| `selection.formControlPath` | Active | binding em path do form externo |
|
|
599
|
+
| `selection.compareBy` | Active | igualdade de seleção e geração de `ids` |
|
|
600
|
+
| `selection.return` | Active | `value/item/id` no payload `selectionChange.value` |
|
|
580
601
|
|
|
581
602
|
A identidade de renderização é independente da identidade escolhida para a
|
|
582
603
|
seleção. Registros HATEOAS usam prioritariamente `_links.self.href`, evitando
|
|
@@ -673,6 +694,22 @@ Tipo declarado sem renderer dedicado:
|
|
|
673
694
|
| `templating.featuresMode` | Active | `icons+labels/icons-only/labels-only` |
|
|
674
695
|
| `templating.skeleton.count` | Active | skeleton durante loading |
|
|
675
696
|
|
|
697
|
+
#### Rules API
|
|
698
|
+
|
|
699
|
+
| Caminho | Status | Observacao |
|
|
700
|
+
| ---------------------------------- | ------ | ---------------------------------------------------------------------------------------------- |
|
|
701
|
+
| `rules.itemStyles` | Active | array de regras visuais avaliadas por linha |
|
|
702
|
+
| `rules.itemStyles[].id` | Active | identificador da regra |
|
|
703
|
+
| `rules.itemStyles[].condition` | Active | condição Json Logic (ex: `{"==":[{"var":"row.severidade"},"CRITICA"]}`) ou expressão booleana |
|
|
704
|
+
| `rules.itemStyles[].tone` | Active | tom semântico (`neutral/info/success/warning/danger`) materializado como `.item-tone-*` |
|
|
705
|
+
| `rules.itemStyles[].class` | Active | classes CSS extras adicionadas ao item quando a condição é verdadeira |
|
|
706
|
+
| `rules.itemStyles[].style` | Active | declarações CSS inline adicionadas ao item quando a condição é verdadeira |
|
|
707
|
+
| `rules.slotOverrides` | Active | array de overrides condicionais de template por slot (`leading/primary/secondary/meta/trailing`) |
|
|
708
|
+
| `rules.slotOverrides[].id` | Active | identificador do override |
|
|
709
|
+
| `rules.slotOverrides[].slot` | Active | slot alvo (`leading/primary/secondary/meta/trailing`) |
|
|
710
|
+
| `rules.slotOverrides[].condition` | Active | condição Json Logic ou expressão booleana avaliada por linha |
|
|
711
|
+
| `rules.slotOverrides[].template` | Active | `TemplateDef` substituto para o slot quando a condição for verdadeira |
|
|
712
|
+
|
|
676
713
|
#### Expansion API
|
|
677
714
|
|
|
678
715
|
| Caminho | Status | Observacao |
|
|
@@ -711,9 +748,11 @@ Notas de UX/WCAG:
|
|
|
711
748
|
| `actions[].icon` | Active | icone |
|
|
712
749
|
| `actions[].label` | Active | label/aria-label |
|
|
713
750
|
| `actions[].color` | Active | tema/cor custom |
|
|
714
|
-
| `actions[].kind` | Active | `icon` ou `
|
|
751
|
+
| `actions[].kind` | Active | `icon`, `button` ou `menu-item` (item de menu de overflow `⋮`) |
|
|
752
|
+
| `actions[].placement` | Active | `actions` (default), `trailing` (inline no slot trailing) ou `menu` (agrupado em `mat-menu` de overflow) |
|
|
715
753
|
| `actions[].buttonVariant` | Active | `stroked/raised/flat` |
|
|
716
754
|
| `actions[].showIf` | Active | condição Json Logic avaliada no contexto `row` |
|
|
755
|
+
| `itemActions` | Active | alias compatível para `actions` (normalizado automaticamente quando `actions` estiver ausente) |
|
|
717
756
|
| `actions[].emitPayload` | Declared-only | sem uso no payload de ações nativas; ações `rich-content` hospedadas podem emitir `payload?` próprio |
|
|
718
757
|
| `actions[].action` | Active | `surface.open` identifica a execução contextual governada quando acompanhada de `recordOpen` |
|
|
719
758
|
| `actions[].recordOpen` | Active | referência mínima `{ sourceIdentityField, target: { resourceKey, surfaceId } }`; o runtime reconsulta catálogo, item e `_links.surfaces` antes de materializar |
|
|
@@ -828,8 +867,18 @@ AI:
|
|
|
828
867
|
| `layout.dividers` | Active | divisor no list |
|
|
829
868
|
| `layout.model` | Active | classe host |
|
|
830
869
|
| `layout.groupBy` | Active | agrupamento |
|
|
870
|
+
| `layout.rowLayout` | Active | grid colunar explicito por linha (`variant='list'`) |
|
|
871
|
+
| `layout.rowLayout.type` | Active | `'grid'` |
|
|
872
|
+
| `layout.rowLayout.gap` | Active | gap horizontal entre colunas |
|
|
873
|
+
| `layout.rowLayout.align` | Active | `start/center/end/stretch` |
|
|
874
|
+
| `layout.rowLayout.columns` | Active | array de colunas `{ id?, slot, width, align?, minWidth?, maxWidth? }` |
|
|
831
875
|
| `layout.stickySectionHeader` | Declared-only | sem sticky runtime |
|
|
832
|
-
| `layout.virtualScroll` |
|
|
876
|
+
| `layout.virtualScroll` | Active | CDK Virtual Scroll + bounded scroll fallback com `expandable=true` |
|
|
877
|
+
| `layout.virtualScroll.enabled` | Active | habilita virtual scroll ou viewport delimitado |
|
|
878
|
+
| `layout.virtualScroll.itemSize` | Active | altura por item em px |
|
|
879
|
+
| `layout.virtualScroll.minBufferPx` | Active | buffer minimo em px |
|
|
880
|
+
| `layout.virtualScroll.maxBufferPx` | Active | buffer maximo em px |
|
|
881
|
+
| `layout.virtualScroll.viewportHeight` | Active | altura do viewport (px ou CSS length) |
|
|
833
882
|
| `layout.pageSize` | Active | pagina remota |
|
|
834
883
|
| `skin` | Active | bloco de skin |
|
|
835
884
|
| `skin.type` | Active | classe skin |
|
|
@@ -845,6 +894,7 @@ AI:
|
|
|
845
894
|
| `skin.inlineStyle` | Active | css inline sanitizado |
|
|
846
895
|
| `selection` | Active | bloco de selecao |
|
|
847
896
|
| `selection.mode` | Active | none/single/multiple |
|
|
897
|
+
| `selection.showControl` | Active | visibilidade explicita do radio/checkbox |
|
|
848
898
|
| `selection.formControlName` | Active | binding form |
|
|
849
899
|
| `selection.formControlPath` | Active | binding form |
|
|
850
900
|
| `selection.compareBy` | Active | igualdade de seleção e ids |
|
|
@@ -890,12 +940,24 @@ AI:
|
|
|
890
940
|
| `templating.featuresMode` | Active | icons+labels/icons-only/labels-only |
|
|
891
941
|
| `templating.skeleton` | Active | skeleton bloco |
|
|
892
942
|
| `templating.skeleton.count` | Active | skeleton count |
|
|
943
|
+
| `rules` | Active | bloco de regras condicionais por linha |
|
|
944
|
+
| `rules.itemStyles` | Active | estilos condicionais de linha |
|
|
945
|
+
| `rules.itemStyles[].id` | Active | id da regra |
|
|
946
|
+
| `rules.itemStyles[].condition` | Active | condicao Json Logic ou expressao booleana |
|
|
947
|
+
| `rules.itemStyles[].tone` | Active | `neutral/primary/success/warning/danger/muted` |
|
|
948
|
+
| `rules.itemStyles[].class` | Active | classes extras |
|
|
949
|
+
| `rules.itemStyles[].style` | Active | estilo inline extra |
|
|
950
|
+
| `rules.slotOverrides` | Active | overrides condicionais de slot |
|
|
951
|
+
| `rules.slotOverrides[].id` | Active | id do override |
|
|
952
|
+
| `rules.slotOverrides[].slot` | Active | slot alvo |
|
|
953
|
+
| `rules.slotOverrides[].condition` | Active | condicao Json Logic ou expressao booleana |
|
|
954
|
+
| `rules.slotOverrides[].template` | Active | `TemplateDef` substituto |
|
|
893
955
|
| `expansion` | Partial | detail row governada |
|
|
894
956
|
| `expansion.sections` | Active | secoes do detail row |
|
|
895
957
|
| `expansion.sections[].id` | Active | id |
|
|
896
958
|
| `expansion.sections[].title` | Active | title |
|
|
897
959
|
| `expansion.sections[].type` | Active | info-list/chip-list/timeline/key-value/metadata/component/rich-content |
|
|
898
|
-
| `expansion.sections[].itemsExpr` | Active | expr
|
|
960
|
+
| `expansion.sections[].itemsExpr` | Active | expr (suporta placeholders com pipes) |
|
|
899
961
|
| `expansion.sections[].document` | Active | `RichContentDocument` para `rich-content` |
|
|
900
962
|
| `expansion.sections[].documentExpr` | Active | expr que resolve `RichContentDocument` |
|
|
901
963
|
| `expansion.sections[].emptyLabel` | Active | empty state da secao |
|
|
@@ -906,11 +968,13 @@ AI:
|
|
|
906
968
|
| `expansion.rendering.class` | Active | classe do shell |
|
|
907
969
|
| `expansion.rendering.style` | Active | estilo adicional |
|
|
908
970
|
| `actions` | Partial | bloco de acoes |
|
|
971
|
+
| `itemActions` | Active | alias compatível para `actions` |
|
|
909
972
|
| `actions[].id` | Active | id |
|
|
910
973
|
| `actions[].icon` | Active | icon |
|
|
911
974
|
| `actions[].label` | Active | label |
|
|
912
975
|
| `actions[].color` | Active | color |
|
|
913
|
-
| `actions[].kind` | Active | icon/button
|
|
976
|
+
| `actions[].kind` | Active | icon/button/menu-item |
|
|
977
|
+
| `actions[].placement` | Active | actions/trailing/menu |
|
|
914
978
|
| `actions[].buttonVariant` | Active | raised/flat/stroked |
|
|
915
979
|
| `actions[].showIf` | Active | visibilidade |
|
|
916
980
|
| `actions[].emitPayload` | Declared-only | sem efeito runtime |
|
|
@@ -1015,11 +1079,25 @@ Recomendacao corporativa:
|
|
|
1015
1079
|
"layout": {
|
|
1016
1080
|
"variant": "list",
|
|
1017
1081
|
"itemAppearance": "card",
|
|
1018
|
-
"itemSpacing": "
|
|
1082
|
+
"itemSpacing": "tight",
|
|
1083
|
+
"virtualScroll": {
|
|
1084
|
+
"enabled": true,
|
|
1085
|
+
"itemSize": 76,
|
|
1086
|
+
"viewportHeight": "360px"
|
|
1087
|
+
}
|
|
1019
1088
|
},
|
|
1020
1089
|
"skin": {
|
|
1021
1090
|
"type": "glass"
|
|
1022
1091
|
},
|
|
1092
|
+
"selection": {
|
|
1093
|
+
"mode": "none",
|
|
1094
|
+
"showControl": false
|
|
1095
|
+
},
|
|
1096
|
+
"interaction": {
|
|
1097
|
+
"expandable": true,
|
|
1098
|
+
"expandTrigger": "row+icon",
|
|
1099
|
+
"expandMode": "single"
|
|
1100
|
+
},
|
|
1023
1101
|
"templating": {
|
|
1024
1102
|
"leading": {
|
|
1025
1103
|
"type": "icon",
|
|
@@ -1040,12 +1118,44 @@ Recomendacao corporativa:
|
|
|
1040
1118
|
},
|
|
1041
1119
|
"metaPlacement": "side"
|
|
1042
1120
|
},
|
|
1121
|
+
"rules": {
|
|
1122
|
+
"itemStyles": [
|
|
1123
|
+
{
|
|
1124
|
+
"id": "critical-tone",
|
|
1125
|
+
"condition": { "==": [{ "var": "row.severidade" }, "CRITICA"] },
|
|
1126
|
+
"tone": "danger"
|
|
1127
|
+
}
|
|
1128
|
+
]
|
|
1129
|
+
},
|
|
1130
|
+
"expansion": {
|
|
1131
|
+
"rendering": {
|
|
1132
|
+
"shell": "attached",
|
|
1133
|
+
"columns": 1
|
|
1134
|
+
},
|
|
1135
|
+
"sections": [
|
|
1136
|
+
{
|
|
1137
|
+
"id": "telemetry",
|
|
1138
|
+
"title": "Telemetria",
|
|
1139
|
+
"type": "key-value",
|
|
1140
|
+
"itemsExpr": "{\"Protocolo\":\"${item.protocolo}\",\"Local\":\"${item.localizacao}\"}"
|
|
1141
|
+
}
|
|
1142
|
+
]
|
|
1143
|
+
},
|
|
1043
1144
|
"actions": [
|
|
1044
1145
|
{
|
|
1045
1146
|
"id": "dispatch",
|
|
1046
1147
|
"label": "Despachar",
|
|
1047
|
-
"icon": "
|
|
1048
|
-
"kind": "icon"
|
|
1148
|
+
"icon": "bolt",
|
|
1149
|
+
"kind": "icon",
|
|
1150
|
+
"placement": "trailing",
|
|
1151
|
+
"showIf": { "==": [{ "var": "row.status" }, "ABERTO"] }
|
|
1152
|
+
},
|
|
1153
|
+
{
|
|
1154
|
+
"id": "details",
|
|
1155
|
+
"label": "Ver detalhes",
|
|
1156
|
+
"icon": "visibility",
|
|
1157
|
+
"kind": "menu-item",
|
|
1158
|
+
"placement": "menu"
|
|
1049
1159
|
}
|
|
1050
1160
|
]
|
|
1051
1161
|
}
|
package/types/praxisui-list.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ import * as i0 from '@angular/core';
|
|
|
4
4
|
import { OnInit, OnChanges, AfterViewInit, OnDestroy, EventEmitter, SimpleChanges, ChangeDetectorRef, DoCheck, Provider } from '@angular/core';
|
|
5
5
|
import { MatPaginatorSelectConfig, PageEvent } from '@angular/material/paginator';
|
|
6
6
|
import { FormGroup, FormControl } from '@angular/forms';
|
|
7
|
-
import { PraxisExportFormat, PraxisExportScope, PraxisRuntimeConditionalEffectRule, JsonLogicExpression, RichContentDocument, ResourceRecordOpenRef, GlobalActionRef, LocalizationConfig, AiCapability, PraxisDataQueryContext, RichBlockNode, RichBlockHostCapabilities, ApiEndpoint, ApiUrlEntry, SurfaceOpenActionEditorComponent, GlobalActionCatalogEntry, SurfaceOpenPayload, SettingsValueProvider as SettingsValueProvider$1, RichPresenterNode, RichComposeNode, ComponentDocMeta, AiCapabilityCategory, AiCapabilityCatalog, AiValueKind, ComponentAuthoringManifest } from '@praxisui/core';
|
|
7
|
+
import { PraxisExportFormat, PraxisExportScope, PraxisRuntimeConditionalEffectRule, JsonLogicExpression, RichContentDocument, ResourceRecordOpenRef, GlobalActionRef, LocalizationConfig, AiCapability, PraxisDataQueryContext, RichBlockNode, RichBlockHostCapabilities, ApiEndpoint, ApiUrlEntry, SurfaceOpenActionEditorComponent, DiscoveredResourceOption, GlobalActionCatalogEntry, SurfaceOpenPayload, SettingsValueProvider as SettingsValueProvider$1, RichPresenterNode, RichComposeNode, ComponentDocMeta, AiCapabilityCategory, AiCapabilityCatalog, AiValueKind, ComponentAuthoringManifest } from '@praxisui/core';
|
|
8
8
|
import { BaseAiAdapter, AiResponseCompileResult, PatchResult, PraxisAssistantTurnViewState, PraxisAssistantShellLayout, PraxisAssistantShellLabels, PraxisAssistantSessionSnapshot, PraxisAssistantShellQuickReply, PraxisAssistantShellMessage } from '@praxisui/ai';
|
|
9
9
|
import { SettingsValueProvider } from '@praxisui/settings-panel';
|
|
10
10
|
import * as _praxisui_list from '@praxisui/list';
|
|
@@ -255,6 +255,12 @@ interface PraxisListConfig {
|
|
|
255
255
|
};
|
|
256
256
|
selection?: {
|
|
257
257
|
mode?: 'none' | 'single' | 'multiple';
|
|
258
|
+
/**
|
|
259
|
+
* Controls whether the explicit checkbox/radio control is rendered on each row.
|
|
260
|
+
* Defaults to `true` when selection is enabled. Set to `false` to allow row-click
|
|
261
|
+
* selection without displaying a trailing radio/checkbox control.
|
|
262
|
+
*/
|
|
263
|
+
showControl?: boolean;
|
|
258
264
|
formControlName?: string;
|
|
259
265
|
formControlPath?: string;
|
|
260
266
|
compareBy?: string;
|
|
@@ -624,6 +630,7 @@ declare class PraxisList implements OnInit, OnChanges, AfterViewInit, OnDestroy
|
|
|
624
630
|
isCardsVariant(): boolean;
|
|
625
631
|
isTilesVariant(): boolean;
|
|
626
632
|
isSelectionEnabled(): boolean;
|
|
633
|
+
shouldShowSelectionControl(): boolean;
|
|
627
634
|
private setupSelectionBinding;
|
|
628
635
|
private watchSelectionControl;
|
|
629
636
|
leading: (item: any) => Record<string, any> | null;
|
|
@@ -708,7 +715,9 @@ declare class PraxisList implements OnInit, OnChanges, AfterViewInit, OnDestroy
|
|
|
708
715
|
hasSkeleton(): boolean;
|
|
709
716
|
skeletonCount(): number;
|
|
710
717
|
skeletonItems(): any[];
|
|
718
|
+
private isVirtualScrollConfigured;
|
|
711
719
|
isVirtualScrollEnabled(): boolean;
|
|
720
|
+
hasBoundedScrollViewport(): boolean;
|
|
712
721
|
virtualScrollItemSize(): number;
|
|
713
722
|
virtualScrollMinBufferPx(): number;
|
|
714
723
|
virtualScrollMaxBufferPx(): number;
|
|
@@ -876,8 +885,13 @@ declare class PraxisList implements OnInit, OnChanges, AfterViewInit, OnDestroy
|
|
|
876
885
|
private mapDateTimeStyle;
|
|
877
886
|
starIcon(index: number, ratingValue: string | number): string;
|
|
878
887
|
isThemeColor(color?: string): boolean;
|
|
888
|
+
private normalizeTemplatingMapKey;
|
|
889
|
+
private lookupTemplatingMapValue;
|
|
890
|
+
resolveSemanticTone(color?: string): 'info' | 'success' | 'warning' | 'danger' | 'neutral' | undefined;
|
|
891
|
+
private resolveSemanticBaseColor;
|
|
879
892
|
chipStyle(color?: string, variant?: 'filled' | 'outlined'): string;
|
|
880
893
|
iconStyle(color?: string): string;
|
|
894
|
+
leadingIconStyle(color?: string, extraStyle?: string): string;
|
|
881
895
|
actionIconStyle(color?: string): string;
|
|
882
896
|
buttonStyle(color?: string, variant?: 'stroked' | 'raised' | 'flat'): string;
|
|
883
897
|
ratingMax(def?: any): number;
|
|
@@ -1243,6 +1257,7 @@ type NormalizedListConfig = Omit<PraxisListConfig, 'dataSource' | 'layout' | 'se
|
|
|
1243
1257
|
formControlPath?: string;
|
|
1244
1258
|
compareBy?: string;
|
|
1245
1259
|
return?: 'value' | 'item' | 'id';
|
|
1260
|
+
showControl?: boolean;
|
|
1246
1261
|
};
|
|
1247
1262
|
i18n: {
|
|
1248
1263
|
locale?: string;
|
|
@@ -1291,9 +1306,25 @@ declare class PraxisListConfigEditor implements SettingsValueProvider, DoCheck {
|
|
|
1291
1306
|
private initialJson;
|
|
1292
1307
|
private lastJson;
|
|
1293
1308
|
fields: string[];
|
|
1309
|
+
fieldSearchQuery: string;
|
|
1310
|
+
fieldMetaByName: Record<string, {
|
|
1311
|
+
name: string;
|
|
1312
|
+
label?: string;
|
|
1313
|
+
type?: string;
|
|
1314
|
+
description?: string;
|
|
1315
|
+
}>;
|
|
1316
|
+
selectedResourceOption: DiscoveredResourceOption | null;
|
|
1294
1317
|
schemaWarning: string;
|
|
1295
1318
|
private lastResourcePath?;
|
|
1296
1319
|
sortField?: string;
|
|
1320
|
+
private normalizeFieldSearch;
|
|
1321
|
+
onFieldSelectOpenedChange(_opened: boolean): void;
|
|
1322
|
+
getFilteredFields(selected?: string | string[] | null): string[];
|
|
1323
|
+
onDiscoveredResourceSelected(entry: DiscoveredResourceOption | null): void;
|
|
1324
|
+
getFieldLabel(fieldName?: string | null): string;
|
|
1325
|
+
getFieldTypeBadge(fieldName?: string | null): string;
|
|
1326
|
+
getFieldDescription(fieldName?: string | null): string;
|
|
1327
|
+
getFieldTriggerLabel(fieldName?: string | null): string;
|
|
1297
1328
|
sortDir: 'asc' | 'desc';
|
|
1298
1329
|
mappingPrimary: {
|
|
1299
1330
|
field?: string;
|