@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/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?: Array<{
216
- id: string;
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?: Array<{
1755
- id: string;
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.20",
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.20",
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.20",
14
- "@praxisui/core": "^8.0.0-beta.20",
15
- "@praxisui/rich-content": "^8.0.0-beta.20",
16
- "@praxisui/settings-panel": "^8.0.0-beta.20"
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
- | `PraxisAiAssistantComponent` + `ListAiAdapter` | copiloto para patches JSON | ativo com `enableCustomization=true` |
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 + `praxis-ai-assistant`;
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
- - `ListAiAdapter` aplica patches de config sem recrear componente;
759
- - capability/context packs orientam mudancas por path JSON.
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