@praxisui/list 8.0.0-beta.20 → 8.0.0-beta.22
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 +52 -0
- package/fesm2022/praxisui-list.mjs +931 -35
- package/index.d.ts +105 -39
- package/package.json +6 -6
- package/src/lib/editors/praxis-list-config-editor.json-api.md +3 -3
- package/src/lib/praxis-list.json-api.md +5 -4
package/index.d.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import * as rxjs from 'rxjs';
|
|
2
2
|
import { BehaviorSubject, Observable } from 'rxjs';
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
|
-
import { OnInit, OnChanges, OnDestroy, EventEmitter, SimpleChanges, ChangeDetectorRef, DoCheck, Provider } from '@angular/core';
|
|
4
|
+
import { OnInit, OnChanges, OnDestroy, EventEmitter, SimpleChanges, ChangeDetectorRef, DoCheck, AfterViewInit, Provider } from '@angular/core';
|
|
5
5
|
import { MatSelectionListChange } from '@angular/material/list';
|
|
6
6
|
import { MatPaginatorSelectConfig, PageEvent } from '@angular/material/paginator';
|
|
7
7
|
import { FormGroup, FormControl } from '@angular/forms';
|
|
8
8
|
import * as _praxisui_core from '@praxisui/core';
|
|
9
|
-
import { PraxisExportFormat, PraxisExportScope, JsonLogicExpression, GlobalActionRef, LocalizationConfig, AiCapability, RichBlockNode, GlobalActionCatalogEntry, SurfaceOpenPayload, RichPresenterNode, RichComposeNode, ComponentDocMeta, AiCapabilityCategory, AiValueKind, AiCapabilityCatalog, ComponentAuthoringManifest } from '@praxisui/core';
|
|
10
|
-
import { BaseAiAdapter, PatchResult } from '@praxisui/ai';
|
|
9
|
+
import { PraxisExportFormat, PraxisExportScope, PraxisRuntimeConditionalEffectRule, JsonLogicExpression, GlobalActionRef, LocalizationConfig, AiCapability, RichBlockNode, GlobalActionCatalogEntry, SurfaceOpenPayload, SettingsValueProvider as SettingsValueProvider$1, RichPresenterNode, RichComposeNode, ComponentDocMeta, AiCapabilityCategory, AiValueKind, AiCapabilityCatalog, ComponentAuthoringManifest } from '@praxisui/core';
|
|
10
|
+
import { BaseAiAdapter, PatchResult, PraxisAssistantTurnViewState, PraxisAssistantShellLayout, PraxisAssistantShellLabels, PraxisAssistantSessionSnapshot, PraxisAssistantShellQuickReply, PraxisAssistantShellMessage } from '@praxisui/ai';
|
|
11
11
|
import { SettingsValueProvider } from '@praxisui/settings-panel';
|
|
12
12
|
|
|
13
13
|
type TemplateType = 'text' | 'icon' | 'image' | 'chip' | 'rating' | 'currency' | 'date' | 'html' | 'slot' | 'metric' | 'compose' | 'component';
|
|
@@ -118,6 +118,31 @@ interface ListExpansionSectionDef {
|
|
|
118
118
|
}
|
|
119
119
|
type ListTemplatingSlot = 'leading' | 'primary' | 'secondary' | 'meta' | 'trailing' | 'identity' | 'balance' | 'limit' | 'risk' | 'alerts' | 'owner';
|
|
120
120
|
type ListRowLayoutSlot = ListTemplatingSlot | 'actions' | 'expand';
|
|
121
|
+
interface ListItemStyleEffect {
|
|
122
|
+
kind?: 'item-style';
|
|
123
|
+
class?: string;
|
|
124
|
+
style?: string;
|
|
125
|
+
border?: string;
|
|
126
|
+
background?: string;
|
|
127
|
+
}
|
|
128
|
+
interface ListSlotOverrideEffect {
|
|
129
|
+
kind?: 'slot-override';
|
|
130
|
+
template?: TemplateDef;
|
|
131
|
+
class?: string;
|
|
132
|
+
style?: string;
|
|
133
|
+
hide?: boolean;
|
|
134
|
+
}
|
|
135
|
+
interface ListItemStyleRule extends Omit<PraxisRuntimeConditionalEffectRule<ListItemStyleEffect>, 'condition' | 'effects'>, ListItemStyleEffect {
|
|
136
|
+
id: string;
|
|
137
|
+
condition?: JsonLogicExpression | null;
|
|
138
|
+
effects?: ListItemStyleEffect[];
|
|
139
|
+
}
|
|
140
|
+
interface ListSlotOverrideRule extends Omit<PraxisRuntimeConditionalEffectRule<ListSlotOverrideEffect>, 'condition' | 'effects'>, ListSlotOverrideEffect {
|
|
141
|
+
id: string;
|
|
142
|
+
slot: ListTemplatingSlot;
|
|
143
|
+
condition?: JsonLogicExpression | null;
|
|
144
|
+
effects?: ListSlotOverrideEffect[];
|
|
145
|
+
}
|
|
121
146
|
interface PraxisListConfig {
|
|
122
147
|
id?: string;
|
|
123
148
|
dataSource?: {
|
|
@@ -212,23 +237,8 @@ interface PraxisListConfig {
|
|
|
212
237
|
};
|
|
213
238
|
};
|
|
214
239
|
rules?: {
|
|
215
|
-
itemStyles?:
|
|
216
|
-
|
|
217
|
-
condition?: JsonLogicExpression | null;
|
|
218
|
-
class?: string;
|
|
219
|
-
style?: string;
|
|
220
|
-
border?: string;
|
|
221
|
-
background?: string;
|
|
222
|
-
}>;
|
|
223
|
-
slotOverrides?: Array<{
|
|
224
|
-
id: string;
|
|
225
|
-
slot: ListTemplatingSlot;
|
|
226
|
-
condition?: JsonLogicExpression | null;
|
|
227
|
-
template?: TemplateDef;
|
|
228
|
-
class?: string;
|
|
229
|
-
style?: string;
|
|
230
|
-
hide?: boolean;
|
|
231
|
-
}>;
|
|
240
|
+
itemStyles?: ListItemStyleRule[];
|
|
241
|
+
slotOverrides?: ListSlotOverrideRule[];
|
|
232
242
|
};
|
|
233
243
|
expansion?: {
|
|
234
244
|
sections?: ListExpansionSectionDef[];
|
|
@@ -402,10 +412,15 @@ declare class ListDataService<T = any> {
|
|
|
402
412
|
declare class ListAiAdapter extends BaseAiAdapter<PraxisListConfig> {
|
|
403
413
|
private list;
|
|
404
414
|
componentName: string;
|
|
415
|
+
componentId: string;
|
|
416
|
+
componentType: string;
|
|
405
417
|
constructor(list: PraxisList);
|
|
406
418
|
getCurrentConfig(): PraxisListConfig;
|
|
407
419
|
getCapabilities(): AiCapability[];
|
|
408
420
|
getRuntimeState(): Record<string, any>;
|
|
421
|
+
getDataProfile(): Record<string, any>;
|
|
422
|
+
getSchemaFields(): Record<string, any>[];
|
|
423
|
+
getAuthoringContext(): Record<string, any>;
|
|
409
424
|
createSnapshot(): PraxisListConfig;
|
|
410
425
|
restoreSnapshot(snapshot: PraxisListConfig): Promise<void>;
|
|
411
426
|
applyPatch(patch: Partial<PraxisListConfig>, _intent?: string): Promise<PatchResult>;
|
|
@@ -457,6 +472,13 @@ declare class PraxisList implements OnInit, OnChanges, OnDestroy {
|
|
|
457
472
|
inlineCss: string;
|
|
458
473
|
readonly cspNonce: string | null;
|
|
459
474
|
aiAdapter: ListAiAdapter;
|
|
475
|
+
aiAssistantOpen: boolean;
|
|
476
|
+
aiAssistantPrompt: string;
|
|
477
|
+
aiAssistantViewState: PraxisAssistantTurnViewState | null;
|
|
478
|
+
aiAssistantLayout: PraxisAssistantShellLayout;
|
|
479
|
+
readonly aiAssistantLabels: Partial<PraxisAssistantShellLabels>;
|
|
480
|
+
private aiAssistantController;
|
|
481
|
+
private aiAssistantStateSubscription;
|
|
460
482
|
private readonly storage;
|
|
461
483
|
private readonly skin;
|
|
462
484
|
private inferredForPath;
|
|
@@ -473,6 +495,10 @@ declare class PraxisList implements OnInit, OnChanges, OnDestroy {
|
|
|
473
495
|
private readonly collectionExport;
|
|
474
496
|
private readonly paginatorIntl;
|
|
475
497
|
private readonly snackBar;
|
|
498
|
+
private readonly aiApi;
|
|
499
|
+
private readonly assistantSessions;
|
|
500
|
+
private readonly aiTurnOrchestrator;
|
|
501
|
+
private readonly aiAssistantSessionEffect;
|
|
476
502
|
readonly paginatorSelectConfig: MatPaginatorSelectConfig;
|
|
477
503
|
private readonly logContext;
|
|
478
504
|
private readonly route;
|
|
@@ -523,6 +549,9 @@ declare class PraxisList implements OnInit, OnChanges, OnDestroy {
|
|
|
523
549
|
itemRuleStyle(item: any): string | undefined;
|
|
524
550
|
rowLayoutItemStyle(item: any): string | undefined;
|
|
525
551
|
rowLayoutItemClass(item: any): string | undefined;
|
|
552
|
+
private resolveItemStyleEffect;
|
|
553
|
+
private resolveSlotOverrideEffect;
|
|
554
|
+
private firstConditionalEffect;
|
|
526
555
|
hasRowLayoutGrid(): boolean;
|
|
527
556
|
rowLayoutColumns(): ListRowLayoutColumnViewModel[];
|
|
528
557
|
rowLayoutTrackColumn(index: number, column: ListRowLayoutColumnViewModel): string;
|
|
@@ -639,6 +668,29 @@ declare class PraxisList implements OnInit, OnChanges, OnDestroy {
|
|
|
639
668
|
private getExportMimeType;
|
|
640
669
|
private cloneForExportEvent;
|
|
641
670
|
openConfigEditor(): void;
|
|
671
|
+
openAiAssistant(): void;
|
|
672
|
+
openAiAssistantFromSession(session: PraxisAssistantSessionSnapshot): void;
|
|
673
|
+
closeAiAssistant(): void;
|
|
674
|
+
onAiAssistantPromptChange(prompt: string): void;
|
|
675
|
+
onAiAssistantSubmit(prompt: string): void;
|
|
676
|
+
onAiAssistantApply(): void;
|
|
677
|
+
onAiAssistantRetry(): void;
|
|
678
|
+
onAiAssistantCancel(): void;
|
|
679
|
+
onAiAssistantQuickReply(reply: PraxisAssistantShellQuickReply): void;
|
|
680
|
+
onAiAssistantEditMessage(message: PraxisAssistantShellMessage): void;
|
|
681
|
+
onAiAssistantResendMessage(message: PraxisAssistantShellMessage): void;
|
|
682
|
+
onAiAssistantLayoutChange(layout: PraxisAssistantShellLayout): void;
|
|
683
|
+
private initializeAiAssistantController;
|
|
684
|
+
private buildAiAssistantContextItems;
|
|
685
|
+
private buildAiAssistantContextSnapshot;
|
|
686
|
+
private syncAiAssistantSession;
|
|
687
|
+
private hasAiAssistantSessionState;
|
|
688
|
+
private resolveAiAssistantSessionId;
|
|
689
|
+
private resolveAiAssistantOwnerId;
|
|
690
|
+
private resolveAiAssistantRouteKey;
|
|
691
|
+
private resolveAiAssistantSummary;
|
|
692
|
+
private resolveAiAssistantBadge;
|
|
693
|
+
private resolveAiAssistantIcon;
|
|
642
694
|
nextPage(): void;
|
|
643
695
|
prevPage(): void;
|
|
644
696
|
setPageSize(ps: number): void;
|
|
@@ -1449,6 +1501,35 @@ declare class PraxisListConfigEditor implements SettingsValueProvider, DoCheck {
|
|
|
1449
1501
|
static ɵcmp: i0.ɵɵComponentDeclaration<PraxisListConfigEditor, "praxis-list-config-editor", never, { "config": { "alias": "config"; "required": false; }; "listId": { "alias": "listId"; "required": false; }; }, {}, never, never, true, never>;
|
|
1450
1502
|
}
|
|
1451
1503
|
|
|
1504
|
+
interface PraxisListWidgetEditorInputs {
|
|
1505
|
+
config?: PraxisListConfig | null;
|
|
1506
|
+
listId?: string;
|
|
1507
|
+
[key: string]: unknown;
|
|
1508
|
+
}
|
|
1509
|
+
interface PraxisListWidgetEditorValue {
|
|
1510
|
+
inputs: PraxisListWidgetEditorInputs;
|
|
1511
|
+
}
|
|
1512
|
+
declare class PraxisListWidgetConfigEditor implements SettingsValueProvider$1, AfterViewInit, OnDestroy {
|
|
1513
|
+
inputs: PraxisListWidgetEditorInputs | null;
|
|
1514
|
+
widgetKey?: string;
|
|
1515
|
+
listEditor?: PraxisListConfigEditor;
|
|
1516
|
+
readonly isDirty$: BehaviorSubject<boolean>;
|
|
1517
|
+
readonly isValid$: BehaviorSubject<boolean>;
|
|
1518
|
+
readonly isBusy$: BehaviorSubject<boolean>;
|
|
1519
|
+
private readonly subscription;
|
|
1520
|
+
get config(): PraxisListConfig;
|
|
1521
|
+
get listId(): string | undefined;
|
|
1522
|
+
ngAfterViewInit(): void;
|
|
1523
|
+
ngOnDestroy(): void;
|
|
1524
|
+
getSettingsValue(): PraxisListWidgetEditorValue;
|
|
1525
|
+
onSave(): PraxisListWidgetEditorValue;
|
|
1526
|
+
reset(): void;
|
|
1527
|
+
private initializeChildEditor;
|
|
1528
|
+
private buildValue;
|
|
1529
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<PraxisListWidgetConfigEditor, never>;
|
|
1530
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<PraxisListWidgetConfigEditor, "praxis-list-widget-config-editor", never, { "inputs": { "alias": "inputs"; "required": false; }; "widgetKey": { "alias": "widgetKey"; "required": false; }; }, {}, never, never, true, never>;
|
|
1531
|
+
}
|
|
1532
|
+
|
|
1452
1533
|
declare function createListAuthoringDocument(source: {
|
|
1453
1534
|
config?: unknown;
|
|
1454
1535
|
}): ListAuthoringDocument;
|
|
@@ -1751,23 +1832,8 @@ declare class PraxisListDocPageComponent {
|
|
|
1751
1832
|
};
|
|
1752
1833
|
};
|
|
1753
1834
|
rules?: {
|
|
1754
|
-
itemStyles?:
|
|
1755
|
-
|
|
1756
|
-
condition?: _praxisui_core.JsonLogicExpression | null;
|
|
1757
|
-
class?: string;
|
|
1758
|
-
style?: string;
|
|
1759
|
-
border?: string;
|
|
1760
|
-
background?: string;
|
|
1761
|
-
}>;
|
|
1762
|
-
slotOverrides?: Array<{
|
|
1763
|
-
id: string;
|
|
1764
|
-
slot: ListTemplatingSlot;
|
|
1765
|
-
condition?: _praxisui_core.JsonLogicExpression | null;
|
|
1766
|
-
template?: TemplateDef;
|
|
1767
|
-
class?: string;
|
|
1768
|
-
style?: string;
|
|
1769
|
-
hide?: boolean;
|
|
1770
|
-
}>;
|
|
1835
|
+
itemStyles?: ListItemStyleRule[];
|
|
1836
|
+
slotOverrides?: ListSlotOverrideRule[];
|
|
1771
1837
|
};
|
|
1772
1838
|
expansion?: {
|
|
1773
1839
|
sections?: ListExpansionSectionDef[];
|
|
@@ -2348,5 +2414,5 @@ declare const PRAXIS_LIST_PT_BR: {
|
|
|
2348
2414
|
readonly 'CSS class example (add this to your global styles):': "Exemplo de classe CSS (adicione isto aos seus estilos globais):";
|
|
2349
2415
|
};
|
|
2350
2416
|
|
|
2351
|
-
export { ExecutiveAlertsComponent, ExecutiveBadgeComponent, ExecutiveOwnerComponent, LIST_AI_CAPABILITIES, ListDataService, ListSkinService, PRAXIS_LIST_AUTHORING_MANIFEST, PRAXIS_LIST_COMPONENT_METADATA, PRAXIS_LIST_EN_US, PRAXIS_LIST_I18N_NAMESPACE, PRAXIS_LIST_PT_BR, PraxisList, PraxisListConfigEditor, PraxisListDocPageComponent, PraxisListJsonConfigEditorComponent, adaptSelection, buildListApplyPlan, createListAuthoringDocument, evalExpr, evaluateTemplate, inferListAuthoringDocument, inferTemplatingFromSchema, isListTemplateSupportedByRichContentP0, mapListTemplateToRichContentP0, normalizeListActionPayloads, normalizeListAuthoringDocument, normalizeListConfig, parseLegacyOrListDocument, projectListAuthoringDocument, providePraxisListI18n, providePraxisListMetadata, serializeListAuthoringDocument, toCanonicalListConfig, validateListAuthoringDocument };
|
|
2352
|
-
export type { Capability, CapabilityCatalog, CapabilityCategory, EditorDiagnostic, EditorDocument, ExecutiveAlert, JsonEditorEvent, JsonValidationResult, ListActionEvent, ListApplyPlan, ListAuthoringDocument, ListExpansionSectionDef, ListExpansionSectionType, ListFeatureDef, ListItemEvent, ListProjectionContext, ListRichContentP0Node, ListRowLayoutSlot, ListRuntimeContext, ListSchemaInferencePlan, ListSection, ListSelectionEvent, ListTemplatingSlot, ListValidationContext, PraxisListConfig, PraxisListExportConfig, PraxisListI18nConfig, TemplateDef, TemplateEvaluatorOptions, TemplateFeatureDef, TemplateType, TemplatingFeatureDef, ValueKind };
|
|
2417
|
+
export { ExecutiveAlertsComponent, ExecutiveBadgeComponent, ExecutiveOwnerComponent, LIST_AI_CAPABILITIES, ListDataService, ListSkinService, PRAXIS_LIST_AUTHORING_MANIFEST, PRAXIS_LIST_COMPONENT_METADATA, PRAXIS_LIST_EN_US, PRAXIS_LIST_I18N_NAMESPACE, PRAXIS_LIST_PT_BR, PraxisList, PraxisListConfigEditor, PraxisListDocPageComponent, PraxisListJsonConfigEditorComponent, PraxisListWidgetConfigEditor, adaptSelection, buildListApplyPlan, createListAuthoringDocument, evalExpr, evaluateTemplate, inferListAuthoringDocument, inferTemplatingFromSchema, isListTemplateSupportedByRichContentP0, mapListTemplateToRichContentP0, normalizeListActionPayloads, normalizeListAuthoringDocument, normalizeListConfig, parseLegacyOrListDocument, projectListAuthoringDocument, providePraxisListI18n, providePraxisListMetadata, serializeListAuthoringDocument, toCanonicalListConfig, validateListAuthoringDocument };
|
|
2418
|
+
export type { Capability, CapabilityCatalog, CapabilityCategory, EditorDiagnostic, EditorDocument, ExecutiveAlert, JsonEditorEvent, JsonValidationResult, ListActionEvent, ListApplyPlan, ListAuthoringDocument, ListExpansionSectionDef, ListExpansionSectionType, ListFeatureDef, ListItemEvent, ListItemStyleEffect, ListItemStyleRule, ListProjectionContext, ListRichContentP0Node, ListRowLayoutSlot, ListRuntimeContext, ListSchemaInferencePlan, ListSection, ListSelectionEvent, ListSlotOverrideEffect, ListSlotOverrideRule, ListTemplatingSlot, ListValidationContext, PraxisListConfig, PraxisListExportConfig, PraxisListI18nConfig, PraxisListWidgetEditorInputs, PraxisListWidgetEditorValue, TemplateDef, TemplateEvaluatorOptions, TemplateFeatureDef, TemplateType, TemplatingFeatureDef, ValueKind };
|
package/package.json
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@praxisui/list",
|
|
3
|
-
"version": "8.0.0-beta.
|
|
3
|
+
"version": "8.0.0-beta.22",
|
|
4
4
|
"description": "List components and helpers for Praxis UI.",
|
|
5
5
|
"peerDependencies": {
|
|
6
6
|
"@angular/common": ">=16 <21",
|
|
7
7
|
"@angular/core": ">=16 <21",
|
|
8
8
|
"@angular/material": ">=16 <21",
|
|
9
|
-
"@praxisui/dynamic-fields": "^8.0.0-beta.
|
|
9
|
+
"@praxisui/dynamic-fields": "^8.0.0-beta.22",
|
|
10
10
|
"rxjs": ">=7 <9",
|
|
11
11
|
"@angular/forms": ">=16 <21",
|
|
12
12
|
"@angular/router": ">=16 <21",
|
|
13
|
-
"@praxisui/ai": "^8.0.0-beta.
|
|
14
|
-
"@praxisui/core": "^8.0.0-beta.
|
|
15
|
-
"@praxisui/rich-content": "^8.0.0-beta.
|
|
16
|
-
"@praxisui/settings-panel": "^8.0.0-beta.
|
|
13
|
+
"@praxisui/ai": "^8.0.0-beta.22",
|
|
14
|
+
"@praxisui/core": "^8.0.0-beta.22",
|
|
15
|
+
"@praxisui/rich-content": "^8.0.0-beta.22",
|
|
16
|
+
"@praxisui/settings-panel": "^8.0.0-beta.22"
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
19
|
"tslib": "^2.3.0",
|
|
@@ -328,7 +328,7 @@ A integracao com host ocorre por `SettingsValueProvider`:
|
|
|
328
328
|
| `templating.iconColorMap/chipColorMap/chipLabelMap` | Active | Editor de pares chave/valor com normalizacao. |
|
|
329
329
|
| `templating.skeleton.count` | Active | Controle numerico (>=0). |
|
|
330
330
|
| `actions[].id/icon/label/color/kind/buttonVariant/showIf` | Active | Authoring completo de ações por item; `showIf` usa Json Logic serializável. |
|
|
331
|
-
| `actions[].globalAction/emitLocal/showLoading/confirmation` | Active | Suporte a acoes globais estruturadas, incluindo `navigation.openRoute` como navegacao interna canonica, e confirmacao. |
|
|
331
|
+
| `actions[].globalAction/emitLocal/showLoading/confirmation` | Active | Suporte a acoes globais estruturadas, incluindo `navigation.openRoute` como navegacao interna canonica, `payloadExpr` como escape avancado explicito, e confirmacao. |
|
|
332
332
|
| `actions[].emitPayload` | Active | Campo editavel no editor; consumo runtime depende da lista. |
|
|
333
333
|
| `ui.showSearch/searchField/searchPlaceholder` | Active | Bloco de busca. |
|
|
334
334
|
| `ui.showSort/sortOptions` | Active | Editor visual com deteccao de duplicatas. |
|
|
@@ -348,7 +348,7 @@ A integracao com host ocorre por `SettingsValueProvider`:
|
|
|
348
348
|
5. `queryJson` precisa ser JSON valido quando preenchido.
|
|
349
349
|
6. URLs de imagem (leading/trailing/sectionHeader/emptyState) precisam seguir formato aceito.
|
|
350
350
|
7. `ratingSize` deve estar em `10..32`; `ratingMax` em `1..10`.
|
|
351
|
-
8. `actions[].globalAction.payload` deve ser JSON valido quando "parece JSON" (`{}` ou `[]`).
|
|
351
|
+
8. `actions[].globalAction.payload` deve ser JSON valido quando "parece JSON" (`{}` ou `[]`); `payloadExpr` deve permanecer string e nao deve ser convertido em objeto.
|
|
352
352
|
|
|
353
353
|
### Integracao com schema remoto
|
|
354
354
|
|
|
@@ -364,7 +364,7 @@ A integracao com host ocorre por `SettingsValueProvider`:
|
|
|
364
364
|
Antes de devolver configuracao para host:
|
|
365
365
|
|
|
366
366
|
1. `ensureMappingApplied()` consolida estado dos mapeadores (`mapping*`) em `working.templating`.
|
|
367
|
-
2. `normalizeActionPayloads()` converte `globalAction.payload` string para objeto/array quando JSON valido, inclusive payloads de navegacao interna com `query` e `state
|
|
367
|
+
2. `normalizeActionPayloads()` converte `globalAction.payload` string para objeto/array quando JSON valido, inclusive payloads de navegacao interna com `query` e `state`; `payloadExpr` e preservado como escape avancado quando nao ha `payload` estruturado.
|
|
368
368
|
3. Retorno padrao: `{ config: working, id: listId }`.
|
|
369
369
|
|
|
370
370
|
### Exemplos
|
|
@@ -393,7 +393,7 @@ Quatro superficies governam o componente:
|
|
|
393
393
|
| `ASYNC_CONFIG_STORAGE` | persistencia de config | `praxis-list-config-${componentKeyId}` |
|
|
394
394
|
| `ComponentKeyService` | identidade de instancia | `listId + componentInstanceId + route` |
|
|
395
395
|
| `PraxisCollectionExportService` | exportação de coleção | CSV/JSON local; provider para export remoto/formatos avançados |
|
|
396
|
-
| `
|
|
396
|
+
| `PraxisAiAssistantShellComponent` + `ListAgenticAuthoringTurnFlow` + `ListAiAdapter` | copiloto semantico governado | ativo com `enableCustomization=true`; rejeita patch JSON livre e exige `componentEditPlan` manifest-backed antes de apply local |
|
|
397
397
|
| `GenericCrudService` | dados remotos e inferencia de schema | `/filter` + fallback `getAll` + `getSchema` |
|
|
398
398
|
|
|
399
399
|
#### Checklist corporativo pre-flight
|
|
@@ -678,6 +678,7 @@ Notas de UX/WCAG:
|
|
|
678
678
|
| `actions[].globalAction` | Active | integra com `GlobalActionService.executeRef`; suporta `navigation.openRoute` para navegação interna canônica |
|
|
679
679
|
| `actions[].globalAction.actionId` | Active | identificador canonico da acao global |
|
|
680
680
|
| `actions[].globalAction.payload` | Active | template/JSON resolvido recursivamente, inclusive `item.id` em rotas internas |
|
|
681
|
+
| `actions[].globalAction.payloadExpr` | Active | escape avancado de `GlobalActionRef`; quando nao ha `payload`, o runtime nao injeta payload sintetico |
|
|
681
682
|
| `actions[].emitLocal` | Active | emite `actionClick` mesmo com acao global |
|
|
682
683
|
| `actions[].showLoading` | Active | spinner + disable durante execucao |
|
|
683
684
|
| `actions[].confirmation.title` | Active | dialogo de confirmacao |
|
|
@@ -748,15 +749,15 @@ Política de erro:
|
|
|
748
749
|
|
|
749
750
|
Quando `enableCustomization=true`:
|
|
750
751
|
|
|
751
|
-
- componente exibe botao de edicao + `
|
|
752
|
+
- componente exibe botao de edicao + shell governada `PraxisAiAssistantShellComponent`;
|
|
752
753
|
- `openConfigEditor()` abre `PraxisListConfigEditor`;
|
|
753
754
|
- `applied$` e `saved$` aplicam config em runtime;
|
|
754
755
|
- `saved$` persiste no storage quando chave valida existe.
|
|
755
756
|
|
|
756
757
|
AI:
|
|
757
758
|
|
|
758
|
-
- `
|
|
759
|
-
- capability/context packs orientam mudancas por
|
|
759
|
+
- `ListAgenticAuthoringTurnFlow` envia contexto seguro para o backend e bloqueia patch livre;
|
|
760
|
+
- capability/context packs orientam mudancas por contrato governado, nao por patch JSON local.
|
|
760
761
|
|
|
761
762
|
#### Complete JSON path index (cobertura total)
|
|
762
763
|
|