@praxisui/list 9.0.10 → 9.0.11
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
|
@@ -107,7 +107,7 @@ In remote mode, search, sort and export share a collection toolbar above the ite
|
|
|
107
107
|
- Selection supports `none`, `single` and `multiple`, with return modes `value`, `item` or `id`.
|
|
108
108
|
- Item actions can emit local events or delegate to `GlobalActionService`; collection export uses the shared `@praxisui/core` contract for `csv`, `json`, `excel`, `pdf` and `print`.
|
|
109
109
|
- In `cards` and `tiles`, item activation and secondary item actions are separate keyboard targets. Hosts should preserve this composite interaction model instead of nesting action buttons inside the item activation surface.
|
|
110
|
-
- A governed `actions[].recordOpen` resolves the identity declared by the backend against the current-principal resource and contextual surface catalogs before executing `surface.open`; it never derives the target from the displayed label or from `item.id`.
|
|
110
|
+
- A governed `actions[].recordOpen` resolves the identity declared by the backend against the current-principal resource and contextual surface catalogs before executing `surface.open`; it never derives the target from the displayed label or from `item.id`. This path requires the host's canonical `API_URL` configuration, resolved only when the action runs; local lists do not acquire a backend dependency merely by rendering the component.
|
|
111
111
|
|
|
112
112
|
## Known Runtime Boundaries
|
|
113
113
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "1.0.0",
|
|
3
|
-
"generatedAt": "2026-08-
|
|
3
|
+
"generatedAt": "2026-08-21T14:58:36.316Z",
|
|
4
4
|
"packageName": "@praxisui/list",
|
|
5
|
-
"packageVersion": "9.0.
|
|
5
|
+
"packageVersion": "9.0.11",
|
|
6
6
|
"sourceRegistry": "praxis-component-registry-ingestion",
|
|
7
7
|
"sourceRegistryVersion": "1.0.0",
|
|
8
8
|
"componentCount": 1,
|
|
@@ -7,7 +7,7 @@ import * as i3 from '@angular/material/list';
|
|
|
7
7
|
import { MatListModule } from '@angular/material/list';
|
|
8
8
|
import * as i4 from '@angular/material/icon';
|
|
9
9
|
import { MatIconModule } from '@angular/material/icon';
|
|
10
|
-
import { resolveValuePresentation, LoggerService, GenericCrudService, toTitleCase, PraxisIconDirective, providePraxisI18n, PraxisI18nService, PraxisIconButtonComponent, validateGlobalActionRefs, IconPickerService, GLOBAL_ACTION_CATALOG, PRAXIS_GLOBAL_ACTION_CATALOG, getGlobalActionCatalog, SURFACE_OPEN_I18N_NAMESPACE, getGlobalActionUiSchema, SurfaceOpenActionEditorComponent, PRAXIS_I18N_CONFIG, providePraxisI18nConfig, SURFACE_OPEN_I18N_CONFIG, deepMerge, ASYNC_CONFIG_STORAGE, ComponentKeyService, PraxisJsonLogicService, PraxisCollectionExportService,
|
|
10
|
+
import { resolveValuePresentation, LoggerService, GenericCrudService, toTitleCase, PraxisIconDirective, providePraxisI18n, PraxisI18nService, PraxisIconButtonComponent, validateGlobalActionRefs, IconPickerService, GLOBAL_ACTION_CATALOG, PRAXIS_GLOBAL_ACTION_CATALOG, getGlobalActionCatalog, SURFACE_OPEN_I18N_NAMESPACE, getGlobalActionUiSchema, SurfaceOpenActionEditorComponent, PRAXIS_I18N_CONFIG, providePraxisI18nConfig, SURFACE_OPEN_I18N_CONFIG, deepMerge, ASYNC_CONFIG_STORAGE, ComponentKeyService, PraxisJsonLogicService, PraxisCollectionExportService, GlobalActionService, GLOBAL_DIALOG_SERVICE, ResourceRecordOpenError, ResourceRecordOpenService, assertPraxisCollectionExportArtifact, normalizePraxisDataQueryContext, ComponentMetadataRegistry, API_URL, LocalStorageAsyncAdapter, LocalStorageConfigService } from '@praxisui/core';
|
|
11
11
|
import * as i5 from '@angular/material/chips';
|
|
12
12
|
import { MatChipsModule } from '@angular/material/chips';
|
|
13
13
|
import { MatDividerModule } from '@angular/material/divider';
|
|
@@ -12642,7 +12642,6 @@ class PraxisList {
|
|
|
12642
12642
|
jsonLogic = inject(PraxisJsonLogicService);
|
|
12643
12643
|
i18n = inject(PraxisI18nService);
|
|
12644
12644
|
collectionExport = inject(PraxisCollectionExportService);
|
|
12645
|
-
recordOpenResolver = inject(ResourceRecordOpenService);
|
|
12646
12645
|
paginatorIntl = inject(MatPaginatorIntl);
|
|
12647
12646
|
snackBar = inject(MatSnackBar);
|
|
12648
12647
|
aiApi = inject(AiBackendApiService);
|
|
@@ -13701,7 +13700,11 @@ class PraxisList {
|
|
|
13701
13700
|
if (!this.globalActions) {
|
|
13702
13701
|
throw new Error('GlobalActionService is unavailable for surface.open.');
|
|
13703
13702
|
}
|
|
13704
|
-
|
|
13703
|
+
// Discovery belongs to the governed record-open path, not to list
|
|
13704
|
+
// construction. Resolve it only when that intent is executed so local
|
|
13705
|
+
// collections remain usable in hosts that do not configure API_URL.
|
|
13706
|
+
const recordOpenResolver = this.resolveRecordOpenService();
|
|
13707
|
+
const resolution = await firstValueFrom(recordOpenResolver.resolve(reference, item));
|
|
13705
13708
|
const result = await this.globalActions.executeRef({ actionId: 'surface.open', payload: resolution.payload }, {
|
|
13706
13709
|
sourceId: this.listId,
|
|
13707
13710
|
output: 'actionClick',
|
|
@@ -13719,6 +13722,9 @@ class PraxisList {
|
|
|
13719
13722
|
'The surface.open executor rejected the resolved payload.');
|
|
13720
13723
|
}
|
|
13721
13724
|
}
|
|
13725
|
+
resolveRecordOpenService() {
|
|
13726
|
+
return this.injector.get(ResourceRecordOpenService);
|
|
13727
|
+
}
|
|
13722
13728
|
reportRecordOpenFailure(actionId, reference, error) {
|
|
13723
13729
|
const failureCode = error instanceof ResourceRecordOpenError
|
|
13724
13730
|
? error.code
|
package/package.json
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@praxisui/list",
|
|
3
|
-
"version": "9.0.
|
|
3
|
+
"version": "9.0.11",
|
|
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.11",
|
|
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.11",
|
|
14
|
+
"@praxisui/core": "^9.0.11",
|
|
15
|
+
"@praxisui/rich-content": "^9.0.11",
|
|
16
|
+
"@praxisui/settings-panel": "^9.0.11"
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
19
|
"tslib": "^2.3.0",
|
|
@@ -192,19 +192,21 @@ Este arquivo foi adaptado para o padrao canonico atual sem remover conteudo tecn
|
|
|
192
192
|
| `ASYNC_CONFIG_STORAGE` | bidirectional | `loadConfig/saveConfig` | fail-open | Persistência de configuração por `listId`/instância. |
|
|
193
193
|
| `SettingsPanelService` | bidirectional | `open(...).applied$/saved$` | fail-open | Canal de edição runtime para `PraxisListConfigEditor`. |
|
|
194
194
|
| `GlobalActionService` | outbound action | `executeRef(globalAction, context)` | fail-soft | Opcional; ausência gera warning e segue fluxo local. |
|
|
195
|
+
| `ResourceRecordOpenService` | outbound query | `resolve(reference, record)` | fail-closed | Resolvido sob demanda apenas para `actions[].recordOpen`. |
|
|
195
196
|
| `GLOBAL_DIALOG_SERVICE` | bidirectional | confirmação de ação | fail-open | Opcional; sem serviço, ação segue sem modal central. |
|
|
196
197
|
| `PRAXIS_COLLECTION_EXPORT_PROVIDER` | outbound export | `exportCollection(request)` | fail-fast | Necessário para escopos remotos `filtered/all` e formatos avançados. |
|
|
197
198
|
|
|
198
199
|
### Host/runtime dependencies
|
|
199
200
|
|
|
200
|
-
| Dependency | Required
|
|
201
|
-
| ---------------------- |
|
|
202
|
-
| `ListDataService` | Yes
|
|
203
|
-
| `ListSkinService` | Yes
|
|
204
|
-
| `ASYNC_CONFIG_STORAGE` | Yes
|
|
205
|
-
| `SettingsPanelService` | Yes
|
|
206
|
-
| `GenericCrudService` | Optional
|
|
207
|
-
| `
|
|
201
|
+
| Dependency | Required | Environment | Purpose | Notes |
|
|
202
|
+
| ---------------------- | ----------- | -------------------- | -------------------- | ------------------------------------------------------------------------------------- |
|
|
203
|
+
| `ListDataService` | Yes | browser/dev/prod/ssr | fluxo de dados | Stream de itens, seção, loading e paginação. |
|
|
204
|
+
| `ListSkinService` | Yes | browser/dev/prod | skin runtime | Gera classes/estilos sanitizados por instância. |
|
|
205
|
+
| `ASYNC_CONFIG_STORAGE` | Yes | browser/dev/prod | persistência | Salva e restaura config de lista. |
|
|
206
|
+
| `SettingsPanelService` | Yes | browser/dev/prod | editor runtime | Abre editor de configuração com preview/apply/save. |
|
|
207
|
+
| `GenericCrudService` | Optional | browser/dev/prod | inferência de schema | Usado para inferência de templating quando `resourcePath` existe. |
|
|
208
|
+
| `API_URL` | Conditional | browser/dev/prod | discovery governado | Exigido somente ao executar `actions[].recordOpen`; listas locais renderizam sem ele. |
|
|
209
|
+
| `ComponentKeyService` | Yes | browser/dev/prod/ssr | chave de escopo | Determina namespace de persistência e isolamento. |
|
|
208
210
|
|
|
209
211
|
## Coverage matrix
|
|
210
212
|
|
package/types/praxisui-list.d.ts
CHANGED
|
@@ -534,7 +534,6 @@ declare class PraxisList implements OnInit, OnChanges, AfterViewInit, OnDestroy
|
|
|
534
534
|
private readonly jsonLogic;
|
|
535
535
|
private readonly i18n;
|
|
536
536
|
private readonly collectionExport;
|
|
537
|
-
private readonly recordOpenResolver;
|
|
538
537
|
private readonly paginatorIntl;
|
|
539
538
|
private readonly snackBar;
|
|
540
539
|
private readonly aiApi;
|
|
@@ -691,6 +690,7 @@ declare class PraxisList implements OnInit, OnChanges, AfterViewInit, OnDestroy
|
|
|
691
690
|
isResourceConnectionMissing(): boolean;
|
|
692
691
|
onActionClick(ev: MouseEvent, actionId: string, item: any, index: number): Promise<void>;
|
|
693
692
|
private executeRecordOpenAction;
|
|
693
|
+
private resolveRecordOpenService;
|
|
694
694
|
private reportRecordOpenFailure;
|
|
695
695
|
private resolveActionPayload;
|
|
696
696
|
private resolveTemplate;
|