@praxisui/table 8.0.0-beta.20 → 8.0.0-beta.21

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
@@ -10,16 +10,15 @@ import { CdkDragDrop, CdkDragEnd, CdkDrag, CdkDropList } from '@angular/cdk/drag
10
10
  import { BehaviorSubject, Subscription, Observable } from 'rxjs';
11
11
  import { SettingsPanelService, SettingsValueProvider } from '@praxisui/settings-panel';
12
12
  import * as _praxisui_core from '@praxisui/core';
13
- import { TableConfig, LoggerService, PraxisI18nService, GlobalConfigService, AsyncConfigStorage, FieldMetadata, SchemaIdParams, FormConfig, GenericCrudService, DynamicFormService, SchemaNormalizerService, ComponentKeyService, ComponentDocMeta, LoadingState, RestApiLinks, ColumnDefinition, RichBlockNode, ConnectionStorage, ResourceDiscoveryService, LoadingOrchestrator, GlobalActionService, PraxisLoadingRenderer, TableDetailRichListNode, TableDetailCardGridNode, TableDetailCardGridCardNode, TableDetailTimelineNode, JsonLogicDataRecord, TableDetailListItemAction, TableDetailActionBarNode, TableDetailActionBarAction, TableDetailRefNode, TableDetailTemplateRefNode, TableDetailDiagramEmbedNode, TableDetailEmbedAction, GlobalActionRef, ResourceActionCatalogItem, ResourceSurfaceCatalogItem, JsonLogicExpression, GlobalActionCatalogEntry, IconPickerService, SurfaceOpenPayload, GlobalActionField, FieldDefinition, PraxisJsonLogicService, TableConfigService, PraxisTextValue, PraxisAnalyticsProjection, PraxisDataQueryContext, ApiUrlConfig, AnalyticsSchemaContractService, AnalyticsPresentationResolver, RichPresenterNode, RichComposeNode, ComponentAuthoringManifest, AiCapabilityCategory, AiValueKind, AiCapability, AiCapabilityCatalog } from '@praxisui/core';
13
+ import { TableConfig, LoggerService, PraxisI18nService, GlobalConfigService, AsyncConfigStorage, FieldMetadata, SchemaIdParams, FormConfig, GenericCrudService, DynamicFormService, SchemaNormalizerService, ComponentKeyService, ComponentDocMeta, PraxisTextValue, PraxisAnalyticsProjection, PraxisDataQueryContext, ApiUrlConfig, LoadingState, RestApiLinks, ColumnDefinition, RichBlockNode, ConnectionStorage, ResourceDiscoveryService, LoadingOrchestrator, GlobalActionService, PraxisLoadingRenderer, TableDetailRichListNode, TableDetailCardGridNode, TableDetailCardGridCardNode, TableDetailTimelineNode, JsonLogicDataRecord, TableDetailListItemAction, TableDetailActionBarNode, TableDetailActionBarAction, TableDetailRefNode, TableDetailTemplateRefNode, TableDetailDiagramEmbedNode, TableDetailEmbedAction, GlobalActionRef, PraxisRuntimeGlobalActionEffect, ResourceActionCatalogItem, ResourceSurfaceCatalogItem, JsonLogicExpression, GlobalActionCatalogEntry, IconPickerService, SurfaceOpenPayload, GlobalActionField, FieldDefinition, PraxisRuntimeConditionalEffectRule, PraxisJsonLogicService, TableConfigService, SettingsValueProvider as SettingsValueProvider$1, AnalyticsSchemaContractService, AnalyticsPresentationResolver, RichPresenterNode, RichComposeNode, ComponentAuthoringManifest, AiCapabilityCategory, AiValueKind, AiCapability, AiCapabilityCatalog } from '@praxisui/core';
14
14
  import { FormGroup, FormControl, FormBuilder } from '@angular/forms';
15
15
  import { MatDialog } from '@angular/material/dialog';
16
16
  import { CdkOverlayOrigin, ConnectedPosition } from '@angular/cdk/overlay';
17
17
  import { PraxisDialog } from '@praxisui/dialog';
18
- import { PraxisAssistantTurnViewState, PraxisAssistantShellLayout, PraxisAssistantShellLabels, PraxisAssistantShellQuickReply, PraxisAssistantShellMessage } from '@praxisui/ai';
18
+ import { PraxisAssistantTurnViewState, PraxisAssistantShellLayout, PraxisAssistantShellLabels, PraxisAssistantSessionSnapshot, PraxisAssistantShellQuickReply, PraxisAssistantShellMessage } from '@praxisui/ai';
19
+ import { HttpClient } from '@angular/common/http';
19
20
  import { MatTabChangeEvent } from '@angular/material/tabs';
20
- import * as _praxisui_table_rule_builder from '@praxisui/table-rule-builder';
21
21
  import { RuleEffectDefinition } from '@praxisui/table-rule-builder';
22
- import { HttpClient } from '@angular/common/http';
23
22
  import * as _angular_material_paginator_d_Zo1cMMo4 from '@angular/material/paginator.d-Zo1cMMo4';
24
23
  import { MatCheckboxChange } from '@angular/material/checkbox';
25
24
 
@@ -762,6 +761,49 @@ declare class PraxisFilter implements OnInit, OnChanges, AfterViewInit, OnDestro
762
761
  declare const PRAXIS_FILTER_COMPONENT_METADATA: ComponentDocMeta;
763
762
  declare function providePraxisFilterMetadata(): Provider;
764
763
 
764
+ type AnalyticsTableRow = Record<string, string | number | boolean | null>;
765
+ type AnalyticsTableContractSource = 'remote' | 'fallback';
766
+ interface AnalyticsTableViewModel {
767
+ config: TableConfig;
768
+ data: AnalyticsTableRow[];
769
+ }
770
+ interface AnalyticsTableContractDefinition<TKey extends string = string> {
771
+ key: TKey;
772
+ projectionId: string;
773
+ path: string;
774
+ title: PraxisTextValue;
775
+ subtitle?: PraxisTextValue;
776
+ fallbackProjection: PraxisAnalyticsProjection;
777
+ fallbackRows?: AnalyticsTableRow[];
778
+ }
779
+ interface AnalyticsTableContractLoadOptions<TKey extends string = string> {
780
+ cacheNamespace?: string;
781
+ queryContexts?: Partial<Record<TKey, PraxisDataQueryContext | null>>;
782
+ }
783
+ interface AnalyticsTableContractLoadResult<TKey extends string = string> {
784
+ views: Record<TKey, AnalyticsTableViewModel>;
785
+ sources: Record<TKey, AnalyticsTableContractSource>;
786
+ errors: Partial<Record<TKey, string>>;
787
+ }
788
+
789
+ declare class AnalyticsTableStatsApiService {
790
+ private readonly http;
791
+ private readonly apiUrl;
792
+ private readonly statsBuilder;
793
+ constructor(http: HttpClient, apiUrl: ApiUrlConfig);
794
+ execute(projection: PraxisAnalyticsProjection, queryContext?: PraxisDataQueryContext | null): Promise<AnalyticsTableRow[]>;
795
+ private toTableRows;
796
+ private resolveTimeSeriesCategory;
797
+ private resolveBucketCategory;
798
+ private projectMetricValues;
799
+ private resolveMetricValue;
800
+ private buildStatsUrl;
801
+ private applyQueryContext;
802
+ private normalizeError;
803
+ static ɵfac: i0.ɵɵFactoryDeclaration<AnalyticsTableStatsApiService, never>;
804
+ static ɵprov: i0.ɵɵInjectableDeclaration<AnalyticsTableStatsApiService>;
805
+ }
806
+
765
807
  type SchemaFieldHint = {
766
808
  name: string;
767
809
  label?: string;
@@ -844,6 +886,7 @@ type RuntimeRowAction = {
844
886
  id: string;
845
887
  action: string;
846
888
  globalAction?: GlobalActionRef;
889
+ effects?: PraxisRuntimeGlobalActionEffect[];
847
890
  label?: string;
848
891
  icon?: string;
849
892
  color?: string;
@@ -882,6 +925,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
882
925
  private loadingRenderer?;
883
926
  private route?;
884
927
  private logger?;
928
+ private analyticsStatsApi?;
885
929
  private static readonly CELL_ANIMATION_CHANGE_CACHE_LIMIT;
886
930
  private static readonly ROW_DISCOVERY_SUCCESS_CACHE_TTL_MS;
887
931
  private static readonly ROW_DISCOVERY_ERROR_CACHE_TTL_MS;
@@ -963,6 +1007,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
963
1007
  private lastResolvedDataMode;
964
1008
  private localFilterFieldMetadataCache;
965
1009
  private localFilterFieldMetadataCacheKey;
1010
+ private analyticsLoadSequence;
966
1011
  private uncontrolledExpandedRowKeys;
967
1012
  private readonly expansionOpaqueRefCacheLimit;
968
1013
  private expansionOpaqueRefByRowKey;
@@ -1040,6 +1085,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
1040
1085
  hasBottomPaginator(): boolean;
1041
1086
  hasExplicitResourcePath(): boolean;
1042
1087
  hasLocalDataInput(): boolean;
1088
+ hasAnalyticsProjectionInput(): boolean;
1043
1089
  getDataMode(): DataMode;
1044
1090
  isRemoteMode(): boolean;
1045
1091
  isLocalMode(): boolean;
@@ -1096,7 +1142,9 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
1096
1142
  private aiAssistantController;
1097
1143
  private aiAssistantStateSubscription;
1098
1144
  private readonly aiApi;
1145
+ private readonly assistantSessions;
1099
1146
  private readonly aiTurnOrchestrator;
1147
+ private readonly aiAssistantSessionEffect;
1100
1148
  private computedContextCache;
1101
1149
  private computedFieldNames;
1102
1150
  private readonly jsonLogic;
@@ -1145,19 +1193,32 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
1145
1193
  private ensureConfigDefaults;
1146
1194
  private setShowToolbar;
1147
1195
  private shouldExposeToolbar;
1148
- constructor(cdr: ChangeDetectorRef, settingsPanel: SettingsPanelService, crudService: GenericCrudService<any, any>, tableDefaultsProvider: TableDefaultsProvider, filterConfig: FilterConfigService, formattingService: DataFormattingService, pxDialog: PraxisDialog, snackBar: MatSnackBar, asyncConfigStorage: AsyncConfigStorage, connectionStorage: ConnectionStorage, hostRef: ElementRef<HTMLElement>, global: GlobalConfigService, resourceDiscovery: ResourceDiscoveryService, componentKeys: ComponentKeyService, loadingOrchestrator: LoadingOrchestrator, globalActions: GlobalActionService, loadingRenderer?: PraxisLoadingRenderer | undefined, route?: ActivatedRoute | undefined, logger?: LoggerService | undefined);
1196
+ constructor(cdr: ChangeDetectorRef, settingsPanel: SettingsPanelService, crudService: GenericCrudService<any, any>, tableDefaultsProvider: TableDefaultsProvider, filterConfig: FilterConfigService, formattingService: DataFormattingService, pxDialog: PraxisDialog, snackBar: MatSnackBar, asyncConfigStorage: AsyncConfigStorage, connectionStorage: ConnectionStorage, hostRef: ElementRef<HTMLElement>, global: GlobalConfigService, resourceDiscovery: ResourceDiscoveryService, componentKeys: ComponentKeyService, loadingOrchestrator: LoadingOrchestrator, globalActions: GlobalActionService, loadingRenderer?: PraxisLoadingRenderer | undefined, route?: ActivatedRoute | undefined, logger?: LoggerService | undefined, analyticsStatsApi?: AnalyticsTableStatsApiService | undefined);
1149
1197
  private ensureAiAdapterLoaded;
1150
1198
  openAiAssistant(): void;
1199
+ aiAssistantTriggerTestId(position: string): string;
1200
+ openAiAssistantFromSession(session: PraxisAssistantSessionSnapshot): void;
1151
1201
  closeAiAssistant(): void;
1152
1202
  onAiAssistantPromptChange(prompt: string): void;
1153
1203
  onAiAssistantSubmit(prompt: string): void;
1154
1204
  onAiAssistantApply(): void;
1205
+ onAiAssistantRetry(): void;
1206
+ onAiAssistantCancel(): void;
1155
1207
  onAiAssistantQuickReply(reply: PraxisAssistantShellQuickReply): void;
1156
1208
  onAiAssistantEditMessage(message: PraxisAssistantShellMessage): void;
1157
1209
  onAiAssistantResendMessage(message: PraxisAssistantShellMessage): void;
1158
1210
  onAiAssistantLayoutChange(layout: PraxisAssistantShellLayout): void;
1159
1211
  private initializeAiAssistantController;
1160
1212
  private buildAiAssistantContextItems;
1213
+ private buildAiAssistantContextSnapshot;
1214
+ private syncAiAssistantSession;
1215
+ private hasAiAssistantSessionState;
1216
+ private resolveAiAssistantSessionId;
1217
+ private resolveAiAssistantOwnerId;
1218
+ private resolveAiAssistantRouteKey;
1219
+ private resolveAiAssistantSummary;
1220
+ private resolveAiAssistantBadge;
1221
+ private resolveAiAssistantIcon;
1161
1222
  private emitLoadingState;
1162
1223
  private hasResolvedRemoteDataLoad;
1163
1224
  private isTableDataLoading;
@@ -1384,6 +1445,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
1384
1445
  private emitEventWithActionFeedback;
1385
1446
  private executeConfiguredGlobalAction;
1386
1447
  private resolveConfiguredGlobalActionRef;
1448
+ private resolveActionGlobalActionRef;
1387
1449
  private resolveGlobalActionPayload;
1388
1450
  private buildGlobalActionTemplateContext;
1389
1451
  private resolveGlobalActionTemplateValue;
@@ -1551,6 +1613,8 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
1551
1613
  private pruneRowDiscoveryCaches;
1552
1614
  private pruneRowDiscoveryCache;
1553
1615
  private fetchData;
1616
+ private resolveAnalyticsProjection;
1617
+ private fetchAnalyticsProjectionData;
1554
1618
  private getEffectiveFilterCriteria;
1555
1619
  retryData(): void;
1556
1620
  reloadSchema(): void;
@@ -1570,6 +1634,19 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
1570
1634
  private resolveImplicitFormat;
1571
1635
  getCellClasses(rowData: any, column: ColumnDefinition): string[] | undefined;
1572
1636
  getCellNgStyle(rowData: any, column: ColumnDefinition): Record<string, string> | undefined;
1637
+ private normalizeConditionalStyleRules;
1638
+ private normalizeConditionalStyleRecord;
1639
+ private normalizeConditionalStyleEffects;
1640
+ private hasConditionalStyleEffectPayload;
1641
+ private resolveConditionalStyleClasses;
1642
+ private resolveConditionalStyleObject;
1643
+ private compileConditionalStyleEffect;
1644
+ private normalizeConditionalRendererRules;
1645
+ private normalizeObjectRecord;
1646
+ private buildColumnRendererOverrideFromEffects;
1647
+ private buildColumnRendererFromEffect;
1648
+ private resolveRuleAnimationFromEffects;
1649
+ private resolveRowTooltipFromEffects;
1573
1650
  private resetComputedContextCache;
1574
1651
  private ensureEffectiveCellRenderCache;
1575
1652
  private ensureCellAnimationPreviousValuesByRowId;
@@ -1581,6 +1658,11 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
1581
1658
  private buildComputedSignature;
1582
1659
  private stringifyDependencyValue;
1583
1660
  private buildComputedValueMap;
1661
+ private collectComputedColumns;
1662
+ private evaluateCanonicalComputedColumns;
1663
+ private collectComputedExpressionDependencies;
1664
+ private collectJsonLogicVarDependencies;
1665
+ private resolveJsonLogicVarPath;
1584
1666
  private buildEvaluationContext;
1585
1667
  private getJsonLogicEvaluationOptions;
1586
1668
  private resolveJsonLogicUserTimeZone;
@@ -1886,8 +1968,8 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
1886
1968
  getRowMenuIcon(): string;
1887
1969
  private scheduleRowDiscoveryMarkForCheck;
1888
1970
  ngOnDestroy(): void;
1889
- static ɵfac: i0.ɵɵFactoryDeclaration<PraxisTable, [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, { optional: true; }, { optional: true; }, { optional: true; }]>;
1890
- static ɵcmp: i0.ɵɵComponentDeclaration<PraxisTable, "praxis-table", never, { "config": { "alias": "config"; "required": false; }; "resourcePath": { "alias": "resourcePath"; "required": false; }; "data": { "alias": "data"; "required": false; }; "tableId": { "alias": "tableId"; "required": true; }; "componentInstanceId": { "alias": "componentInstanceId"; "required": false; }; "title": { "alias": "title"; "required": false; }; "subtitle": { "alias": "subtitle"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "autoDelete": { "alias": "autoDelete"; "required": false; }; "notifyIfOutdated": { "alias": "notifyIfOutdated"; "required": false; }; "snoozeMs": { "alias": "snoozeMs"; "required": false; }; "autoOpenSettingsOnOutdated": { "alias": "autoOpenSettingsOnOutdated"; "required": false; }; "crudContext": { "alias": "crudContext"; "required": false; }; "filterCriteria": { "alias": "filterCriteria"; "required": false; }; "queryContext": { "alias": "queryContext"; "required": false; }; "enableCustomization": { "alias": "enableCustomization"; "required": false; }; "dense": { "alias": "dense"; "required": false; }; }, { "rowClick": "rowClick"; "rowDoubleClick": "rowDoubleClick"; "rowExpansionChange": "rowExpansionChange"; "rowAction": "rowAction"; "toolbarAction": "toolbarAction"; "bulkAction": "bulkAction"; "exportAction": "exportAction"; "columnReorder": "columnReorder"; "columnReorderAttempt": "columnReorderAttempt"; "beforeDelete": "beforeDelete"; "afterDelete": "afterDelete"; "deleteError": "deleteError"; "beforeBulkDelete": "beforeBulkDelete"; "afterBulkDelete": "afterBulkDelete"; "bulkDeleteError": "bulkDeleteError"; "schemaStatusChange": "schemaStatusChange"; "metadataChange": "metadataChange"; "loadingStateChange": "loadingStateChange"; "collectionLinksChange": "collectionLinksChange"; "selectionChange": "selectionChange"; }, ["toolbar", "projectedFilter"], ["[advancedFilter]", "[toolbar]", "[advancedFilter]", "[toolbar]", "[advancedFilter]", "[toolbar]"], true, never>;
1971
+ static ɵfac: i0.ɵɵFactoryDeclaration<PraxisTable, [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }]>;
1972
+ static ɵcmp: i0.ɵɵComponentDeclaration<PraxisTable, "praxis-table", never, { "config": { "alias": "config"; "required": false; }; "resourcePath": { "alias": "resourcePath"; "required": false; }; "data": { "alias": "data"; "required": false; }; "tableId": { "alias": "tableId"; "required": true; }; "componentInstanceId": { "alias": "componentInstanceId"; "required": false; }; "title": { "alias": "title"; "required": false; }; "subtitle": { "alias": "subtitle"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "autoDelete": { "alias": "autoDelete"; "required": false; }; "notifyIfOutdated": { "alias": "notifyIfOutdated"; "required": false; }; "snoozeMs": { "alias": "snoozeMs"; "required": false; }; "autoOpenSettingsOnOutdated": { "alias": "autoOpenSettingsOnOutdated"; "required": false; }; "crudContext": { "alias": "crudContext"; "required": false; }; "filterCriteria": { "alias": "filterCriteria"; "required": false; }; "queryContext": { "alias": "queryContext"; "required": false; }; "horizontalScroll": { "alias": "horizontalScroll"; "required": false; }; "enableCustomization": { "alias": "enableCustomization"; "required": false; }; "dense": { "alias": "dense"; "required": false; }; }, { "rowClick": "rowClick"; "rowDoubleClick": "rowDoubleClick"; "rowExpansionChange": "rowExpansionChange"; "rowAction": "rowAction"; "toolbarAction": "toolbarAction"; "bulkAction": "bulkAction"; "exportAction": "exportAction"; "columnReorder": "columnReorder"; "columnReorderAttempt": "columnReorderAttempt"; "beforeDelete": "beforeDelete"; "afterDelete": "afterDelete"; "deleteError": "deleteError"; "beforeBulkDelete": "beforeBulkDelete"; "afterBulkDelete": "afterBulkDelete"; "bulkDeleteError": "bulkDeleteError"; "schemaStatusChange": "schemaStatusChange"; "metadataChange": "metadataChange"; "loadingStateChange": "loadingStateChange"; "collectionLinksChange": "collectionLinksChange"; "selectionChange": "selectionChange"; }, ["toolbar", "projectedFilter"], ["[advancedFilter]", "[toolbar]", "[advancedFilter]", "[toolbar]", "[advancedFilter]", "[toolbar]"], true, never>;
1891
1973
  static ngAcceptInputType_enableCustomization: unknown;
1892
1974
  }
1893
1975
 
@@ -2429,6 +2511,7 @@ interface ToolbarAction {
2429
2511
  appearance?: 'filled' | 'outlined' | 'elevated' | 'text' | 'tonal';
2430
2512
  action: string;
2431
2513
  globalAction?: GlobalActionRef;
2514
+ effects?: PraxisRuntimeGlobalActionEffect[];
2432
2515
  position: 'start' | 'end';
2433
2516
  order?: number;
2434
2517
  disabled?: boolean;
@@ -2436,7 +2519,7 @@ interface ToolbarAction {
2436
2519
  shortcut?: string;
2437
2520
  shortcutScope?: 'toolbar' | 'global';
2438
2521
  tooltip?: string;
2439
- visibleWhen?: string;
2522
+ visibleWhen?: JsonLogicExpression | null;
2440
2523
  children?: ToolbarAction[];
2441
2524
  }
2442
2525
  interface RowAction {
@@ -2445,11 +2528,14 @@ interface RowAction {
2445
2528
  icon: string;
2446
2529
  action: string;
2447
2530
  globalAction?: GlobalActionRef;
2531
+ effects?: PraxisRuntimeGlobalActionEffect[];
2448
2532
  color?: 'primary' | 'accent' | 'warn';
2449
2533
  tooltip?: string;
2450
2534
  requiresConfirmation?: boolean;
2451
2535
  autoDelete?: boolean;
2452
2536
  separator?: boolean;
2537
+ visibleWhen?: JsonLogicExpression | null;
2538
+ disabledWhen?: JsonLogicExpression | null;
2453
2539
  conditional?: string;
2454
2540
  }
2455
2541
  interface BulkAction {
@@ -2458,6 +2544,7 @@ interface BulkAction {
2458
2544
  icon: string;
2459
2545
  action: string;
2460
2546
  globalAction?: GlobalActionRef;
2547
+ effects?: PraxisRuntimeGlobalActionEffect[];
2461
2548
  color?: 'primary' | 'accent' | 'warn';
2462
2549
  tooltip?: string;
2463
2550
  requiresConfirmation?: boolean;
@@ -2484,8 +2571,11 @@ type EditableTableAction = {
2484
2571
  label?: string;
2485
2572
  action?: string;
2486
2573
  globalAction?: GlobalActionRef;
2574
+ effects?: PraxisRuntimeGlobalActionEffect[];
2487
2575
  position?: string;
2488
2576
  appearance?: string;
2577
+ visibleWhen?: JsonLogicExpression | null;
2578
+ disabledWhen?: JsonLogicExpression | null;
2489
2579
  };
2490
2580
  type ToolbarShortcutScope = 'toolbar' | 'global';
2491
2581
  interface InternalActionSpec {
@@ -2552,14 +2642,16 @@ declare class ToolbarActionsEditorComponent implements OnInit, OnDestroy, OnChan
2552
2642
  onActionSelectChange(action: EditableTableAction, value: string, kind: 'toolbar' | 'row' | 'bulk'): void;
2553
2643
  onActionParamChange(action: EditableTableAction, value: string, kind: 'toolbar' | 'row' | 'bulk'): void;
2554
2644
  onActionCustomChange(action: EditableTableAction, value: string, kind: 'toolbar' | 'row' | 'bulk'): void;
2645
+ getCanonicalGlobalActionRef(action?: EditableTableAction): GlobalActionRef | undefined;
2646
+ private setCanonicalGlobalActionRef;
2555
2647
  private touchActionList;
2648
+ getActionJsonLogicText(action: EditableTableAction, key: 'visibleWhen' | 'disabledWhen'): string;
2649
+ onActionJsonLogicChange(action: EditableTableAction, key: 'visibleWhen' | 'disabledWhen', value: string, kind: 'toolbar' | 'row' | 'bulk'): void;
2650
+ getActionConditionError(action: EditableTableAction, key: 'visibleWhen' | 'disabledWhen'): string;
2556
2651
  isGlobalActionId(id?: string): boolean;
2557
2652
  getGlobalActionSchema(action: EditableTableAction): _praxisui_core.GlobalActionUiSchema | undefined;
2558
2653
  getSurfaceOpenActionPayload(action: EditableTableAction): SurfaceOpenPayload;
2559
- onSurfaceOpenActionPayloadChange(action: {
2560
- action?: string;
2561
- globalAction?: GlobalActionRef;
2562
- }, payload: SurfaceOpenPayload, kind: 'toolbar' | 'row' | 'bulk'): void;
2654
+ onSurfaceOpenActionPayloadChange(action: EditableTableAction, payload: SurfaceOpenPayload, kind: 'toolbar' | 'row' | 'bulk'): void;
2563
2655
  shouldShowGlobalActionField(action: EditableTableAction, field: GlobalActionField): boolean;
2564
2656
  isGlobalActionFieldRequired(action: EditableTableAction, field: GlobalActionField): boolean;
2565
2657
  isGlobalActionFieldMissing(action: EditableTableAction, field: GlobalActionField): boolean;
@@ -2926,12 +3018,10 @@ declare class RuleCompilerService {
2926
3018
  static ɵprov: i0.ɵɵInjectableDeclaration<RuleCompilerService>;
2927
3019
  }
2928
3020
 
2929
- type RuleItem = {
2930
- condition: JsonLogicExpression;
3021
+ type RuleItem = Omit<PraxisRuntimeConditionalEffectRule<RuleEffectDefinition>, 'effects'> & {
2931
3022
  cssClass?: string;
2932
3023
  style?: Record<string, string>;
2933
- description?: string;
2934
- effects?: _praxisui_table_rule_builder.RuleEffectDefinition;
3024
+ effects?: RuleEffectDefinition[];
2935
3025
  enabled?: boolean;
2936
3026
  };
2937
3027
  declare class TableRulesEditorComponent implements OnChanges, OnInit, OnDestroy {
@@ -3001,6 +3091,7 @@ declare class TableRulesEditorComponent implements OnChanges, OnInit, OnDestroy
3001
3091
  onColumnSelect(field: string): void;
3002
3092
  private initFromConfig;
3003
3093
  private loadColumnRules;
3094
+ private normalizePersistedRules;
3004
3095
  rebuildCondition(): void;
3005
3096
  onDraftChange(): void;
3006
3097
  applyTextPreset(preset: string): void;
@@ -3027,6 +3118,8 @@ declare class TableRulesEditorComponent implements OnChanges, OnInit, OnDestroy
3027
3118
  onExportRules(): void;
3028
3119
  onImportRules(): void;
3029
3120
  private sanitizeRule;
3121
+ private normalizeRuleEffects;
3122
+ getPrimaryEffect(r: RuleItem | null | undefined): RuleEffectDefinition | undefined;
3030
3123
  getAnimationLabel(r: RuleItem): string | null;
3031
3124
  private normalizeRendererAnimation;
3032
3125
  private buildRendererOverrideFromRule;
@@ -3225,7 +3318,6 @@ declare class PraxisTableConfigEditor implements OnInit, OnDestroy, SettingsValu
3225
3318
  private updateColumnMetas;
3226
3319
  private updateCanSaveState;
3227
3320
  private collectGlobalActionValidationIssues;
3228
- private collectGlobalActionValidationTargets;
3229
3321
  private findGlobalActionCatalogEntry;
3230
3322
  private buildGlobalActionCatalog;
3231
3323
  private subscribeCrudEditorChanges;
@@ -3299,6 +3391,107 @@ declare class PraxisTableConfigEditor implements OnInit, OnDestroy, SettingsValu
3299
3391
  static ɵcmp: i0.ɵɵComponentDeclaration<PraxisTableConfigEditor, "praxis-table-config-editor", never, {}, {}, never, never, true, never>;
3300
3392
  }
3301
3393
 
3394
+ interface PraxisTableWidgetEditorInputs {
3395
+ config?: TableConfig | null;
3396
+ resourcePath?: string | null;
3397
+ horizontalScroll?: 'auto' | 'wrap' | 'none';
3398
+ tableId?: string;
3399
+ componentInstanceId?: string;
3400
+ [key: string]: unknown;
3401
+ }
3402
+ interface PraxisTableWidgetEditorValue {
3403
+ inputs: PraxisTableWidgetEditorInputs;
3404
+ }
3405
+ declare class PraxisTableWidgetConfigEditor implements SettingsValueProvider$1, AfterViewInit, OnDestroy {
3406
+ inputs: PraxisTableWidgetEditorInputs | null;
3407
+ widgetKey?: string;
3408
+ tableEditor?: PraxisTableConfigEditor;
3409
+ readonly isDirty$: BehaviorSubject<boolean>;
3410
+ readonly isValid$: BehaviorSubject<boolean>;
3411
+ readonly isBusy$: BehaviorSubject<boolean>;
3412
+ private readonly subscription;
3413
+ ngAfterViewInit(): void;
3414
+ ngOnDestroy(): void;
3415
+ getSettingsValue(): PraxisTableWidgetEditorValue;
3416
+ onSave(): PraxisTableWidgetEditorValue;
3417
+ reset(): void;
3418
+ private initializeChildEditor;
3419
+ private buildValue;
3420
+ static ɵfac: i0.ɵɵFactoryDeclaration<PraxisTableWidgetConfigEditor, never>;
3421
+ static ɵcmp: i0.ɵɵComponentDeclaration<PraxisTableWidgetConfigEditor, "praxis-table-widget-config-editor", never, { "inputs": { "alias": "inputs"; "required": false; }; "widgetKey": { "alias": "widgetKey"; "required": false; }; }, {}, never, never, true, never>;
3422
+ }
3423
+
3424
+ interface PraxisFilterWidgetEditorInputs {
3425
+ resourcePath?: string | null;
3426
+ fieldMetadata?: FieldMetadata[] | null;
3427
+ filterId?: string;
3428
+ formId?: string;
3429
+ componentInstanceId?: string;
3430
+ alwaysVisibleFields?: string[];
3431
+ alwaysVisibleFieldMetadataOverrides?: Record<string, Record<string, unknown>>;
3432
+ selectedFieldIds?: string[];
3433
+ allowSaveTags?: boolean;
3434
+ changeDebounceMs?: number;
3435
+ placeBooleansInActions?: boolean;
3436
+ showToggleLabels?: boolean;
3437
+ alwaysMinWidth?: number;
3438
+ alwaysColsMd?: number;
3439
+ alwaysColsLg?: number;
3440
+ confirmTagDelete?: boolean;
3441
+ tagColor?: 'primary' | 'accent' | 'warn' | 'basic';
3442
+ tagVariant?: 'filled' | 'outlined';
3443
+ tagButtonColor?: 'primary' | 'accent' | 'warn' | 'basic';
3444
+ actionsButtonColor?: 'primary' | 'accent' | 'warn' | 'basic';
3445
+ actionsVariant?: 'standard' | 'outlined';
3446
+ useInlineSearchableSelectVariant?: boolean;
3447
+ useInlineRangeVariant?: boolean;
3448
+ useInlineDateVariant?: boolean;
3449
+ useInlineDateRangeVariant?: boolean;
3450
+ useInlineTimeVariant?: boolean;
3451
+ useInlineTimeRangeVariant?: boolean;
3452
+ useInlineTreeSelectVariant?: boolean;
3453
+ overlayVariant?: 'card' | 'frosted';
3454
+ overlayBackdrop?: boolean;
3455
+ advancedOpenMode?: 'modal' | 'drawer';
3456
+ advancedClearButtonsEnabled?: boolean;
3457
+ persistenceKey?: string;
3458
+ showFilterSettings?: boolean;
3459
+ enableCustomization?: boolean;
3460
+ [key: string]: unknown;
3461
+ }
3462
+ interface PraxisFilterWidgetEditorValue {
3463
+ inputs: PraxisFilterWidgetEditorInputs;
3464
+ }
3465
+ declare class PraxisFilterWidgetConfigEditor implements SettingsValueProvider$1, OnDestroy {
3466
+ widgetKey?: string;
3467
+ set inputs(value: PraxisFilterWidgetEditorInputs | null);
3468
+ get inputs(): PraxisFilterWidgetEditorInputs | null;
3469
+ set filterSettings(component: FilterSettingsComponent | undefined);
3470
+ metadata: FieldMetadata[];
3471
+ settings: FilterConfig;
3472
+ configKey?: string;
3473
+ readonly isDirty$: BehaviorSubject<boolean>;
3474
+ readonly isValid$: BehaviorSubject<boolean>;
3475
+ readonly isBusy$: BehaviorSubject<boolean>;
3476
+ private currentInputs;
3477
+ private settingsEditor?;
3478
+ private subscription;
3479
+ ngOnDestroy(): void;
3480
+ getSettingsValue(): PraxisFilterWidgetEditorValue;
3481
+ onSave(): PraxisFilterWidgetEditorValue;
3482
+ reset(): void;
3483
+ private buildValue;
3484
+ private buildSettingsFromInputs;
3485
+ private projectSettingsToInputs;
3486
+ private normalizeSettings;
3487
+ private normalizeAdvancedOpenMode;
3488
+ private normalizeOverlayVariant;
3489
+ private cloneStringArray;
3490
+ private cloneRecord;
3491
+ static ɵfac: i0.ɵɵFactoryDeclaration<PraxisFilterWidgetConfigEditor, never>;
3492
+ static ɵcmp: i0.ɵɵComponentDeclaration<PraxisFilterWidgetConfigEditor, "praxis-filter-widget-config-editor", never, { "widgetKey": { "alias": "widgetKey"; "required": false; }; "inputs": { "alias": "inputs"; "required": false; }; }, {}, never, never, true, never>;
3493
+ }
3494
+
3302
3495
  declare class DataFormatterComponent implements OnInit, OnChanges {
3303
3496
  private cdr;
3304
3497
  private formattingService;
@@ -3367,31 +3560,6 @@ declare class DataFormatterComponent implements OnInit, OnChanges {
3367
3560
  static ɵcmp: i0.ɵɵComponentDeclaration<DataFormatterComponent, "data-formatter", never, { "columnType": { "alias": "columnType"; "required": false; }; "currentFormat": { "alias": "currentFormat"; "required": false; }; }, { "formatChange": "formatChange"; }, never, never, true, never>;
3368
3561
  }
3369
3562
 
3370
- type AnalyticsTableRow = Record<string, string | number | boolean | null>;
3371
- type AnalyticsTableContractSource = 'remote' | 'fallback';
3372
- interface AnalyticsTableViewModel {
3373
- config: TableConfig;
3374
- data: AnalyticsTableRow[];
3375
- }
3376
- interface AnalyticsTableContractDefinition<TKey extends string = string> {
3377
- key: TKey;
3378
- projectionId: string;
3379
- path: string;
3380
- title: PraxisTextValue;
3381
- subtitle?: PraxisTextValue;
3382
- fallbackProjection: PraxisAnalyticsProjection;
3383
- fallbackRows?: AnalyticsTableRow[];
3384
- }
3385
- interface AnalyticsTableContractLoadOptions<TKey extends string = string> {
3386
- cacheNamespace?: string;
3387
- queryContexts?: Partial<Record<TKey, PraxisDataQueryContext | null>>;
3388
- }
3389
- interface AnalyticsTableContractLoadResult<TKey extends string = string> {
3390
- views: Record<TKey, AnalyticsTableViewModel>;
3391
- sources: Record<TKey, AnalyticsTableContractSource>;
3392
- errors: Partial<Record<TKey, string>>;
3393
- }
3394
-
3395
3563
  interface AnalyticsTableConfigAdapterOptions {
3396
3564
  title?: PraxisTextValue;
3397
3565
  subtitle?: PraxisTextValue;
@@ -3405,24 +3573,6 @@ declare class AnalyticsTableConfigAdapterService {
3405
3573
  static ɵprov: i0.ɵɵInjectableDeclaration<AnalyticsTableConfigAdapterService>;
3406
3574
  }
3407
3575
 
3408
- declare class AnalyticsTableStatsApiService {
3409
- private readonly http;
3410
- private readonly apiUrl;
3411
- private readonly statsBuilder;
3412
- constructor(http: HttpClient, apiUrl: ApiUrlConfig);
3413
- execute(projection: PraxisAnalyticsProjection, queryContext?: PraxisDataQueryContext | null): Promise<AnalyticsTableRow[]>;
3414
- private toTableRows;
3415
- private resolveTimeSeriesCategory;
3416
- private resolveBucketCategory;
3417
- private projectMetricValues;
3418
- private resolveMetricValue;
3419
- private buildStatsUrl;
3420
- private applyQueryContext;
3421
- private normalizeError;
3422
- static ɵfac: i0.ɵɵFactoryDeclaration<AnalyticsTableStatsApiService, never>;
3423
- static ɵprov: i0.ɵɵInjectableDeclaration<AnalyticsTableStatsApiService>;
3424
- }
3425
-
3426
3576
  declare class AnalyticsTableContractService {
3427
3577
  private readonly analyticsSchema;
3428
3578
  private readonly resolver;
@@ -4064,5 +4214,5 @@ declare function coerceTableComponentEditPlan(value: unknown): TableComponentEdi
4064
4214
  declare function compileTableComponentEditPlans(plans: TableComponentEditPlan[], currentConfig: TableConfig): TableComponentEditPlanCompileResult;
4065
4215
  declare function compileTableComponentEditPlan(plan: TableComponentEditPlan, currentConfig: TableConfig): TableComponentEditPlanCompileResult;
4066
4216
 
4067
- export { AnalyticsTableConfigAdapterService, AnalyticsTableContractService, AnalyticsTableStatsApiService, BOOLEAN_PRESETS, BehaviorConfigEditorComponent, CURRENCY_PRESETS, ColumnsConfigEditorComponent, DATE_PRESETS, DataFormatterComponent, DataFormattingService, FORMULA_TEMPLATES, FilterConfigService, FilterSettingsComponent, FormulaGeneratorService, JsonConfigEditorComponent, MessagesLocalizationEditorComponent, NUMBER_PRESETS, PERCENTAGE_PRESETS, PRAXIS_FILTER_COMPONENT_METADATA, PRAXIS_TABLE_AUTHORING_MANIFEST, PRAXIS_TABLE_COMPONENT_METADATA, PraxisFilter, PraxisTable, PraxisTableConfigEditor, PraxisTableInlineAuthoringEditorComponent, PraxisTableToolbar, STRING_PRESETS, TABLE_AI_CAPABILITIES, TABLE_COMPONENT_AI_CAPABILITIES, TABLE_COMPONENT_EDIT_PLAN_ALLOWED_CHANGE_KINDS, TABLE_COMPONENT_EDIT_PLAN_BATCH_KIND, TABLE_COMPONENT_EDIT_PLAN_EXPECTED_PATHS, TABLE_COMPONENT_EDIT_PLAN_JSON_SCHEMA, TABLE_COMPONENT_EDIT_PLAN_KIND, TABLE_COMPONENT_EDIT_PLAN_VERSION, TASK_PRESETS, TableDefaultsProvider, TableRulesEditorComponent, ToolbarActionsEditorComponent, ValueMappingEditorComponent, VisualFormulaBuilderComponent, buildTableApplyPlan, coerceTableComponentEditPlan, coerceTableComponentEditPlans, compileTableComponentEditPlan, compileTableComponentEditPlans, createTableAuthoringDocument, getActionId, getEnum, getTableCapabilities, getTableComponentEditPlanCapabilities, isTableRendererSupportedByRichContentP0, mapTableRendererToRichContentP0, normalizeTableAuthoringDocument, parseLegacyOrTableDocument, providePraxisFilterMetadata, providePraxisTableMetadata, serializeTableAuthoringDocument, toCanonicalTableConfig, validateTableAuthoringDocument };
4068
- export type { ActionLike, AnalyticsTableConfigAdapterOptions, AnalyticsTableContractDefinition, AnalyticsTableContractLoadOptions, AnalyticsTableContractLoadResult, AnalyticsTableContractSource, AnalyticsTableRow, AnalyticsTableViewModel, ArithmeticParams, BehaviorConfigChange, BooleanFormatterOptions, BulkAction, Capability$1 as Capability, CapabilityCatalog$1 as CapabilityCatalog, CapabilityCategory$1 as CapabilityCategory, ColumnChange, ColumnDataType$1 as ColumnDataType, ConcatenationParams, ConditionalMappingParams, CurrencyFormatterOptions, DataFormattingOptions, DataMode, DateFormatterOptions, DefaultValueParams, EditorDiagnostic, EditorDocument, FieldSchema, FilterConfig, FilterTag, FormatPreset, FormatterConfig, FormulaDefinition, FormulaParameterSchema, FormulaParams, FormulaTemplate, FormulaType, I18n, JsonEditorEvent, JsonValidationResult, MessagesLocalizationChange, NestedPropertyParams, NumberFormatterOptions, PercentageFormatterOptions, ResourcePathIntent, RowAction, RowExpansionChangeBase, RowExpansionChangeEvent, RowExpansionReasonCode, RowExpansionTrigger, StringFormatterOptions, TableApplyPlan, TableAuthoringDocument, TableBindings, Capability as TableComponentCapability, CapabilityCatalog as TableComponentCapabilityCatalog, CapabilityCategory as TableComponentCapabilityCategory, TableComponentEditChangeKind, TableComponentEditPlan, TableComponentEditPlanCompileResult, ValueKind as TableComponentValueKind, TableHorizontalScroll, TableProjectionContext, TableRichContentP0Node, TableRuntimeContext, TableValidationContext, ToolbarAction, ToolbarActionsChange, ValueKind$1 as ValueKind, ValueMappingPair };
4217
+ export { AnalyticsTableConfigAdapterService, AnalyticsTableContractService, AnalyticsTableStatsApiService, BOOLEAN_PRESETS, BehaviorConfigEditorComponent, CURRENCY_PRESETS, ColumnsConfigEditorComponent, DATE_PRESETS, DataFormatterComponent, DataFormattingService, FORMULA_TEMPLATES, FilterConfigService, FilterSettingsComponent, FormulaGeneratorService, JsonConfigEditorComponent, MessagesLocalizationEditorComponent, NUMBER_PRESETS, PERCENTAGE_PRESETS, PRAXIS_FILTER_COMPONENT_METADATA, PRAXIS_TABLE_AUTHORING_MANIFEST, PRAXIS_TABLE_COMPONENT_METADATA, PraxisFilter, PraxisFilterWidgetConfigEditor, PraxisTable, PraxisTableConfigEditor, PraxisTableInlineAuthoringEditorComponent, PraxisTableToolbar, PraxisTableWidgetConfigEditor, STRING_PRESETS, TABLE_AI_CAPABILITIES, TABLE_COMPONENT_AI_CAPABILITIES, TABLE_COMPONENT_EDIT_PLAN_ALLOWED_CHANGE_KINDS, TABLE_COMPONENT_EDIT_PLAN_BATCH_KIND, TABLE_COMPONENT_EDIT_PLAN_EXPECTED_PATHS, TABLE_COMPONENT_EDIT_PLAN_JSON_SCHEMA, TABLE_COMPONENT_EDIT_PLAN_KIND, TABLE_COMPONENT_EDIT_PLAN_VERSION, TASK_PRESETS, TableDefaultsProvider, TableRulesEditorComponent, ToolbarActionsEditorComponent, ValueMappingEditorComponent, VisualFormulaBuilderComponent, buildTableApplyPlan, coerceTableComponentEditPlan, coerceTableComponentEditPlans, compileTableComponentEditPlan, compileTableComponentEditPlans, createTableAuthoringDocument, getActionId, getEnum, getTableCapabilities, getTableComponentEditPlanCapabilities, isTableRendererSupportedByRichContentP0, mapTableRendererToRichContentP0, normalizeTableAuthoringDocument, parseLegacyOrTableDocument, providePraxisFilterMetadata, providePraxisTableMetadata, serializeTableAuthoringDocument, toCanonicalTableConfig, validateTableAuthoringDocument };
4218
+ export type { ActionLike, AnalyticsTableConfigAdapterOptions, AnalyticsTableContractDefinition, AnalyticsTableContractLoadOptions, AnalyticsTableContractLoadResult, AnalyticsTableContractSource, AnalyticsTableRow, AnalyticsTableViewModel, ArithmeticParams, BehaviorConfigChange, BooleanFormatterOptions, BulkAction, Capability$1 as Capability, CapabilityCatalog$1 as CapabilityCatalog, CapabilityCategory$1 as CapabilityCategory, ColumnChange, ColumnDataType$1 as ColumnDataType, ConcatenationParams, ConditionalMappingParams, CurrencyFormatterOptions, DataFormattingOptions, DataMode, DateFormatterOptions, DefaultValueParams, EditorDiagnostic, EditorDocument, FieldSchema, FilterConfig, FilterTag, FormatPreset, FormatterConfig, FormulaDefinition, FormulaParameterSchema, FormulaParams, FormulaTemplate, FormulaType, I18n, JsonEditorEvent, JsonValidationResult, MessagesLocalizationChange, NestedPropertyParams, NumberFormatterOptions, PercentageFormatterOptions, PraxisFilterWidgetEditorInputs, PraxisFilterWidgetEditorValue, PraxisTableWidgetEditorInputs, PraxisTableWidgetEditorValue, ResourcePathIntent, RowAction, RowExpansionChangeBase, RowExpansionChangeEvent, RowExpansionReasonCode, RowExpansionTrigger, StringFormatterOptions, TableApplyPlan, TableAuthoringDocument, TableBindings, Capability as TableComponentCapability, CapabilityCatalog as TableComponentCapabilityCatalog, CapabilityCategory as TableComponentCapabilityCategory, TableComponentEditChangeKind, TableComponentEditPlan, TableComponentEditPlanCompileResult, ValueKind as TableComponentValueKind, TableHorizontalScroll, TableProjectionContext, TableRichContentP0Node, TableRuntimeContext, TableValidationContext, ToolbarAction, ToolbarActionsChange, ValueKind$1 as ValueKind, ValueMappingPair };
package/package.json CHANGED
@@ -1,23 +1,23 @@
1
1
  {
2
2
  "name": "@praxisui/table",
3
- "version": "8.0.0-beta.20",
3
+ "version": "8.0.0-beta.21",
4
4
  "description": "Advanced data table for Angular (Praxis UI) with editing, filtering, sorting, virtualization, and settings panel integration.",
5
5
  "peerDependencies": {
6
6
  "@angular/common": "^20.0.0",
7
7
  "@angular/core": "^20.0.0",
8
- "@praxisui/ai": "^8.0.0-beta.20",
9
- "@praxisui/core": "^8.0.0-beta.20",
10
- "@praxisui/dynamic-fields": "^8.0.0-beta.20",
11
- "@praxisui/dynamic-form": "^8.0.0-beta.20",
12
- "@praxisui/metadata-editor": "^8.0.0-beta.20",
13
- "@praxisui/rich-content": "^8.0.0-beta.20",
14
- "@praxisui/settings-panel": "^8.0.0-beta.20",
15
- "@praxisui/table-rule-builder": "^8.0.0-beta.20",
8
+ "@praxisui/ai": "^8.0.0-beta.21",
9
+ "@praxisui/core": "^8.0.0-beta.21",
10
+ "@praxisui/dynamic-fields": "^8.0.0-beta.21",
11
+ "@praxisui/dynamic-form": "^8.0.0-beta.21",
12
+ "@praxisui/metadata-editor": "^8.0.0-beta.21",
13
+ "@praxisui/rich-content": "^8.0.0-beta.21",
14
+ "@praxisui/settings-panel": "^8.0.0-beta.21",
15
+ "@praxisui/table-rule-builder": "^8.0.0-beta.21",
16
16
  "@angular/cdk": "^20.0.0",
17
17
  "@angular/forms": "^20.0.0",
18
18
  "@angular/material": "^20.0.0",
19
19
  "@angular/router": "^20.0.0",
20
- "@praxisui/dialog": "^8.0.0-beta.20",
20
+ "@praxisui/dialog": "^8.0.0-beta.21",
21
21
  "rxjs": "~7.8.0"
22
22
  },
23
23
  "dependencies": {
@@ -321,6 +321,11 @@ Este arquivo foi adaptado para o padrao canonico atual sem remover conteudo tecn
321
321
 
322
322
  ### Toolbar contract
323
323
 
324
+ - Acoes globais de toolbar, row e bulk usam `effects[].kind = "global-action"` como envelope canonico de novo authoring.
325
+ O campo `globalAction` plano continua aceito como fallback compatibilidade, mas nao e a superficie preferida.
326
+ - `payloadExpr` e escape avancado explicito de `GlobalActionRef`; visual authoring deve preferir `payload` estruturado e
327
+ preservar `payloadExpr` existente apenas quando a mesma `actionId` for mantida.
328
+
324
329
  - O bloco `toolbar` continua parte do contrato público principal.
325
330
  - Use `toolbar.actions[]` para quick actions e `toolbar.search` para busca quando o host não injeta shell própria.
326
331
  - Para localizar paths específicos de toolbar, complemente a leitura com o `Appendix: JSON path index`.
@@ -673,6 +678,11 @@ Snippets curtos (prontos para cards de overview):
673
678
 
674
679
  ### Internal route global action
675
680
 
681
+ Configuracoes novas devem persistir a integracao em `effects[].globalAction`. O runtime e os validadores tambem
682
+ leem `globalAction` plano para documentos existentes, mas editores e AI manifest devem tratar esse campo como
683
+ compatibilidade. O adapter da Table preserva `payload`/`payloadExpr` ao reabrir e re-selecionar a mesma `actionId`,
684
+ e limpa payloads ao trocar de global action para evitar semantica cruzada.
685
+
676
686
  ```json
677
687
  {
678
688
  "actions": {
@@ -800,7 +810,7 @@ Frontend (UI):
800
810
  | `praxis-table-toolbar` | Barra superior/inferior com acoes, bulk e export | `toolbar`, `actions`, `export`, `behavior.filtering.*` |
801
811
  | `praxis-filter` | Filtro avancado acoplado a toolbar | `behavior.filtering.advancedFilters.*`, `behavior.filtering.debounceTime`, `resourcePath` |
802
812
  | `praxis-empty-state-card` | Estado inicial quando nao ha conexao remota | exibido quando nao ha `resourcePath` valido |
803
- | `praxis-ai-assistant` | Assistente opcional nos slots de toolbar | habilitado pelo runtime (nao exposto no JSON) |
813
+ | `PraxisAiAssistantShellComponent` | Copiloto semantico opcional nos slots de toolbar | habilitado pelo runtime com turn orchestration e contexto seguro (nao exposto no JSON) |
804
814
  | Angular Material + CDK | Base de tabela, menus, selecao e virtual scroll | `behavior.pagination.*`, `behavior.selection.*`, `behavior.virtualization.*`, `appearance.spacing.*` |
805
815
 
806
816
  Backend e contratos: