@praxisui/table 3.0.0-beta.9 → 5.0.0-beta.0

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,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { OnChanges, OnDestroy, EventEmitter, ElementRef, SimpleChanges, OnInit, AfterViewInit, DoCheck, DestroyRef, ChangeDetectorRef, NgZone, Provider, AfterContentInit } from '@angular/core';
2
+ import { OnDestroy, EventEmitter, ElementRef, OnInit, OnChanges, AfterViewInit, DoCheck, DestroyRef, ChangeDetectorRef, NgZone, SimpleChanges, Provider, AfterContentInit } from '@angular/core';
3
3
  import { ActivatedRoute } from '@angular/router';
4
4
  import { MatTable, MatTableDataSource } from '@angular/material/table';
5
5
  import { MatPaginator, PageEvent } from '@angular/material/paginator';
@@ -10,17 +10,17 @@ 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, GlobalConfigService, AsyncConfigStorage, FieldMetadata, SchemaIdParams, FormConfig, GenericCrudService, DynamicFormService, SchemaNormalizerService, ComponentKeyService, ComponentDocMeta, LoadingState, ColumnDefinition, ConnectionStorage, LoadingOrchestrator, PraxisLoadingRenderer, GlobalActionSpec, IconPickerService, SurfaceOpenPayload, GlobalActionField, TableConfigService, FieldDefinition, AiCapabilityCategory, AiValueKind, AiCapability, AiCapabilityCatalog } from '@praxisui/core';
14
- import { FunctionRegistry, DslParser } from '@praxisui/specification';
13
+ import { TableConfig, LoggerService, GlobalConfigService, AsyncConfigStorage, FieldMetadata, SchemaIdParams, FormConfig, GenericCrudService, DynamicFormService, SchemaNormalizerService, ComponentKeyService, ComponentDocMeta, LoadingState, RestApiLinks, ColumnDefinition, ConnectionStorage, ResourceDiscoveryService, LoadingOrchestrator, PraxisLoadingRenderer, ResourceActionCatalogItem, JsonLogicExpression, GlobalActionSpec, IconPickerService, SurfaceOpenPayload, GlobalActionField, FieldDefinition, PraxisJsonLogicService, TableConfigService, PraxisTextValue, PraxisAnalyticsProjection, PraxisDataQueryContext, ApiUrlConfig, AnalyticsSchemaContractService, AnalyticsPresentationResolver, AiCapabilityCategory, AiValueKind, AiCapability, AiCapabilityCatalog } from '@praxisui/core';
15
14
  import { FormGroup, FormControl, FormBuilder } from '@angular/forms';
16
15
  import { MatDialog } from '@angular/material/dialog';
17
16
  import { CdkOverlayOrigin, ConnectedPosition } from '@angular/cdk/overlay';
18
17
  import { PraxisDialog } from '@praxisui/dialog';
19
18
  import { MatTabChangeEvent } from '@angular/material/tabs';
20
- import * as _angular_material_paginator_d_Zo1cMMo4 from '@angular/material/paginator.d-Zo1cMMo4';
21
- import { MatCheckboxChange } from '@angular/material/checkbox';
22
19
  import * as _praxisui_table_rule_builder from '@praxisui/table-rule-builder';
23
20
  import { RuleEffectDefinition } from '@praxisui/table-rule-builder';
21
+ import { HttpClient } from '@angular/common/http';
22
+ import * as _angular_material_paginator_d_Zo1cMMo4 from '@angular/material/paginator.d-Zo1cMMo4';
23
+ import { MatCheckboxChange } from '@angular/material/checkbox';
24
24
 
25
25
  interface ActionLike {
26
26
  action?: string;
@@ -34,10 +34,9 @@ interface ActionLike {
34
34
  }
35
35
  declare function getActionId(action: ActionLike): string;
36
36
 
37
- declare class PraxisTableToolbar implements OnChanges, OnDestroy {
37
+ declare class PraxisTableToolbar implements OnDestroy {
38
38
  private hostRef;
39
39
  private logger?;
40
- private static dslRuntimeInstanceCounter;
41
40
  config?: TableConfig;
42
41
  backgroundColor: string | null;
43
42
  placement: 'header' | 'footer';
@@ -46,18 +45,14 @@ declare class PraxisTableToolbar implements OnChanges, OnDestroy {
46
45
  showEndActions: boolean;
47
46
  showMobileActions: boolean;
48
47
  showReset: boolean;
49
- dslContext: Record<string, any> | null;
50
- dslFunctionRegistry: FunctionRegistry<any> | null;
48
+ evaluationContext: Record<string, any> | null;
51
49
  toolbarAction: EventEmitter<{
52
50
  action: string;
53
51
  actionConfig?: any;
54
52
  }>;
55
53
  reset: EventEmitter<void>;
56
54
  readonly getActionId: typeof getActionId;
57
- private dslParser;
58
- private dslRuntimeRegistry;
59
- private readonly dslRuntimeContextKey;
60
- private readonly visibleWhenSpecCache;
55
+ private readonly jsonLogic;
61
56
  private readonly validToolbarActionTypes;
62
57
  private readonly warnedInvalidToolbarActionTypes;
63
58
  private readonly warnedMenuWithoutChildren;
@@ -68,9 +63,7 @@ declare class PraxisTableToolbar implements OnChanges, OnDestroy {
68
63
  private fallbackLogger?;
69
64
  private fallbackLoggerEnvironment;
70
65
  constructor(hostRef?: ElementRef<HTMLElement> | null, logger?: LoggerService | undefined);
71
- ngOnChanges(changes: SimpleChanges): void;
72
66
  ngOnDestroy(): void;
73
- private configureDslRuntime;
74
67
  private getNestedPropertyValue;
75
68
  private cloneForEmit;
76
69
  private getLogger;
@@ -94,12 +87,12 @@ declare class PraxisTableToolbar implements OnChanges, OnDestroy {
94
87
  private resolveVisibleToolbarAction;
95
88
  private isActionVisible;
96
89
  private evaluateVisibleWhen;
90
+ private isJsonLogicExpression;
97
91
  private resolveVisibleWhenFallback;
98
92
  private resolveVisibleWhenFallbackPolicy;
99
93
  private resolveRuntimeEnvironment;
100
94
  private isDiagnosticsEnvironment;
101
- private buildDslContext;
102
- private getKnownDslFields;
95
+ private buildEvaluationContext;
103
96
  private warnVisibleWhenFallback;
104
97
  private collectShortcutBindings;
105
98
  private resolveShortcutScope;
@@ -116,7 +109,7 @@ declare class PraxisTableToolbar implements OnChanges, OnDestroy {
116
109
  private sortActions;
117
110
  getExportIcon(format: string): string;
118
111
  static ɵfac: i0.ɵɵFactoryDeclaration<PraxisTableToolbar, [null, { optional: true; }]>;
119
- static ɵcmp: i0.ɵɵComponentDeclaration<PraxisTableToolbar, "praxis-table-toolbar", never, { "config": { "alias": "config"; "required": false; }; "backgroundColor": { "alias": "backgroundColor"; "required": false; }; "placement": { "alias": "placement"; "required": false; }; "showMain": { "alias": "showMain"; "required": false; }; "showActionsGroup": { "alias": "showActionsGroup"; "required": false; }; "showEndActions": { "alias": "showEndActions"; "required": false; }; "showMobileActions": { "alias": "showMobileActions"; "required": false; }; "showReset": { "alias": "showReset"; "required": false; }; "dslContext": { "alias": "dslContext"; "required": false; }; "dslFunctionRegistry": { "alias": "dslFunctionRegistry"; "required": false; }; }, { "toolbarAction": "toolbarAction"; "reset": "reset"; }, never, ["[advancedFilter]", "[toolbar]", "[end-actions]"], true, never>;
112
+ static ɵcmp: i0.ɵɵComponentDeclaration<PraxisTableToolbar, "praxis-table-toolbar", never, { "config": { "alias": "config"; "required": false; }; "backgroundColor": { "alias": "backgroundColor"; "required": false; }; "placement": { "alias": "placement"; "required": false; }; "showMain": { "alias": "showMain"; "required": false; }; "showActionsGroup": { "alias": "showActionsGroup"; "required": false; }; "showEndActions": { "alias": "showEndActions"; "required": false; }; "showMobileActions": { "alias": "showMobileActions"; "required": false; }; "showReset": { "alias": "showReset"; "required": false; }; "evaluationContext": { "alias": "evaluationContext"; "required": false; }; }, { "toolbarAction": "toolbarAction"; "reset": "reset"; }, never, ["[advancedFilter]", "[toolbar]", "[end-actions]"], true, never>;
120
113
  }
121
114
 
122
115
  type ColumnDataType$1 = 'date' | 'number' | 'currency' | 'percentage' | 'string' | 'boolean' | 'custom';
@@ -833,8 +826,20 @@ type RowActionRuntimeOptions = {
833
826
  payload?: any;
834
827
  actionConfig?: any;
835
828
  };
829
+ type RuntimeRowAction = {
830
+ id: string;
831
+ action: string;
832
+ label?: string;
833
+ icon?: string;
834
+ color?: string;
835
+ tooltip?: string;
836
+ disabled?: boolean;
837
+ overflow?: boolean;
838
+ __praxisDiscoveredAction?: ResourceActionCatalogItem;
839
+ __praxisCapabilityDenied?: boolean;
840
+ };
836
841
  type ExpansionDetailRuntimeStatus = 'idle' | 'loading' | 'ready' | 'error' | 'blocked';
837
- type ExpansionDetailResolvedSource = 'inline' | 'resource' | 'resourcePath' | 'fallback';
842
+ type ExpansionDetailResolvedSource = 'inline' | 'resource' | 'resourcePath' | 'hypermedia' | 'fallback';
838
843
  type ExpansionDetailViewState = {
839
844
  status: ExpansionDetailRuntimeStatus;
840
845
  schema: Record<string, unknown> | null;
@@ -854,13 +859,17 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
854
859
  private connectionStorage;
855
860
  private hostRef;
856
861
  private global;
862
+ private resourceDiscovery;
857
863
  private componentKeys;
858
864
  private loadingOrchestrator;
859
865
  private loadingRenderer?;
860
866
  private route?;
861
867
  private logger?;
862
- private static dslRuntimeInstanceCounter;
863
868
  private static readonly CELL_ANIMATION_CHANGE_CACHE_LIMIT;
869
+ private static readonly ROW_DISCOVERY_SUCCESS_CACHE_TTL_MS;
870
+ private static readonly ROW_DISCOVERY_ERROR_CACHE_TTL_MS;
871
+ private static readonly ROW_DISCOVERY_CACHE_LIMIT;
872
+ private static readonly ROW_DISCOVERY_MAX_CONCURRENT_REQUESTS;
864
873
  private static readonly ROW_ANIMATION_PRESETS;
865
874
  private static readonly ROW_ANIMATION_PRESET_ALIASES;
866
875
  config: TableConfig;
@@ -876,7 +885,6 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
876
885
  snoozeMs: number;
877
886
  autoOpenSettingsOnOutdated: boolean;
878
887
  crudContext: any;
879
- dslFunctionRegistry: FunctionRegistry<any> | null;
880
888
  filterCriteria: Record<string, any>;
881
889
  queryContext: PraxisDataQueryContextBridge | null;
882
890
  rowClick: EventEmitter<any>;
@@ -896,6 +904,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
896
904
  schemaStatusChange: EventEmitter<any>;
897
905
  metadataChange: EventEmitter<any>;
898
906
  loadingStateChange: EventEmitter<LoadingState>;
907
+ collectionLinksChange: EventEmitter<RestApiLinks | null>;
899
908
  paginator: MatPaginator;
900
909
  sort: MatSort;
901
910
  materialTable?: MatTable<any>;
@@ -940,6 +949,24 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
940
949
  private expansionDetailSourceByRowKey;
941
950
  private expansionDetailAbortByRowKey;
942
951
  private expansionDetailActiveTabByRowKey;
952
+ private rowCapabilitySnapshotByHref;
953
+ private rowCapabilityCachedAtByHref;
954
+ private rowCapabilityErrorHrefs;
955
+ private rowCapabilityErrorCachedAtByHref;
956
+ private rowCapabilityInFlightByHref;
957
+ private rowActionCatalogByHref;
958
+ private rowActionCachedAtByHref;
959
+ private rowActionErrorHrefs;
960
+ private rowActionErrorCachedAtByHref;
961
+ private rowActionInFlightByHref;
962
+ private rowDiscoveryMetricsByRel;
963
+ private rowContextRuntimeByRef;
964
+ private rowDiscoveryQueue;
965
+ private rowDiscoveryActiveRequests;
966
+ private rowDiscoveryEpoch;
967
+ private rowDiscoveryMarkForCheckScheduled;
968
+ private lastRowDiscoveryScopeKey;
969
+ private readonly i18n;
943
970
  private schemaFieldsSnapshot;
944
971
  private runtimeSchemaMeta;
945
972
  schemaError: boolean;
@@ -1019,13 +1046,9 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
1019
1046
  getSchemaFieldsSnapshot(): SchemaFieldHint[];
1020
1047
  aiAdapter: any;
1021
1048
  private aiAdapterLoadStarted;
1022
- styleSpecCache: Map<string, any>;
1023
- actionSpecCache: Map<string, any>;
1024
1049
  private computedContextCache;
1025
1050
  private computedFieldNames;
1026
- dslParser: DslParser<any>;
1027
- private dslRuntimeRegistry;
1028
- private readonly dslRuntimeContextKey;
1051
+ private readonly jsonLogic;
1029
1052
  private computedExpressionEvaluator;
1030
1053
  private resizeObserver;
1031
1054
  private removeViewportChangeListeners;
@@ -1069,8 +1092,8 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
1069
1092
  private filterConfigKey;
1070
1093
  private ensureConfigDefaults;
1071
1094
  private setShowToolbar;
1072
- private configureDslRuntime;
1073
- 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, componentKeys: ComponentKeyService, loadingOrchestrator: LoadingOrchestrator, loadingRenderer?: PraxisLoadingRenderer | undefined, route?: ActivatedRoute | undefined, logger?: LoggerService | undefined);
1095
+ private shouldExposeToolbar;
1096
+ 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, loadingRenderer?: PraxisLoadingRenderer | undefined, route?: ActivatedRoute | undefined, logger?: LoggerService | undefined);
1074
1097
  private ensureAiAdapterLoaded;
1075
1098
  private emitLoadingState;
1076
1099
  private buildLoadingContext;
@@ -1128,6 +1151,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
1128
1151
  private resolveExpansionDetailInlineSchema;
1129
1152
  private resolveExpansionDetailFromResource;
1130
1153
  private resolveExpansionDetailFromResourcePath;
1154
+ private resolveExpansionDetailFromHypermedia;
1131
1155
  private normalizeExpansionDetailSchemaCandidate;
1132
1156
  private sanitizeExpansionDetailSchema;
1133
1157
  private sanitizeExpansionDetailNodes;
@@ -1142,6 +1166,13 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
1142
1166
  private resolveExpansionContextValue;
1143
1167
  private buildExpansionContextRecord;
1144
1168
  private getExpansionFallbackMode;
1169
+ private loadExpansionHypermediaSnapshot;
1170
+ private buildExpansionHypermediaDetailSchema;
1171
+ private selectExpansionHypermediaPrimarySurface;
1172
+ private buildExpansionHypermediaOperationItems;
1173
+ private buildExpansionHypermediaWorkflowActionItems;
1174
+ private getExpansionHypermediaMessage;
1175
+ private describeExpansionHypermediaSurface;
1145
1176
  private getExpansionFallbackNodePolicy;
1146
1177
  private getExpansionAllowedNodesSet;
1147
1178
  private validateExpansionDetailRendererContract;
@@ -1278,6 +1309,58 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
1278
1309
  * Refined logic to reduce false positives
1279
1310
  */
1280
1311
  private inferFieldTypeFromFieldName;
1312
+ private clearRowDiscoveryRuntime;
1313
+ private buildRowDiscoveryScopeKey;
1314
+ private resetRowContextRuntimeState;
1315
+ private enqueueRowDiscoveryRequest;
1316
+ private drainRowDiscoveryQueue;
1317
+ private buildRowDiscoveryOptions;
1318
+ private getRowLinks;
1319
+ private resolveRowDiscoveryHref;
1320
+ private prefetchRowDiscovery;
1321
+ private ensureRowDiscovery;
1322
+ private ensureRowCapabilitySnapshot;
1323
+ private ensureRowActionCatalog;
1324
+ private getCachedRowCapabilitySnapshot;
1325
+ private hasResolvedRowActionCatalog;
1326
+ isRowDiscoveryPending(row: any): boolean;
1327
+ private getCachedRowActionCatalog;
1328
+ private shouldUseRowDiscovery;
1329
+ private shouldPrefetchRowDiscovery;
1330
+ private hasRowContextualDiscoveryEntryPoint;
1331
+ private hasRowContextualDiscoveryEntryPointRaw;
1332
+ hasRowOverflowMenuLoadingState(row: any): boolean;
1333
+ getRowOverflowMenuLoadingLabel(): string;
1334
+ hasRowOverflowMenuEmptyState(row: any): boolean;
1335
+ getRowOverflowMenuEmptyLabel(row: any): string;
1336
+ private getLegacyRowOverflowMenuEmptyLabel;
1337
+ private getRowDiscoveryMetricSnapshot;
1338
+ private createEmptyRowDiscoveryMetricSnapshot;
1339
+ private incrementRowDiscoveryMetric;
1340
+ private setRowDiscoveryLastResolvedAt;
1341
+ private resolveRowDiscoveryRuntimeStatus;
1342
+ private resolveRowDiscoveryRuntimeStatusRaw;
1343
+ private getRowContextRuntimeState;
1344
+ private buildRowContextRuntimeState;
1345
+ private resolveRowContextRuntimeValidUntil;
1346
+ private resolveRowDiscoveryRelValidUntil;
1347
+ private getRowDiscoveryPendingRowCount;
1348
+ private getRowDiscoveryDebugSnapshot;
1349
+ private hasFreshRowCapabilitySnapshot;
1350
+ private hasFreshRowActionCatalog;
1351
+ private hasFreshRowCapabilityError;
1352
+ private hasFreshRowActionError;
1353
+ private hasFreshRowDiscoveryEntry;
1354
+ private hasFreshRowDiscoveryError;
1355
+ private rememberRowCapabilitySnapshot;
1356
+ private rememberRowActionCatalog;
1357
+ private rememberRowCapabilityError;
1358
+ private rememberRowActionError;
1359
+ private clearRowCapabilityError;
1360
+ private clearRowActionError;
1361
+ private enforceRowDiscoveryCacheLimit;
1362
+ private pruneRowDiscoveryCaches;
1363
+ private pruneRowDiscoveryCache;
1281
1364
  private fetchData;
1282
1365
  private getEffectiveFilterCriteria;
1283
1366
  retryData(): void;
@@ -1310,9 +1393,11 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
1310
1393
  private evaluateStyleRule;
1311
1394
  private evaluateActionVisibilityCondition;
1312
1395
  private evaluateActionDisabledCondition;
1313
- /** Evaluate row action conditions using the same DSL runtime with explicit failure policy. */
1396
+ /** Evaluate row action conditions using the canonical JSON Logic runtime with explicit failure policy. */
1314
1397
  private evaluateActionCondition;
1315
1398
  private resolveRowVisibleWhenFailurePolicy;
1399
+ private isJsonLogicExpression;
1400
+ private hasConditionalExpression;
1316
1401
  private resolveRuntimeEnvironment;
1317
1402
  private isDiagnosticsRuntimeEnvironment;
1318
1403
  private logActionConditionFallback;
@@ -1380,7 +1465,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
1380
1465
  private isRowExpansionSupported;
1381
1466
  private enforceAppearanceSchemaGuards;
1382
1467
  private enforceUnsupportedFeatureGuards;
1383
- getToolbarDslContext(): Record<string, any>;
1468
+ getToolbarEvaluationContext(): Record<string, any>;
1384
1469
  getIconName(row: any, column: ColumnDefinition): string | null;
1385
1470
  getIconColor(_row: any, column: ColumnDefinition): string | null;
1386
1471
  getIconStyle(_row: any, column: ColumnDefinition): Record<string, string> | null;
@@ -1392,6 +1477,9 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
1392
1477
  */
1393
1478
  private evaluateValueExpr;
1394
1479
  private evaluateComputedValue;
1480
+ private hasCanonicalComputedExpression;
1481
+ private buildComputedRuleData;
1482
+ private resolveComputedDependencyValue;
1395
1483
  private evaluateLegacyExpression;
1396
1484
  private tryEvaluateLegacyConcat;
1397
1485
  private tryEvaluateLegacyTernary;
@@ -1516,6 +1604,8 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
1516
1604
  private emitMetadataChange;
1517
1605
  private emitSchemaStatus;
1518
1606
  getRowId(row: any): any;
1607
+ private reconcileSelectionAfterDataChange;
1608
+ private getComparableRowIdentity;
1519
1609
  getIdField(): string;
1520
1610
  private syncRuntimeSchemaMetaFromConfig;
1521
1611
  private getEffectiveMetadataSnapshot;
@@ -1549,15 +1639,33 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
1549
1639
  getInlineRowActions(row: any): any[];
1550
1640
  getOverflowRowActions(row: any): any[];
1551
1641
  hasOverflowRowActions(row: any): boolean;
1642
+ onRowOverflowMenuOpened(row: any): void;
1552
1643
  private getVisibleRowActions;
1644
+ private getResolvedRowActions;
1645
+ private buildResolvedRowActions;
1646
+ private splitVisibleRowActionsFromVisible;
1647
+ private decorateConfiguredRowAction;
1648
+ private getDiscoveredRowWorkflowActions;
1649
+ private getDiscoveredRowWorkflowActionsFromCatalog;
1650
+ private supportsRowCrudAction;
1651
+ private isCapabilityManagedCrudRowAction;
1652
+ private findItemWorkflowAction;
1653
+ private getUnavailableWorkflowMessage;
1654
+ private normalizeActionId;
1553
1655
  private isActionVisible;
1554
1656
  trackAction(index: number, item: any): any;
1555
1657
  isActionDisabled(action: any, row: any): boolean;
1658
+ getRowActionRuntimeOptions(action: RuntimeRowAction, row: any): RowActionRuntimeOptions | undefined;
1659
+ isWorkflowRowAction(action: RuntimeRowAction | any): boolean;
1660
+ isBlockedWorkflowRowAction(action: RuntimeRowAction | any, row: any): boolean;
1661
+ getActionTooltip(action: RuntimeRowAction | any, row: any): string | null;
1662
+ getRowMenuTooltip(row: any): string;
1556
1663
  getRowMenuButtonColor(): any;
1557
1664
  getRowMenuIcon(): string;
1665
+ private scheduleRowDiscoveryMarkForCheck;
1558
1666
  ngOnDestroy(): void;
1559
- static ɵfac: i0.ɵɵFactoryDeclaration<PraxisTable, [null, null, null, null, null, null, null, null, null, null, null, null, null, null, { optional: true; }, { optional: true; }, { optional: true; }]>;
1560
- 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; }; "dslFunctionRegistry": { "alias": "dslFunctionRegistry"; "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"; "columnReorder": "columnReorder"; "columnReorderAttempt": "columnReorderAttempt"; "beforeDelete": "beforeDelete"; "afterDelete": "afterDelete"; "deleteError": "deleteError"; "beforeBulkDelete": "beforeBulkDelete"; "afterBulkDelete": "afterBulkDelete"; "bulkDeleteError": "bulkDeleteError"; "schemaStatusChange": "schemaStatusChange"; "metadataChange": "metadataChange"; "loadingStateChange": "loadingStateChange"; }, ["toolbar", "projectedFilter"], ["[advancedFilter]", "[toolbar]", "[advancedFilter]", "[toolbar]", "[advancedFilter]", "[toolbar]"], true, never>;
1667
+ static ɵfac: i0.ɵɵFactoryDeclaration<PraxisTable, [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, { optional: true; }, { optional: true; }, { optional: true; }]>;
1668
+ 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"; "columnReorder": "columnReorder"; "columnReorderAttempt": "columnReorderAttempt"; "beforeDelete": "beforeDelete"; "afterDelete": "afterDelete"; "deleteError": "deleteError"; "beforeBulkDelete": "beforeBulkDelete"; "afterBulkDelete": "afterBulkDelete"; "bulkDeleteError": "bulkDeleteError"; "schemaStatusChange": "schemaStatusChange"; "metadataChange": "metadataChange"; "loadingStateChange": "loadingStateChange"; "collectionLinksChange": "collectionLinksChange"; }, ["toolbar", "projectedFilter"], ["[advancedFilter]", "[toolbar]", "[advancedFilter]", "[toolbar]", "[advancedFilter]", "[toolbar]"], true, never>;
1561
1669
  static ngAcceptInputType_enableCustomization: unknown;
1562
1670
  }
1563
1671
 
@@ -1796,6 +1904,10 @@ declare class ColumnsConfigEditorComponent implements OnInit, OnDestroy {
1796
1904
  duplicateConditionalOverride(index: number): void;
1797
1905
  onConditionalOverrideReorder(event: any): void;
1798
1906
  selectConditionalOverride(index: number): void;
1907
+ getJsonLogicText(value: JsonLogicExpression | null | undefined): string;
1908
+ getJsonLogicSummary(value: JsonLogicExpression | null | undefined): string;
1909
+ private parseJsonLogicText;
1910
+ setConditionalOverrideCondition(index: number, raw: string): void;
1799
1911
  getOverrideField(path: string): any;
1800
1912
  setOverrideField(path: string, value: any): void;
1801
1913
  onOverrideTypeChange(ov: any, val: string): void;
@@ -1899,6 +2011,7 @@ declare class ColumnsConfigEditorComponent implements OnInit, OnDestroy {
1899
2011
  private ensureRenderer;
1900
2012
  private _ensureKind;
1901
2013
  getRendererProp(kind: string, path: string): any;
2014
+ setRendererJsonLogicProp(kind: string, path: string, raw: string): void;
1902
2015
  setRendererProp(kind: string, path: string, value: any): void;
1903
2016
  private _deepClone;
1904
2017
  hasSelectedRenderer(): boolean;
@@ -2092,7 +2205,7 @@ interface ToolbarAction {
2092
2205
  icon?: string;
2093
2206
  type: 'button' | 'icon' | 'fab' | 'menu';
2094
2207
  color?: 'primary' | 'accent' | 'warn';
2095
- /** Aparência do botão Material: filled (flat), outlined (stroked), elevated (raised), text, tonal */
2208
+ /** Material button appearance: filled (flat), outlined (stroked), elevated (raised), text, tonal */
2096
2209
  appearance?: 'filled' | 'outlined' | 'elevated' | 'text' | 'tonal';
2097
2210
  action: string;
2098
2211
  position: 'start' | 'end';
@@ -2540,13 +2653,271 @@ declare class FilterSettingsComponent implements OnChanges, AfterViewInit, OnDes
2540
2653
  static ɵcmp: i0.ɵɵComponentDeclaration<FilterSettingsComponent, "filter-settings", never, { "metadata": { "alias": "metadata"; "required": false; }; "metadataSource": { "alias": "metadataSource"; "required": false; }; "metadataLoading": { "alias": "metadataLoading"; "required": false; }; "metadataErrorMsg": { "alias": "metadataErrorMsg"; "required": false; }; "settings": { "alias": "settings"; "required": false; }; "configKey": { "alias": "configKey"; "required": false; }; }, { "settingsChange": "settingsChange"; }, never, never, true, never>;
2541
2654
  }
2542
2655
 
2656
+ type ColumnDataType = 'string' | 'number' | 'date' | 'boolean' | 'currency' | 'percentage' | 'custom';
2657
+
2658
+ type OperatorKey = '==' | '!=' | '<' | '<=' | '>' | '>=' | 'contains' | 'startsWith' | 'endsWith' | 'matches' | 'not matches' | 'in' | 'not in' | 'is empty' | 'is not empty' | 'between' | 'is today' | 'in last' | 'weekday is' | 'is true' | 'is false' | 'contains all' | 'contains any' | 'length ==' | 'length >' | 'length <' | 'jsonPath matches' | 'has key' | 'key ==' | 'id ==' | 'id in' | 'has property';
2659
+ interface OperatorSpec {
2660
+ key: OperatorKey;
2661
+ label: string;
2662
+ icon?: string;
2663
+ description?: string;
2664
+ }
2665
+ declare class OperatorsRegistryService {
2666
+ /** Returns the list of operator specs supported for a given data type. */
2667
+ getForType(type: ColumnDataType | 'enum' | 'array' | 'json' | 'relational'): OperatorSpec[];
2668
+ get keys(): OperatorKey[];
2669
+ private readonly stringOps;
2670
+ private readonly numberOps;
2671
+ private readonly dateOps;
2672
+ private readonly booleanOps;
2673
+ private readonly enumOps;
2674
+ private readonly arrayOps;
2675
+ private readonly jsonOps;
2676
+ private readonly relationalOps;
2677
+ static ɵfac: i0.ɵɵFactoryDeclaration<OperatorsRegistryService, never>;
2678
+ static ɵprov: i0.ɵɵInjectableDeclaration<OperatorsRegistryService>;
2679
+ }
2680
+
2681
+ type GroupOp = 'AND' | 'OR' | 'NOT';
2682
+ interface RuleAtom {
2683
+ field: string;
2684
+ operator: string;
2685
+ value?: any;
2686
+ options?: Record<string, any>;
2687
+ }
2688
+ interface RuleGroup {
2689
+ op: GroupOp;
2690
+ conditions: RuleAtom[];
2691
+ groups?: RuleGroup[];
2692
+ }
2693
+ type StructuredRuleCondition = JsonLogicExpression | null;
2694
+ declare class RuleCompilerService {
2695
+ /**
2696
+ * Compiles a rule group into a single textual expression string, adding
2697
+ * parentheses according to grouping and operator precedence.
2698
+ */
2699
+ compileGroup(group: RuleGroup): string;
2700
+ /** Compiles a single rule atom to a textual expression. */
2701
+ compileAtom(atom: RuleAtom): string;
2702
+ compileGroupToJsonLogic(group: RuleGroup): StructuredRuleCondition;
2703
+ compileAtomToJsonLogic(atom: RuleAtom): JsonLogicExpression | null;
2704
+ private stringify;
2705
+ private toJsonLogicValue;
2706
+ private toList;
2707
+ static ɵfac: i0.ɵɵFactoryDeclaration<RuleCompilerService, never>;
2708
+ static ɵprov: i0.ɵɵInjectableDeclaration<RuleCompilerService>;
2709
+ }
2710
+
2711
+ type RuleItem = {
2712
+ condition: JsonLogicExpression;
2713
+ cssClass?: string;
2714
+ style?: Record<string, string>;
2715
+ description?: string;
2716
+ effects?: _praxisui_table_rule_builder.RuleEffectDefinition;
2717
+ enabled?: boolean;
2718
+ };
2719
+ declare class TableRulesEditorComponent implements OnChanges, OnInit, OnDestroy {
2720
+ private cdr;
2721
+ private registry;
2722
+ private compiler;
2723
+ private jsonLogic;
2724
+ private dynamicForm;
2725
+ private crud?;
2726
+ private get jsonLogicValidator();
2727
+ private readonly i18n;
2728
+ config: TableConfig;
2729
+ resourcePath?: string;
2730
+ fields?: FieldDefinition[] | null;
2731
+ i18nRules?: Partial<Record<string, string>>;
2732
+ configChange: EventEmitter<_praxisui_core.TableConfigModern>;
2733
+ scope: 'row' | 'column';
2734
+ selectedColumnField: string | null;
2735
+ draftCondition: string;
2736
+ draftCssClass: string;
2737
+ draftStyleText: string;
2738
+ sanitizedStyle: Record<string, string>;
2739
+ manualMode: boolean;
2740
+ manualErrors: string[];
2741
+ testSummary: string;
2742
+ editIndex: number;
2743
+ get currentRules(): RuleItem[];
2744
+ set currentRules(v: RuleItem[]);
2745
+ rulesRow: RuleItem[];
2746
+ rulesColumn: RuleItem[];
2747
+ objectKeys: {
2748
+ (o: object): string[];
2749
+ (o: {}): string[];
2750
+ };
2751
+ dynamicValueForm: FormGroup;
2752
+ dynamicValueMetas: FieldMetadata[];
2753
+ effectsValue?: RuleEffectDefinition;
2754
+ dynamicValueActive: boolean;
2755
+ private dynamicValueSub?;
2756
+ private testSummaryTimer;
2757
+ private readonly legacyStyleAllowList;
2758
+ basicFieldType: 'enum' | 'array' | 'json' | 'relational' | 'string' | 'number' | 'date' | 'boolean' | 'currency' | 'percentage' | 'custom';
2759
+ noValueOperator: boolean;
2760
+ i18nValuePlaceholder: string;
2761
+ enumOptions: Array<{
2762
+ value: any;
2763
+ label: string;
2764
+ }>;
2765
+ private updateDerivedUiProps;
2766
+ /** Enable verbose console logging for debugging value editor behavior */
2767
+ debugLogs: boolean;
2768
+ debugLevel: 'log' | 'info' | 'debug';
2769
+ private dbg;
2770
+ /** Log a summary table of field metadata and column info for diagnostics */
2771
+ private logFieldMetasContext;
2772
+ /** Log a focused view for a single field */
2773
+ private logSingleFieldMeta;
2774
+ private logFieldChoices;
2775
+ t(key: string): string;
2776
+ constructor(cdr: ChangeDetectorRef, registry: OperatorsRegistryService, compiler: RuleCompilerService, jsonLogic: PraxisJsonLogicService, dynamicForm: DynamicFormService, crud?: GenericCrudService<any> | undefined);
2777
+ ngOnInit(): void;
2778
+ ngOnChanges(changes: SimpleChanges): void;
2779
+ ngOnDestroy(): void;
2780
+ get columnFields(): string[];
2781
+ getOperatorsForField(fieldName: string | null): string[];
2782
+ onScopeChange(scope: 'row' | 'column'): void;
2783
+ onColumnSelect(field: string): void;
2784
+ private initFromConfig;
2785
+ private loadColumnRules;
2786
+ rebuildCondition(): void;
2787
+ onDraftChange(): void;
2788
+ applyTextPreset(preset: string): void;
2789
+ generateSampleData(): void;
2790
+ runTest(): void;
2791
+ onRelSearch(ev: any): void;
2792
+ clearRelSelection(): void;
2793
+ onRelSelectSingle(opt: any): void;
2794
+ onRelAddMulti(opt: any): void;
2795
+ removeRelMulti(i: number): void;
2796
+ private fetchRelOptions;
2797
+ private getRelationalConfig;
2798
+ validateDraft(): void;
2799
+ canCommitDraft(): boolean;
2800
+ private toPersistedCellClassAndStyle;
2801
+ addOrUpdateRule(): void;
2802
+ editRule(index: number): void;
2803
+ removeRule(index: number): void;
2804
+ duplicateRule(index: number): void;
2805
+ onRuleToggle(): void;
2806
+ buildAppliedConfig(baseConfig?: TableConfig): TableConfig;
2807
+ onApply(): void;
2808
+ isValid(): boolean;
2809
+ onExportRules(): void;
2810
+ onImportRules(): void;
2811
+ private sanitizeRule;
2812
+ getAnimationLabel(r: RuleItem): string | null;
2813
+ private normalizeRendererAnimation;
2814
+ private buildRendererOverrideFromRule;
2815
+ private buildLegacyRendererOverrideFromRule;
2816
+ private buildRowRendererOverrideFromRule;
2817
+ private stringifyValue;
2818
+ getConditionLabel(condition: RuleItem['condition'] | null | undefined): string;
2819
+ private buildPersistedCondition;
2820
+ private sanitizePersistedCondition;
2821
+ private parseLegacyStyle;
2822
+ private normalizeLegacyStyleObject;
2823
+ resetDraft(): void;
2824
+ private parseManualCondition;
2825
+ private tryParseManualCondition;
2826
+ private validateManualCondition;
2827
+ private getInvalidVarPaths;
2828
+ private collectVarPaths;
2829
+ private isKnownJsonLogicPath;
2830
+ private isManualExpressionCandidate;
2831
+ private looksLikeLegacyExpression;
2832
+ private toManualValidationMessage;
2833
+ basicField: string;
2834
+ basicOperator: string;
2835
+ basicValue: any;
2836
+ basicMin: any;
2837
+ basicMax: any;
2838
+ basicListCsv: string;
2839
+ basicDate: Date | null;
2840
+ basicDateStart: Date | null;
2841
+ basicDateEnd: Date | null;
2842
+ basicEnumValue: string | number | null;
2843
+ basicEnumValues: Array<string | number>;
2844
+ basicLength: number | null;
2845
+ relationalSelected: {
2846
+ id: any;
2847
+ label: string;
2848
+ raw: any;
2849
+ } | null;
2850
+ relationalSelectedMulti: Array<{
2851
+ id: any;
2852
+ label: string;
2853
+ raw: any;
2854
+ }>;
2855
+ relationalOptions: Array<{
2856
+ id: any;
2857
+ label: string;
2858
+ raw: any;
2859
+ }>;
2860
+ basicRelPath: string;
2861
+ private relSearchTerm;
2862
+ private relCache;
2863
+ basicLastN: number | null;
2864
+ basicLastUnit: 'days' | 'weeks' | 'months';
2865
+ basicWeekdays: number[];
2866
+ weekdayOptions: {
2867
+ value: number;
2868
+ label: string;
2869
+ }[];
2870
+ basicJsonPath: string;
2871
+ basicJsonPattern: string;
2872
+ basicJsonKey: string;
2873
+ basicJsonExpected: any;
2874
+ draftGroup: RuleGroup;
2875
+ editAtomIndex: number;
2876
+ activeGroupTarget: 'root' | number;
2877
+ onEffectsChange(v: RuleEffectDefinition): void;
2878
+ private hasRuleEffectsValue;
2879
+ getFieldType(fieldName: string | null): 'enum' | 'array' | 'json' | 'relational' | 'string' | 'number' | 'date' | 'boolean' | 'currency' | 'percentage' | 'custom';
2880
+ getEnumOptions(fieldName: string | null): Array<{
2881
+ value: any;
2882
+ label: string;
2883
+ }>;
2884
+ isNoValueOperator(op: string): boolean;
2885
+ getValuePlaceholder(): string;
2886
+ getI18nValuePlaceholder(): string;
2887
+ private toIsoDateString;
2888
+ setManualMode(v: boolean): void;
2889
+ onBasicFieldChange(_val: string): void;
2890
+ onBasicOperatorChange(_val: string): void;
2891
+ private refreshDynamicValueInitialValueOnly;
2892
+ refreshDynamicValueHost(): void;
2893
+ private buildAtomFromBasic;
2894
+ canBuildAtom(): boolean;
2895
+ onAddOrUpdateAtom(): void;
2896
+ editAtom(index: number): void;
2897
+ removeAtom(index: number): void;
2898
+ resetAtomEdit(): void;
2899
+ private focusAddCondition;
2900
+ clearGroup(): void;
2901
+ onDropCondition(evt: CdkDragDrop<RuleAtom[]>): void;
2902
+ updateDraftFromGroup(): void;
2903
+ getAtomPreview(a: RuleAtom): string;
2904
+ addSubgroup(): void;
2905
+ removeSubgroup(index: number): void;
2906
+ getGroupPreview(g: RuleGroup): string;
2907
+ private getActiveGroupRef;
2908
+ static ɵfac: i0.ɵɵFactoryDeclaration<TableRulesEditorComponent, [null, null, null, null, null, { optional: true; }]>;
2909
+ static ɵcmp: i0.ɵɵComponentDeclaration<TableRulesEditorComponent, "table-rules-editor", never, { "config": { "alias": "config"; "required": false; }; "resourcePath": { "alias": "resourcePath"; "required": false; }; "fields": { "alias": "fields"; "required": false; }; "i18nRules": { "alias": "i18nRules"; "required": false; }; "debugLogs": { "alias": "debugLogs"; "required": false; }; "debugLevel": { "alias": "debugLevel"; "required": false; }; }, { "configChange": "configChange"; }, never, never, true, never>;
2910
+ }
2911
+
2543
2912
  type ResourcePathIntent = 'set' | 'clear' | 'unchanged';
2544
2913
  type EffectiveDataMode = 'remote' | 'local' | 'empty';
2545
2914
  declare class PraxisTableConfigEditor implements OnInit, OnDestroy, SettingsValueProvider {
2546
2915
  private cdr;
2547
2916
  private configService;
2917
+ private readonly i18n;
2548
2918
  filterSettingsEditor?: FilterSettingsComponent;
2549
2919
  behaviorEditor?: BehaviorConfigEditorComponent;
2920
+ rulesEditor?: TableRulesEditorComponent;
2550
2921
  set crudEditorSetter(ref: any);
2551
2922
  private crudEditor?;
2552
2923
  private _crudSubscribed;
@@ -2609,7 +2980,6 @@ declare class PraxisTableConfigEditor implements OnInit, OnDestroy, SettingsValu
2609
2980
  private readonly panelData;
2610
2981
  private readonly crudService;
2611
2982
  private readonly panelRef;
2612
- private readonly i18n;
2613
2983
  constructor(cdr: ChangeDetectorRef, configService: TableConfigService);
2614
2984
  tx(key: string, fallback: string): string;
2615
2985
  private isDebugLoggingEnabled;
@@ -2647,6 +3017,7 @@ declare class PraxisTableConfigEditor implements OnInit, OnDestroy, SettingsValu
2647
3017
  */
2648
3018
  private deepEqual;
2649
3019
  getSettingsValue(): any;
3020
+ private syncRulesFromEditor;
2650
3021
  private syncFilterSettingsFromEditor;
2651
3022
  private hasAdvancedSettingsProperty;
2652
3023
  private syncLastKnownFilterSettingsFromEditedConfig;
@@ -2770,6 +3141,78 @@ declare class DataFormatterComponent implements OnInit, OnChanges {
2770
3141
  static ɵcmp: i0.ɵɵComponentDeclaration<DataFormatterComponent, "data-formatter", never, { "columnType": { "alias": "columnType"; "required": false; }; "currentFormat": { "alias": "currentFormat"; "required": false; }; }, { "formatChange": "formatChange"; }, never, never, true, never>;
2771
3142
  }
2772
3143
 
3144
+ type AnalyticsTableRow = Record<string, string | number | boolean | null>;
3145
+ type AnalyticsTableContractSource = 'remote' | 'fallback';
3146
+ interface AnalyticsTableViewModel {
3147
+ config: TableConfig;
3148
+ data: AnalyticsTableRow[];
3149
+ }
3150
+ interface AnalyticsTableContractDefinition<TKey extends string = string> {
3151
+ key: TKey;
3152
+ projectionId: string;
3153
+ path: string;
3154
+ title: PraxisTextValue;
3155
+ subtitle?: PraxisTextValue;
3156
+ fallbackProjection: PraxisAnalyticsProjection;
3157
+ fallbackRows?: AnalyticsTableRow[];
3158
+ }
3159
+ interface AnalyticsTableContractLoadOptions<TKey extends string = string> {
3160
+ cacheNamespace?: string;
3161
+ queryContexts?: Partial<Record<TKey, PraxisDataQueryContext | null>>;
3162
+ }
3163
+ interface AnalyticsTableContractLoadResult<TKey extends string = string> {
3164
+ views: Record<TKey, AnalyticsTableViewModel>;
3165
+ sources: Record<TKey, AnalyticsTableContractSource>;
3166
+ errors: Partial<Record<TKey, string>>;
3167
+ }
3168
+
3169
+ interface AnalyticsTableConfigAdapterOptions {
3170
+ title?: PraxisTextValue;
3171
+ subtitle?: PraxisTextValue;
3172
+ }
3173
+ declare class AnalyticsTableConfigAdapterService {
3174
+ toTableConfig(projection: PraxisAnalyticsProjection, options?: AnalyticsTableConfigAdapterOptions): TableConfig;
3175
+ private buildColumns;
3176
+ private getDisplayMetrics;
3177
+ private resolveTextValue;
3178
+ static ɵfac: i0.ɵɵFactoryDeclaration<AnalyticsTableConfigAdapterService, never>;
3179
+ static ɵprov: i0.ɵɵInjectableDeclaration<AnalyticsTableConfigAdapterService>;
3180
+ }
3181
+
3182
+ declare class AnalyticsTableStatsApiService {
3183
+ private readonly http;
3184
+ private readonly apiUrl;
3185
+ private readonly statsBuilder;
3186
+ constructor(http: HttpClient, apiUrl: ApiUrlConfig);
3187
+ execute(projection: PraxisAnalyticsProjection, queryContext?: PraxisDataQueryContext | null): Promise<AnalyticsTableRow[]>;
3188
+ private toTableRows;
3189
+ private resolveTimeSeriesCategory;
3190
+ private resolveBucketCategory;
3191
+ private projectMetricValues;
3192
+ private resolveMetricValue;
3193
+ private buildStatsUrl;
3194
+ private applyQueryContext;
3195
+ private normalizeError;
3196
+ static ɵfac: i0.ɵɵFactoryDeclaration<AnalyticsTableStatsApiService, never>;
3197
+ static ɵprov: i0.ɵɵInjectableDeclaration<AnalyticsTableStatsApiService>;
3198
+ }
3199
+
3200
+ declare class AnalyticsTableContractService {
3201
+ private readonly analyticsSchema;
3202
+ private readonly resolver;
3203
+ private readonly configAdapter;
3204
+ private readonly statsApi;
3205
+ constructor(analyticsSchema: AnalyticsSchemaContractService, resolver: AnalyticsPresentationResolver, configAdapter: AnalyticsTableConfigAdapterService, statsApi: AnalyticsTableStatsApiService);
3206
+ buildBootstrapTableViews<TKey extends string>(definitions: readonly AnalyticsTableContractDefinition<TKey>[]): Record<TKey, AnalyticsTableViewModel>;
3207
+ loadTableViews<TKey extends string>(definitions: readonly AnalyticsTableContractDefinition<TKey>[], options?: AnalyticsTableContractLoadOptions<TKey>): Promise<AnalyticsTableContractLoadResult<TKey>>;
3208
+ private loadSingleTableView;
3209
+ private buildTableView;
3210
+ private assertAnalyticTableProjection;
3211
+ private resolveQueryContext;
3212
+ static ɵfac: i0.ɵɵFactoryDeclaration<AnalyticsTableContractService, never>;
3213
+ static ɵprov: i0.ɵɵInjectableDeclaration<AnalyticsTableContractService>;
3214
+ }
3215
+
2773
3216
  declare function createTableAuthoringDocument(source: {
2774
3217
  config?: unknown;
2775
3218
  bindings?: unknown;
@@ -2833,276 +3276,6 @@ declare class ValueMappingEditorComponent implements OnInit, OnChanges {
2833
3276
  static ɵcmp: i0.ɵɵComponentDeclaration<ValueMappingEditorComponent, "value-mapping-editor", never, { "currentMapping": { "alias": "currentMapping"; "required": false; }; "keyInputType": { "alias": "keyInputType"; "required": false; }; "labelKey": { "alias": "labelKey"; "required": false; }; "labelValue": { "alias": "labelValue"; "required": false; }; }, { "mappingChange": "mappingChange"; }, never, never, true, never>;
2834
3277
  }
2835
3278
 
2836
- type ColumnDataType = 'string' | 'number' | 'date' | 'boolean' | 'currency' | 'percentage' | 'custom';
2837
-
2838
- type OperatorKey = '==' | '!=' | '<' | '<=' | '>' | '>=' | 'contains' | 'startsWith' | 'endsWith' | 'matches' | 'not matches' | 'in' | 'not in' | 'is empty' | 'is not empty' | 'between' | 'is today' | 'in last' | 'weekday is' | 'is true' | 'is false' | 'contains all' | 'contains any' | 'length ==' | 'length >' | 'length <' | 'jsonPath matches' | 'has key' | 'key ==' | 'id ==' | 'id in' | 'has property';
2839
- interface OperatorSpec {
2840
- key: OperatorKey;
2841
- label: string;
2842
- icon?: string;
2843
- description?: string;
2844
- }
2845
- declare class OperatorsRegistryService {
2846
- /** Returns the list of operator specs supported for a given data type. */
2847
- getForType(type: ColumnDataType | 'enum' | 'array' | 'json' | 'relational'): OperatorSpec[];
2848
- get keys(): OperatorKey[];
2849
- private readonly stringOps;
2850
- private readonly numberOps;
2851
- private readonly dateOps;
2852
- private readonly booleanOps;
2853
- private readonly enumOps;
2854
- private readonly arrayOps;
2855
- private readonly jsonOps;
2856
- private readonly relationalOps;
2857
- static ɵfac: i0.ɵɵFactoryDeclaration<OperatorsRegistryService, never>;
2858
- static ɵprov: i0.ɵɵInjectableDeclaration<OperatorsRegistryService>;
2859
- }
2860
-
2861
- type GroupOp = 'AND' | 'OR' | 'NOT';
2862
- interface RuleAtom {
2863
- field: string;
2864
- operator: string;
2865
- value?: any;
2866
- options?: Record<string, any>;
2867
- }
2868
- interface RuleGroup {
2869
- op: GroupOp;
2870
- conditions: RuleAtom[];
2871
- groups?: RuleGroup[];
2872
- }
2873
- declare class RuleCompilerService {
2874
- /**
2875
- * Compiles a rule group into a single DSL expression string, adding
2876
- * parentheses according to grouping and operator precedence.
2877
- */
2878
- compileGroup(group: RuleGroup): string;
2879
- /** Compiles a single rule atom to DSL. */
2880
- compileAtom(atom: RuleAtom): string;
2881
- private stringify;
2882
- static ɵfac: i0.ɵɵFactoryDeclaration<RuleCompilerService, never>;
2883
- static ɵprov: i0.ɵɵInjectableDeclaration<RuleCompilerService>;
2884
- }
2885
-
2886
- type RuleItem = {
2887
- condition: string;
2888
- cssClass?: string;
2889
- style?: Record<string, string>;
2890
- description?: string;
2891
- effects?: _praxisui_table_rule_builder.RuleEffectDefinition;
2892
- enabled?: boolean;
2893
- };
2894
- declare class TableRulesEditorComponent implements OnChanges, OnInit, OnDestroy {
2895
- private cdr;
2896
- private registry;
2897
- private compiler;
2898
- private dynamicForm;
2899
- private crud?;
2900
- private static runtimeRegistryInstanceCounter;
2901
- private readonly i18n;
2902
- config: TableConfig;
2903
- resourcePath?: string;
2904
- fields?: FieldDefinition[] | null;
2905
- i18nRules?: Partial<Record<string, string>>;
2906
- dslFunctionRegistry: FunctionRegistry<any> | null;
2907
- configChange: EventEmitter<_praxisui_core.TableConfigModern>;
2908
- scope: 'row' | 'column';
2909
- selectedColumnField: string | null;
2910
- draftCondition: string;
2911
- draftCssClass: string;
2912
- draftStyleText: string;
2913
- sanitizedStyle: Record<string, string>;
2914
- dslMode: boolean;
2915
- dslErrors: string[];
2916
- testSummary: string;
2917
- editIndex: number;
2918
- get currentRules(): RuleItem[];
2919
- set currentRules(v: RuleItem[]);
2920
- rulesRow: RuleItem[];
2921
- rulesColumn: RuleItem[];
2922
- private parser;
2923
- private runtimeFunctionRegistry;
2924
- private readonly runtimeRegistryContextKey;
2925
- objectKeys: {
2926
- (o: object): string[];
2927
- (o: {}): string[];
2928
- };
2929
- dynamicValueForm: FormGroup;
2930
- dynamicValueMetas: FieldMetadata[];
2931
- effectsValue?: RuleEffectDefinition;
2932
- dynamicValueActive: boolean;
2933
- private dynamicValueSub?;
2934
- private testSummaryTimer;
2935
- private readonly legacyStyleAllowList;
2936
- basicFieldType: 'enum' | 'array' | 'json' | 'relational' | 'string' | 'number' | 'date' | 'boolean' | 'currency' | 'percentage' | 'custom';
2937
- noValueOperator: boolean;
2938
- i18nValuePlaceholder: string;
2939
- enumOptions: Array<{
2940
- value: any;
2941
- label: string;
2942
- }>;
2943
- private updateDerivedUiProps;
2944
- /** Enable verbose console logging for debugging value editor behavior */
2945
- debugLogs: boolean;
2946
- debugLevel: 'log' | 'info' | 'debug';
2947
- private dbg;
2948
- /** Log a summary table of field metadata and column info for diagnostics */
2949
- private logFieldMetasContext;
2950
- /** Log a focused view for a single field */
2951
- private logSingleFieldMeta;
2952
- private logFieldChoices;
2953
- t(key: string): string;
2954
- constructor(cdr: ChangeDetectorRef, registry: OperatorsRegistryService, compiler: RuleCompilerService, dynamicForm: DynamicFormService, crud?: GenericCrudService<any> | undefined);
2955
- private configureDslRuntime;
2956
- ngOnInit(): void;
2957
- ngOnChanges(changes: SimpleChanges): void;
2958
- ngOnDestroy(): void;
2959
- get columnFields(): string[];
2960
- getOperatorsForField(fieldName: string | null): string[];
2961
- onScopeChange(_s: 'row' | 'column'): void;
2962
- onColumnSelect(_field: string): void;
2963
- private initFromConfig;
2964
- private loadColumnRules;
2965
- rebuildCondition(): void;
2966
- onDraftChange(): void;
2967
- applyTextPreset(preset: string): void;
2968
- generateSampleData(): void;
2969
- runTest(): void;
2970
- onRelSearch(ev: any): void;
2971
- clearRelSelection(): void;
2972
- onRelSelectSingle(opt: any): void;
2973
- onRelAddMulti(opt: any): void;
2974
- removeRelMulti(i: number): void;
2975
- private fetchRelOptions;
2976
- private getRelationalConfig;
2977
- validateDraft(): void;
2978
- canCommitDraft(): boolean;
2979
- private toPersistedCellClassAndStyle;
2980
- addOrUpdateRule(): void;
2981
- editRule(index: number): void;
2982
- removeRule(index: number): void;
2983
- duplicateRule(index: number): void;
2984
- onRuleToggle(): void;
2985
- onApply(): void;
2986
- isValid(): boolean;
2987
- onExportRules(): void;
2988
- onImportRules(): void;
2989
- private sanitizeRule;
2990
- private getKnownDslFields;
2991
- getAnimationLabel(r: RuleItem): string | null;
2992
- private normalizeRendererAnimation;
2993
- private buildRendererOverrideFromRule;
2994
- private buildLegacyRendererOverrideFromRule;
2995
- private buildRowRendererOverrideFromRule;
2996
- private stringifyValue;
2997
- private parseLegacyStyle;
2998
- private normalizeLegacyStyleObject;
2999
- private extractIdentifiers;
3000
- resetDraft(): void;
3001
- basicField: string;
3002
- basicOperator: string;
3003
- basicValue: any;
3004
- basicMin: any;
3005
- basicMax: any;
3006
- basicListCsv: string;
3007
- basicDate: Date | null;
3008
- basicDateStart: Date | null;
3009
- basicDateEnd: Date | null;
3010
- basicEnumValue: string | number | null;
3011
- basicEnumValues: Array<string | number>;
3012
- basicLength: number | null;
3013
- relationalSelected: {
3014
- id: any;
3015
- label: string;
3016
- raw: any;
3017
- } | null;
3018
- relationalSelectedMulti: Array<{
3019
- id: any;
3020
- label: string;
3021
- raw: any;
3022
- }>;
3023
- relationalOptions: Array<{
3024
- id: any;
3025
- label: string;
3026
- raw: any;
3027
- }>;
3028
- basicRelPath: string;
3029
- private relSearchTerm;
3030
- private relCache;
3031
- basicLastN: number | null;
3032
- basicLastUnit: 'days' | 'weeks' | 'months';
3033
- basicWeekdays: number[];
3034
- weekdayOptions: {
3035
- value: number;
3036
- label: string;
3037
- }[];
3038
- basicJsonPath: string;
3039
- basicJsonPattern: string;
3040
- basicJsonKey: string;
3041
- basicJsonExpected: any;
3042
- draftGroup: RuleGroup;
3043
- editAtomIndex: number;
3044
- activeGroupTarget: 'root' | number;
3045
- onEffectsChange(v: RuleEffectDefinition): void;
3046
- private hasRuleEffectsValue;
3047
- getFieldType(fieldName: string | null): 'enum' | 'array' | 'json' | 'relational' | 'string' | 'number' | 'date' | 'boolean' | 'currency' | 'percentage' | 'custom';
3048
- getEnumOptions(fieldName: string | null): Array<{
3049
- value: any;
3050
- label: string;
3051
- }>;
3052
- isNoValueOperator(op: string): boolean;
3053
- getValuePlaceholder(): string;
3054
- getI18nValuePlaceholder(): string;
3055
- private toIsoDateString;
3056
- setDsl(v: boolean): void;
3057
- onBasicFieldChange(_val: string): void;
3058
- onBasicOperatorChange(_val: string): void;
3059
- private refreshDynamicValueInitialValueOnly;
3060
- refreshDynamicValueHost(): void;
3061
- private buildAtomFromBasic;
3062
- canBuildAtom(): boolean;
3063
- onAddOrUpdateAtom(): void;
3064
- editAtom(index: number): void;
3065
- removeAtom(index: number): void;
3066
- resetAtomEdit(): void;
3067
- private focusAddCondition;
3068
- clearGroup(): void;
3069
- onDropCondition(evt: CdkDragDrop<RuleAtom[]>): void;
3070
- updateDraftFromGroup(): void;
3071
- getAtomPreview(a: RuleAtom): string;
3072
- addSubgroup(): void;
3073
- removeSubgroup(index: number): void;
3074
- getGroupPreview(g: RuleGroup): string;
3075
- private getActiveGroupRef;
3076
- static ɵfac: i0.ɵɵFactoryDeclaration<TableRulesEditorComponent, [null, null, null, null, { optional: true; }]>;
3077
- static ɵcmp: i0.ɵɵComponentDeclaration<TableRulesEditorComponent, "table-rules-editor", never, { "config": { "alias": "config"; "required": false; }; "resourcePath": { "alias": "resourcePath"; "required": false; }; "fields": { "alias": "fields"; "required": false; }; "i18nRules": { "alias": "i18nRules"; "required": false; }; "dslFunctionRegistry": { "alias": "dslFunctionRegistry"; "required": false; }; "debugLogs": { "alias": "debugLogs"; "required": false; }; "debugLevel": { "alias": "debugLevel"; "required": false; }; }, { "configChange": "configChange"; }, never, never, true, never>;
3078
- }
3079
-
3080
- /**
3081
- * Lightweight JSON path evaluator for simple cases used in conditional styling.
3082
- * Supported syntax (subset):
3083
- * - $.a.b.c
3084
- * - a.b[0].c
3085
- * - a["key"] / a['key']
3086
- * - a[0]
3087
- */
3088
- declare function jsonPathGet(root: any, rawPath: string): any;
3089
- declare function hasJsonKey(root: any, keyOrPath: string): boolean;
3090
- declare function jsonPathMatches(root: any, path: string, pattern: string): boolean;
3091
- /**
3092
- * Registers JSON helpers in a DslParser instance, if it supports custom functions.
3093
- * This is optional — call it in your app host bootstrap.
3094
- */
3095
- declare function registerJsonDslFunctions(parser: DslParser | any): void;
3096
-
3097
- /**
3098
- * Registers simple date/time helpers in a DslParser instance.
3099
- * - today(): returns 'YYYY-MM-DD' (UTC)
3100
- * - now(): returns Unix timestamp in milliseconds
3101
- * - dateAdd(date, amount, unit): adds amount (days|weeks|months) and returns 'YYYY-MM-DD'
3102
- * - dateFormat(date, token): supports token 'E' (ISO weekday 1..7)
3103
- */
3104
- declare function registerDateDslFunctions(parser: DslParser | any): void;
3105
-
3106
3279
  declare class FormulaGeneratorService {
3107
3280
  /**
3108
3281
  * Generates a safe JavaScript expression from a formula definition
@@ -3298,5 +3471,5 @@ interface CapabilityCatalog extends AiCapabilityCatalog {
3298
3471
  }
3299
3472
  declare const TABLE_COMPONENT_AI_CAPABILITIES: CapabilityCatalog;
3300
3473
 
3301
- export { 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_COMPONENT_METADATA, PraxisFilter, PraxisTable, PraxisTableConfigEditor, PraxisTableToolbar, STRING_PRESETS, TABLE_AI_CAPABILITIES, TABLE_COMPONENT_AI_CAPABILITIES, TASK_PRESETS, TableDefaultsProvider, TableRulesEditorComponent, ToolbarActionsEditorComponent, ValueMappingEditorComponent, VisualFormulaBuilderComponent, buildTableApplyPlan, createTableAuthoringDocument, getActionId, getEnum, getTableCapabilities, hasJsonKey, jsonPathGet, jsonPathMatches, normalizeTableAuthoringDocument, parseLegacyOrTableDocument, providePraxisFilterMetadata, providePraxisTableMetadata, registerDateDslFunctions, registerJsonDslFunctions, serializeTableAuthoringDocument, toCanonicalTableConfig, validateTableAuthoringDocument };
3302
- export type { ActionLike, 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, ValueKind as TableComponentValueKind, TableHorizontalScroll, TableProjectionContext, TableRuntimeContext, TableValidationContext, ToolbarAction, ToolbarActionsChange, ValueKind$1 as ValueKind, ValueMappingPair };
3474
+ 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_COMPONENT_METADATA, PraxisFilter, PraxisTable, PraxisTableConfigEditor, PraxisTableToolbar, STRING_PRESETS, TABLE_AI_CAPABILITIES, TABLE_COMPONENT_AI_CAPABILITIES, TASK_PRESETS, TableDefaultsProvider, TableRulesEditorComponent, ToolbarActionsEditorComponent, ValueMappingEditorComponent, VisualFormulaBuilderComponent, buildTableApplyPlan, createTableAuthoringDocument, getActionId, getEnum, getTableCapabilities, normalizeTableAuthoringDocument, parseLegacyOrTableDocument, providePraxisFilterMetadata, providePraxisTableMetadata, serializeTableAuthoringDocument, toCanonicalTableConfig, validateTableAuthoringDocument };
3475
+ 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, ValueKind as TableComponentValueKind, TableHorizontalScroll, TableProjectionContext, TableRuntimeContext, TableValidationContext, ToolbarAction, ToolbarActionsChange, ValueKind$1 as ValueKind, ValueMappingPair };