@praxisui/list 9.0.67 → 9.0.68-rc.1
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 +13 -2
- package/ai/component-registry.json +10 -5
- package/docs/2026-09-09-editor-public-api-investigation.md +189 -0
- package/fesm2022/praxisui-list.mjs +12492 -12352
- package/package.json +6 -6
- package/src/lib/praxis-list.json-api.md +5 -1
- package/types/praxisui-list.d.ts +40 -2
package/package.json
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@praxisui/list",
|
|
3
|
-
"version": "9.0.
|
|
3
|
+
"version": "9.0.68-rc.1",
|
|
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.68-rc.1",
|
|
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.68-rc.1",
|
|
14
|
+
"@praxisui/core": "^9.0.68-rc.1",
|
|
15
|
+
"@praxisui/rich-content": "^9.0.68-rc.1",
|
|
16
|
+
"@praxisui/settings-panel": "^9.0.68-rc.1"
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
19
|
"tslib": "^2.3.0",
|
|
@@ -183,6 +183,7 @@ Este arquivo foi adaptado para o padrao canonico atual sem remover conteudo tecn
|
|
|
183
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
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
185
|
| `exportAction` | `any` | resultado ou erro de exportacao de colecao | Active | Usa `PraxisCollectionExportService`. |
|
|
186
|
+
| `configPatchChange` | `{ inputPatch: { config: PraxisListConfig } }` | Apply/Save válido do editor nativo ou authoring por adapter | Active | Atualiza a página autorada; não emite hidratação, inferência, filtros ou seleção runtime. |
|
|
186
187
|
|
|
187
188
|
### External side channels
|
|
188
189
|
|
|
@@ -376,7 +377,7 @@ Quatro superficies governam o componente:
|
|
|
376
377
|
1. **Documento de autoria (`ListAuthoringDocument`)**: envelope persistivel e canônico para editor visual, editor JSON, host runtime e fluxos futuros de IA/playground.
|
|
377
378
|
2. **Config canônica projetada (`PraxisListConfig`)**: dados, layout, skin, selecao, templating, acoes e UI.
|
|
378
379
|
3. **Inputs externos**: `listId`, `componentInstanceId`, `form` e `enableCustomization`.
|
|
379
|
-
4. **Outputs**: `itemClick`, `actionClick`, `selectionChange`, `exportAction`.
|
|
380
|
+
4. **Outputs**: `itemClick`, `actionClick`, `selectionChange`, `exportAction`, `configPatchChange`.
|
|
380
381
|
5. **Side channels**: persistencia assinc, settings panel, global action bus e AI adapter.
|
|
381
382
|
|
|
382
383
|
#### Integracao com ecossistema Praxis
|
|
@@ -427,6 +428,9 @@ Antes de liberar para producao:
|
|
|
427
428
|
| `actionClick` | `ListActionEvent` | acao local de item (ou global com `emitLocal=true`) |
|
|
428
429
|
| `selectionChange` | `ListSelectionEvent` | alteração pelo checkbox/radio explícito da linha |
|
|
429
430
|
| `exportAction` | `any` | exportacao concluida, delegada ou com erro |
|
|
431
|
+
| `configPatchChange` | `{ inputPatch: { config: PraxisListConfig } }` | Apply/Save válido ou authoring por adapter; snapshot independente para o host |
|
|
432
|
+
|
|
433
|
+
O editor hospedado oferece **Origem da configuração** para o input existente `configPersistenceStrategy`: **Configuração da página** (`input-first`), **Preferências individuais da lista** (`local-first`) e **Configuração temporária** (`volatile`). Para páginas compostas, escolha `input-first` para evitar que preferências antigas sobreponham o documento salvo da página. Apply, Save e Reset preservam essa escolha e os demais inputs.
|
|
430
434
|
|
|
431
435
|
#### Data mode and flow
|
|
432
436
|
|
package/types/praxisui-list.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ import { OnInit, OnChanges, AfterViewInit, OnDestroy, EventEmitter, SimpleChange
|
|
|
5
5
|
import { MatPaginatorSelectConfig, PageEvent } from '@angular/material/paginator';
|
|
6
6
|
import { FormGroup, FormControl } from '@angular/forms';
|
|
7
7
|
import * as _praxisui_core from '@praxisui/core';
|
|
8
|
-
import { PraxisExportFormat, PraxisExportScope, PraxisRuntimeConditionalEffectRule, JsonLogicExpression, RichContentDocument, ResourceRecordOpenRef, GlobalActionRef, LocalizationConfig, AiCapability, PraxisDataQueryContext, RichBlockNode, RichBlockHostCapabilities, GlobalActionCatalogEntry, SurfaceOpenPayload, SettingsValueProvider as SettingsValueProvider$1, RichPresenterNode, RichComposeNode, ComponentDocMeta, AiCapabilityCategory, AiCapabilityCatalog, AiValueKind, ComponentAuthoringManifest } from '@praxisui/core';
|
|
8
|
+
import { PraxisExportFormat, PraxisExportScope, PraxisRuntimeConditionalEffectRule, JsonLogicExpression, RichContentDocument, ResourceRecordOpenRef, GlobalActionRef, LocalizationConfig, AiCapability, PraxisDataQueryContext, RichBlockNode, RichBlockHostCapabilities, SurfaceOpenActionEditorComponent, GlobalActionCatalogEntry, SurfaceOpenPayload, SettingsValueProvider as SettingsValueProvider$1, RichPresenterNode, RichComposeNode, ComponentDocMeta, AiCapabilityCategory, AiCapabilityCatalog, AiValueKind, ComponentAuthoringManifest } from '@praxisui/core';
|
|
9
9
|
import { BaseAiAdapter, AiResponseCompileResult, PatchResult, PraxisAssistantTurnViewState, PraxisAssistantShellLayout, PraxisAssistantShellLabels, PraxisAssistantSessionSnapshot, PraxisAssistantShellQuickReply, PraxisAssistantShellMessage } from '@praxisui/ai';
|
|
10
10
|
import { SettingsValueProvider } from '@praxisui/settings-panel';
|
|
11
11
|
import * as _praxisui_list from '@praxisui/list';
|
|
@@ -492,6 +492,11 @@ declare class PraxisList implements OnInit, OnChanges, AfterViewInit, OnDestroy
|
|
|
492
492
|
actionClick: EventEmitter<ListActionEvent>;
|
|
493
493
|
selectionChange: EventEmitter<ListSelectionEvent>;
|
|
494
494
|
exportAction: EventEmitter<any>;
|
|
495
|
+
readonly configPatchChange: i0.OutputEmitterRef<{
|
|
496
|
+
inputPatch: {
|
|
497
|
+
config: PraxisListConfig;
|
|
498
|
+
};
|
|
499
|
+
}>;
|
|
495
500
|
items$: rxjs.Observable<any[]>;
|
|
496
501
|
sections$: rxjs.Observable<ListSection<any>[]>;
|
|
497
502
|
loading$: rxjs.Observable<boolean>;
|
|
@@ -512,6 +517,9 @@ declare class PraxisList implements OnInit, OnChanges, AfterViewInit, OnDestroy
|
|
|
512
517
|
skinClasses: string;
|
|
513
518
|
inlineCss: string;
|
|
514
519
|
readonly cspNonce: string | null;
|
|
520
|
+
private readonly hostElement;
|
|
521
|
+
private readonly renderer;
|
|
522
|
+
private skinStyleElement?;
|
|
515
523
|
aiAdapter: ListAiAdapter;
|
|
516
524
|
aiAssistantOpen: boolean;
|
|
517
525
|
aiAssistantPrompt: string;
|
|
@@ -571,6 +579,7 @@ declare class PraxisList implements OnInit, OnChanges, AfterViewInit, OnDestroy
|
|
|
571
579
|
private setupSearch;
|
|
572
580
|
private persistConfig;
|
|
573
581
|
private applySkins;
|
|
582
|
+
private syncSkinStyle;
|
|
574
583
|
isListVariant(): boolean;
|
|
575
584
|
isCardsVariant(): boolean;
|
|
576
585
|
isTilesVariant(): boolean;
|
|
@@ -730,6 +739,7 @@ declare class PraxisList implements OnInit, OnChanges, AfterViewInit, OnDestroy
|
|
|
730
739
|
private getExportMimeType;
|
|
731
740
|
private cloneForExportEvent;
|
|
732
741
|
openConfigEditor(): void;
|
|
742
|
+
private openConfigEditorPanel;
|
|
733
743
|
openAiAssistant(): void;
|
|
734
744
|
openAiAssistantFromSession(session: PraxisAssistantSessionSnapshot): void;
|
|
735
745
|
closeAiAssistant(): void;
|
|
@@ -869,7 +879,7 @@ declare class PraxisList implements OnInit, OnChanges, AfterViewInit, OnDestroy
|
|
|
869
879
|
private normalizeExpansionItems;
|
|
870
880
|
private normalizeKeyValueItems;
|
|
871
881
|
static ɵfac: i0.ɵɵFactoryDeclaration<PraxisList, never>;
|
|
872
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<PraxisList, "praxis-list", never, { "config": { "alias": "config"; "required": false; }; "listId": { "alias": "listId"; "required": true; }; "componentInstanceId": { "alias": "componentInstanceId"; "required": false; }; "configPersistenceStrategy": { "alias": "configPersistenceStrategy"; "required": false; }; "queryContext": { "alias": "queryContext"; "required": false; }; "form": { "alias": "form"; "required": false; }; "enableCustomization": { "alias": "enableCustomization"; "required": false; }; }, { "itemClick": "itemClick"; "actionClick": "actionClick"; "selectionChange": "selectionChange"; "exportAction": "exportAction"; }, never, never, true, never>;
|
|
882
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<PraxisList, "praxis-list", never, { "config": { "alias": "config"; "required": false; }; "listId": { "alias": "listId"; "required": true; }; "componentInstanceId": { "alias": "componentInstanceId"; "required": false; }; "configPersistenceStrategy": { "alias": "configPersistenceStrategy"; "required": false; }; "queryContext": { "alias": "queryContext"; "required": false; }; "form": { "alias": "form"; "required": false; }; "enableCustomization": { "alias": "enableCustomization"; "required": false; }; }, { "itemClick": "itemClick"; "actionClick": "actionClick"; "selectionChange": "selectionChange"; "exportAction": "exportAction"; "configPatchChange": "configPatchChange"; }, never, never, true, never>;
|
|
873
883
|
static ngAcceptInputType_enableCustomization: unknown;
|
|
874
884
|
}
|
|
875
885
|
|
|
@@ -1219,6 +1229,10 @@ declare class PraxisListConfigEditor implements SettingsValueProvider, DoCheck {
|
|
|
1219
1229
|
listId?: string;
|
|
1220
1230
|
document: ListAuthoringDocument;
|
|
1221
1231
|
working: NormalizedListConfig;
|
|
1232
|
+
private readonly invalidSurfaceDrafts;
|
|
1233
|
+
private jsonEditorIsValid;
|
|
1234
|
+
get hasInvalidSurfaceDraft(): boolean;
|
|
1235
|
+
onSurfaceDraftValidity(source: SurfaceOpenActionEditorComponent, valid: boolean): void;
|
|
1222
1236
|
isDirty$: BehaviorSubject<boolean>;
|
|
1223
1237
|
isValid$: BehaviorSubject<boolean>;
|
|
1224
1238
|
isBusy$: BehaviorSubject<boolean>;
|
|
@@ -1699,6 +1713,7 @@ declare class PraxisListConfigEditor implements SettingsValueProvider, DoCheck {
|
|
|
1699
1713
|
static ɵcmp: i0.ɵɵComponentDeclaration<PraxisListConfigEditor, "praxis-list-config-editor", never, { "config": { "alias": "config"; "required": false; }; "listId": { "alias": "listId"; "required": false; }; }, {}, never, never, true, never>;
|
|
1700
1714
|
}
|
|
1701
1715
|
|
|
1716
|
+
type PersistenceStrategy = 'input-first' | 'local-first' | 'volatile';
|
|
1702
1717
|
interface PraxisListWidgetEditorInputs {
|
|
1703
1718
|
config?: PraxisListConfig | null;
|
|
1704
1719
|
listId?: string;
|
|
@@ -1715,6 +1730,15 @@ declare class PraxisListWidgetConfigEditor implements SettingsValueProvider$1, A
|
|
|
1715
1730
|
readonly isValid$: BehaviorSubject<boolean>;
|
|
1716
1731
|
readonly isBusy$: BehaviorSubject<boolean>;
|
|
1717
1732
|
private readonly subscription;
|
|
1733
|
+
private readonly i18n;
|
|
1734
|
+
private childDirty;
|
|
1735
|
+
private persistenceOverride?;
|
|
1736
|
+
private savedPersistenceStrategy?;
|
|
1737
|
+
get persistenceStrategy(): PersistenceStrategy;
|
|
1738
|
+
private get persistenceBaseline();
|
|
1739
|
+
setPersistenceStrategy(value: PersistenceStrategy): void;
|
|
1740
|
+
tx(key: string): string;
|
|
1741
|
+
private publishDirty;
|
|
1718
1742
|
get config(): PraxisListConfig;
|
|
1719
1743
|
get listId(): string | undefined;
|
|
1720
1744
|
ngAfterViewInit(): void;
|
|
@@ -2149,6 +2173,13 @@ declare class PraxisListDocPageComponent {
|
|
|
2149
2173
|
}
|
|
2150
2174
|
|
|
2151
2175
|
declare const PRAXIS_LIST_EN_US: {
|
|
2176
|
+
readonly "configurationSource.label": "Configuration source";
|
|
2177
|
+
readonly "configurationSource.page": "Page configuration";
|
|
2178
|
+
readonly "configurationSource.individual": "Individual list preferences";
|
|
2179
|
+
readonly "configurationSource.temporary": "Temporary configuration";
|
|
2180
|
+
readonly "configurationSource.input-first.help": "The page defines appearance and content. Recommended when composing a page in Page Builder.";
|
|
2181
|
+
readonly "configurationSource.local-first.help": "Saved list preferences can override the page configuration when loading.";
|
|
2182
|
+
readonly "configurationSource.volatile.help": "Uses the supplied configuration without reading or writing individual preferences. The page can still be saved.";
|
|
2152
2183
|
readonly configEdit: "Edit configuration";
|
|
2153
2184
|
readonly expandDetails: "Expand details";
|
|
2154
2185
|
readonly collapseDetails: "Collapse details";
|
|
@@ -2528,6 +2559,13 @@ declare const PRAXIS_LIST_I18N_NAMESPACE = "praxis-list";
|
|
|
2528
2559
|
declare function providePraxisListI18n(): i0.Provider[];
|
|
2529
2560
|
|
|
2530
2561
|
declare const PRAXIS_LIST_PT_BR: {
|
|
2562
|
+
readonly "configurationSource.label": "Origem da configuração";
|
|
2563
|
+
readonly "configurationSource.page": "Configuração da página";
|
|
2564
|
+
readonly "configurationSource.individual": "Preferências individuais da lista";
|
|
2565
|
+
readonly "configurationSource.temporary": "Configuração temporária";
|
|
2566
|
+
readonly "configurationSource.input-first.help": "A página define a aparência e o conteúdo. Recomendado ao montar uma página no Page Builder.";
|
|
2567
|
+
readonly "configurationSource.local-first.help": "As preferências salvas desta lista podem substituir a configuração da página ao carregar.";
|
|
2568
|
+
readonly "configurationSource.volatile.help": "Usa a configuração recebida sem ler ou gravar preferências individuais. A página ainda pode ser salva.";
|
|
2531
2569
|
readonly configEdit: "Editar configurações";
|
|
2532
2570
|
readonly expandDetails: "Expandir detalhes";
|
|
2533
2571
|
readonly collapseDetails: "Recolher detalhes";
|