@praxisui/list 9.0.37 → 9.0.38
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 +2 -2
- package/fesm2022/praxisui-list.mjs +112 -35
- package/package.json +6 -6
- package/src/lib/praxis-list.json-api.md +27 -21
- package/types/praxisui-list.d.ts +16 -5
package/package.json
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@praxisui/list",
|
|
3
|
-
"version": "9.0.
|
|
3
|
+
"version": "9.0.38",
|
|
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.
|
|
9
|
+
"@praxisui/dynamic-fields": "^9.0.38",
|
|
10
10
|
"rxjs": ">=7 <9",
|
|
11
11
|
"@angular/forms": "^21.0.0",
|
|
12
12
|
"@angular/router": "^21.0.0",
|
|
13
|
-
"@praxisui/ai": "^9.0.
|
|
14
|
-
"@praxisui/core": "^9.0.
|
|
15
|
-
"@praxisui/rich-content": "^9.0.
|
|
16
|
-
"@praxisui/settings-panel": "^9.0.
|
|
13
|
+
"@praxisui/ai": "^9.0.38",
|
|
14
|
+
"@praxisui/core": "^9.0.38",
|
|
15
|
+
"@praxisui/rich-content": "^9.0.38",
|
|
16
|
+
"@praxisui/settings-panel": "^9.0.38"
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
19
|
"tslib": "^2.3.0",
|
|
@@ -166,23 +166,23 @@ Este arquivo foi adaptado para o padrao canonico atual sem remover conteudo tecn
|
|
|
166
166
|
|
|
167
167
|
### Input bindings
|
|
168
168
|
|
|
169
|
-
| Binding/Path
|
|
170
|
-
|
|
|
171
|
-
| `config`
|
|
172
|
-
| `configPersistenceStrategy` | `'local-first' \| 'input-first' \| 'volatile'` | No
|
|
173
|
-
| `listId`
|
|
174
|
-
| `componentInstanceId`
|
|
175
|
-
| `form`
|
|
176
|
-
| `enableCustomization`
|
|
169
|
+
| Binding/Path | Type | Required | Source | Runtime normalization | Notes |
|
|
170
|
+
| --------------------------- | ---------------------------------------------- | ------------- | --------------- | ----------------------------------------------------------- | ------------------------------------------------------------------------------ |
|
|
171
|
+
| `config` | `PraxisListConfig` | Yes (logical) | component-input | convertido para `ListAuthoringDocument` antes do apply plan | Config projetada de runtime; a autoria canônica é `ListAuthoringDocument`. |
|
|
172
|
+
| `configPersistenceStrategy` | `'local-first' \| 'input-first' \| 'volatile'` | No | component-input | `volatile` elimina a chave de storage | Use `volatile` em previews efêmeros que não podem ler nem gravar configuração. |
|
|
173
|
+
| `listId` | `string` | Yes | component-input | component key builder | Necessário para escopo de persistência. |
|
|
174
|
+
| `componentInstanceId` | `string \| undefined` | No | component-input | component key scoping | Evita colisão entre instâncias da mesma lista. |
|
|
175
|
+
| `form` | `FormGroup \| null \| undefined` | No | component-input | selection adapter | Integra seleção com controle externo quando configurado. |
|
|
176
|
+
| `enableCustomization` | `boolean` | No | component-input | boolean coercion | Input canônico para habilitar editor/configuração visual em runtime. |
|
|
177
177
|
|
|
178
178
|
### Output events
|
|
179
179
|
|
|
180
|
-
| Event | Payload | Trigger | Stability | Notes
|
|
181
|
-
| ----------------- | -------------------- | ----------------------------------------------------------------------------------- | --------- |
|
|
182
|
-
| `itemClick` | `ListItemEvent` | clique (mouse/teclado) em item | Partial | Preservado da documentação anterior.
|
|
183
|
-
| `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'`.
|
|
184
|
-
| `selectionChange` | `ListSelectionEvent` |
|
|
185
|
-
| `exportAction` | `any` | resultado ou erro de exportacao de colecao | Active | Usa `PraxisCollectionExportService`.
|
|
180
|
+
| Event | Payload | Trigger | Stability | Notes |
|
|
181
|
+
| ----------------- | -------------------- | ----------------------------------------------------------------------------------- | --------- | ------------------------------------------------------------ |
|
|
182
|
+
| `itemClick` | `ListItemEvent` | clique (mouse/teclado) em item | Partial | Preservado da documentação anterior. |
|
|
183
|
+
| `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'`. |
|
|
184
|
+
| `selectionChange` | `ListSelectionEvent` | alteração pelo controle explícito de seleção da linha | Partial | Preserva binding e payload; a superfície usa checkbox/radio. |
|
|
185
|
+
| `exportAction` | `any` | resultado ou erro de exportacao de colecao | Active | Usa `PraxisCollectionExportService`. |
|
|
186
186
|
|
|
187
187
|
### External side channels
|
|
188
188
|
|
|
@@ -425,7 +425,7 @@ Antes de liberar para producao:
|
|
|
425
425
|
| ----------------- | -------------------- | --------------------------------------------------- |
|
|
426
426
|
| `itemClick` | `ListItemEvent` | clique (mouse/teclado) em item |
|
|
427
427
|
| `actionClick` | `ListActionEvent` | acao local de item (ou global com `emitLocal=true`) |
|
|
428
|
-
| `selectionChange` | `ListSelectionEvent` |
|
|
428
|
+
| `selectionChange` | `ListSelectionEvent` | alteração pelo checkbox/radio explícito da linha |
|
|
429
429
|
| `exportAction` | `any` | exportacao concluida, delegada ou com erro |
|
|
430
430
|
|
|
431
431
|
#### Data mode and flow
|
|
@@ -573,6 +573,12 @@ Notas de seguranca:
|
|
|
573
573
|
| `selection.compareBy` | Active | gera `ids` e trackBy custom |
|
|
574
574
|
| `selection.return` | Active | `value/item/id` no payload `selectionChange.value` |
|
|
575
575
|
|
|
576
|
+
Na variante `list`, a materialização acessível usa um `mat-list` neutro. Cada
|
|
577
|
+
linha expõe checkbox (`multiple`) ou radio (`single`), ação principal, ações
|
|
578
|
+
secundárias e expansão como alvos de teclado irmãos. Isso elimina controles
|
|
579
|
+
interativos aninhados sem alterar `PraxisListConfig`, o `FormControl`, o formato
|
|
580
|
+
de `ListSelectionEvent` ou a precedência de `selection.compareBy`.
|
|
581
|
+
|
|
576
582
|
#### Export API
|
|
577
583
|
|
|
578
584
|
| Caminho | Status | Observacao |
|
|
@@ -677,7 +683,7 @@ Tipo declarado sem renderer dedicado:
|
|
|
677
683
|
Notas de UX/WCAG:
|
|
678
684
|
|
|
679
685
|
- `aria-expanded` e `aria-controls` ficam no owner real do trigger (`row` ou `icon`);
|
|
680
|
-
- com `selection.mode !== 'none'`, a
|
|
686
|
+
- com `selection.mode !== 'none'`, a seleção é acionada pelo checkbox/radio explícito e a expansão permanece em um botão irmão, acionado apenas pelo ícone;
|
|
681
687
|
- `expansion.sections[].itemsExpr` pode resolver arrays/objetos JSON com placeholders; o runtime materializa a estrutura em vez de exibir JSON cru;
|
|
682
688
|
- 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;
|
|
683
689
|
- 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;
|
|
@@ -876,11 +882,11 @@ AI:
|
|
|
876
882
|
| `expansion.sections[].documentExpr` | Active | expr que resolve `RichContentDocument` |
|
|
877
883
|
| `expansion.sections[].emptyLabel` | Active | empty state da secao |
|
|
878
884
|
| `expansion.rendering.shell` | Active | attached/detached/modal |
|
|
879
|
-
| `expansion.rendering.columns` | Active | 1/2/3 colunas
|
|
880
|
-
| `expansion.rendering.gap` | Active | gap entre secoes
|
|
881
|
-
| `expansion.rendering.padding` | Active | padding do shell
|
|
882
|
-
| `expansion.rendering.class` | Active | classe do shell
|
|
883
|
-
| `expansion.rendering.style` | Active | estilo adicional
|
|
885
|
+
| `expansion.rendering.columns` | Active | 1/2/3 colunas |
|
|
886
|
+
| `expansion.rendering.gap` | Active | gap entre secoes |
|
|
887
|
+
| `expansion.rendering.padding` | Active | padding do shell |
|
|
888
|
+
| `expansion.rendering.class` | Active | classe do shell |
|
|
889
|
+
| `expansion.rendering.style` | Active | estilo adicional |
|
|
884
890
|
| `actions` | Partial | bloco de acoes |
|
|
885
891
|
| `actions[].id` | Active | id |
|
|
886
892
|
| `actions[].icon` | Active | icon |
|
package/types/praxisui-list.d.ts
CHANGED
|
@@ -2,7 +2,6 @@ import * as rxjs from 'rxjs';
|
|
|
2
2
|
import { BehaviorSubject, Observable } from 'rxjs';
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
4
|
import { OnInit, OnChanges, AfterViewInit, OnDestroy, EventEmitter, SimpleChanges, ChangeDetectorRef, DoCheck, Provider } from '@angular/core';
|
|
5
|
-
import { MatSelectionListChange } from '@angular/material/list';
|
|
6
5
|
import { MatPaginatorSelectConfig, PageEvent } from '@angular/material/paginator';
|
|
7
6
|
import { FormGroup, FormControl } from '@angular/forms';
|
|
8
7
|
import * as _praxisui_core from '@praxisui/core';
|
|
@@ -508,6 +507,7 @@ declare class PraxisList implements OnInit, OnChanges, AfterViewInit, OnDestroy
|
|
|
508
507
|
private search$;
|
|
509
508
|
get layoutLines(): number;
|
|
510
509
|
boundControl: FormControl<unknown | unknown[] | null>;
|
|
510
|
+
private selectionControlSubscription?;
|
|
511
511
|
readonly skinScopeId: string;
|
|
512
512
|
skinClasses: string;
|
|
513
513
|
inlineCss: string;
|
|
@@ -576,6 +576,7 @@ declare class PraxisList implements OnInit, OnChanges, AfterViewInit, OnDestroy
|
|
|
576
576
|
isTilesVariant(): boolean;
|
|
577
577
|
isSelectionEnabled(): boolean;
|
|
578
578
|
private setupSelectionBinding;
|
|
579
|
+
private watchSelectionControl;
|
|
579
580
|
leading: (item: any) => Record<string, any> | null;
|
|
580
581
|
primary: (item: any) => Record<string, any> | null;
|
|
581
582
|
secondary: (item: any) => Record<string, any> | null;
|
|
@@ -681,24 +682,30 @@ declare class PraxisList implements OnInit, OnChanges, AfterViewInit, OnDestroy
|
|
|
681
682
|
}[];
|
|
682
683
|
onItemClick(item: any, index: number, section?: string): void;
|
|
683
684
|
onRowActivate(item: any, index: number, section?: string): void;
|
|
684
|
-
onRowSpaceActivate(event: Event, clickable: boolean, item: any, index: number, section?: string): void;
|
|
685
685
|
onExpandToggle(event: Event, item: any, index: number): void;
|
|
686
686
|
onActionKeydown(ev: Event): void;
|
|
687
687
|
configEditorLabel(): string;
|
|
688
688
|
expandToggleAriaLabel(item: any, index: number): string;
|
|
689
689
|
expansionRegionAriaLabel(item: any): string;
|
|
690
690
|
emptyStateLabel(): string;
|
|
691
|
+
selectionListAriaLabel(): string | null;
|
|
692
|
+
selectionControlName(): string;
|
|
693
|
+
selectionControlAriaLabel(item: any): string;
|
|
694
|
+
isItemSelected(item: any): boolean;
|
|
695
|
+
setItemSelected(item: any, selected: boolean): void;
|
|
696
|
+
private selectionItemsEqual;
|
|
691
697
|
isResourceConnectionMissing(): boolean;
|
|
692
698
|
onActionClick(ev: MouseEvent, actionId: string, item: any, index: number): Promise<void>;
|
|
693
699
|
private executeRecordOpenAction;
|
|
694
700
|
private resolveRecordOpenService;
|
|
701
|
+
private resolveActionFocusOrigin;
|
|
695
702
|
private reportRecordOpenFailure;
|
|
696
703
|
private resolveActionPayload;
|
|
697
704
|
private resolveTemplate;
|
|
698
705
|
private isDeferredTemplateExpressionKey;
|
|
699
706
|
private resolveStringTemplate;
|
|
700
707
|
private lookup;
|
|
701
|
-
onSelectionChange(
|
|
708
|
+
onSelectionChange(): void;
|
|
702
709
|
listExportFormats(): PraxisExportFormat[];
|
|
703
710
|
exportIcon(format: PraxisExportFormat): string;
|
|
704
711
|
onExportAction(format: PraxisExportFormat): Promise<void>;
|
|
@@ -2149,6 +2156,8 @@ declare const PRAXIS_LIST_EN_US: {
|
|
|
2149
2156
|
readonly emptyState: "No items available";
|
|
2150
2157
|
readonly emptyStateConnectResource: "Connect this list to a resource to load items.";
|
|
2151
2158
|
readonly recordOpenUnavailable: "Unable to open details for this item.";
|
|
2159
|
+
readonly 'selection.ariaLabel': "Selectable list";
|
|
2160
|
+
readonly 'selection.selectItem': "Select item";
|
|
2152
2161
|
readonly 'toolbar.label': "List controls";
|
|
2153
2162
|
readonly 'toolbar.search': "Search";
|
|
2154
2163
|
readonly 'toolbar.sort': "Sort by";
|
|
@@ -2208,7 +2217,7 @@ declare const PRAXIS_LIST_EN_US: {
|
|
|
2208
2217
|
readonly 'Use custom color': "Use custom color";
|
|
2209
2218
|
readonly Default: "Default";
|
|
2210
2219
|
readonly "Show when (e.g.: ${item.status} == 'done')": "Show when (e.g.: ${item.status} == 'done')";
|
|
2211
|
-
readonly
|
|
2220
|
+
readonly 'Supported syntax: "${item.field} == \'value\'". Advanced expressions are not evaluated.': "Supported syntax: \"${item.field} == 'value'\". Advanced expressions are not evaluated.";
|
|
2212
2221
|
readonly Action: "Action";
|
|
2213
2222
|
readonly Preview: "Preview";
|
|
2214
2223
|
readonly Remove: "Remove";
|
|
@@ -2526,6 +2535,8 @@ declare const PRAXIS_LIST_PT_BR: {
|
|
|
2526
2535
|
readonly emptyState: "Nenhum item disponível";
|
|
2527
2536
|
readonly emptyStateConnectResource: "Conecte a lista a um recurso para carregar os itens.";
|
|
2528
2537
|
readonly recordOpenUnavailable: "Não foi possível abrir os detalhes deste item.";
|
|
2538
|
+
readonly 'selection.ariaLabel': "Lista selecionável";
|
|
2539
|
+
readonly 'selection.selectItem': "Selecionar item";
|
|
2529
2540
|
readonly 'toolbar.label': "Controles da lista";
|
|
2530
2541
|
readonly 'toolbar.search': "Buscar";
|
|
2531
2542
|
readonly 'toolbar.sort': "Ordenar por";
|
|
@@ -2585,7 +2596,7 @@ declare const PRAXIS_LIST_PT_BR: {
|
|
|
2585
2596
|
readonly 'Use custom color': "Usar cor personalizada";
|
|
2586
2597
|
readonly Default: "Padrão";
|
|
2587
2598
|
readonly "Show when (e.g.: ${item.status} == 'done')": "Exibir quando (ex.: ${item.status} == 'concluído')";
|
|
2588
|
-
readonly
|
|
2599
|
+
readonly 'Supported syntax: "${item.field} == \'value\'". Advanced expressions are not evaluated.': "Sintaxe suportada: \"${item.field} == 'valor'\". Expressões avançadas não são avaliadas.";
|
|
2589
2600
|
readonly Action: "Ação";
|
|
2590
2601
|
readonly Preview: "Pré-visualização";
|
|
2591
2602
|
readonly Remove: "Remover";
|