@praxisui/table 10.0.0-rc.0 → 10.0.0-rc.11

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.
@@ -1,7 +1,8 @@
1
- import * as _praxisui_core from '@praxisui/core';
2
- import { TableToolbarAppearanceConfig, TableConfig, TableToolbarAppearanceDensity, ToolbarActionEvent, PraxisExportScope, LoggerService, PraxisI18nService, TableToolbarAppearanceVariant, TableToolbarAppearanceShape, TableToolbarAppearanceDivider, TableToolbarTokenName, ToolbarAction as ToolbarAction$1, GlobalConfigService, FilterPresentationConfig, AsyncConfigStorage, LocalStorageConfigService, ApiUrlEntry, FieldMetadata, SchemaIdParams, FormConfig, GenericCrudService, DynamicFormService, SchemaNormalizerService, ComponentKeyService, ComponentDocMeta, PraxisTextValue, PraxisAnalyticsProjection, PraxisDataQueryContext, ApiUrlConfig, PraxisQueryFilterExpression, RecordRelatedSurfaceContextPack, PraxisResourceEvent, LoadingState, RestApiLinks, ColumnDefinition, RichBlockNode, ResourceCapabilityDigest, ConnectionStorage, LoadingOrchestrator, GlobalActionService, EnterpriseRuntimeContextService, PraxisLoadingRenderer, PraxisRuntimeComponentObservationEnvelope, TableDetailRichListNode, TableDetailCardGridNode, TableDetailCardGridCardNode, TableDetailTimelineNode, JsonLogicDataRecord, TableDetailListItemAction, TableDetailActionBarNode, TableDetailActionBarAction, TableDetailRefNode, TableDetailTemplateRefNode, TableDetailDiagramEmbedNode, TableDetailEmbedAction, GlobalActionRef, PraxisRuntimeGlobalActionEffect, ResourceActionCatalogItem, ResourceSurfaceCatalogItem, ResourceCapabilityOperation, JsonLogicExpression, PraxisPresentationVisualizationKind, PraxisTableCellVisualizationConstraint, GlobalActionCatalogEntry, IconPickerService, SurfaceOpenPayload, GlobalActionField, FieldDefinition, PraxisRuntimeConditionalEffectRule, PraxisJsonLogicService, TableConfigService, SettingsValueProvider as SettingsValueProvider$1, ResourceQuickConnectComponent, AnalyticsSchemaContractService, AnalyticsPresentationResolver, RichPresenterNode, RichComposeNode, ComponentAuthoringManifest, AiCapability, AiCapabilityCategory, AiValueKind, AiCapabilityCatalog } from '@praxisui/core';
3
1
  import * as i0 from '@angular/core';
4
- import { InjectionToken, AfterViewInit, OnDestroy, EventEmitter, ElementRef, Provider, OnInit, OnChanges, DoCheck, DestroyRef, ChangeDetectorRef, NgZone, SimpleChanges, ComponentRef, AfterViewChecked, AfterContentInit, Injector, Type } from '@angular/core';
2
+ import { InjectionToken, AfterViewInit, OnDestroy, EventEmitter, ElementRef, Provider, OnInit, OnChanges, DoCheck, DestroyRef, ChangeDetectorRef, NgZone, SimpleChanges, ComponentRef, AfterViewChecked, AfterContentInit, TemplateRef, Injector, Type } from '@angular/core';
3
+ import * as _praxisui_core from '@praxisui/core';
4
+ import { BulkExecutionContract, ResourceDiscoveryRequestOptions, BulkWireId, RestApiLinks, BulkSyncSession, BulkFieldChange, TableToolbarAppearanceConfig, TableConfig, TableToolbarAppearanceDensity, ToolbarActionEvent, PraxisExportScope, LoggerService, PraxisI18nService, TableToolbarAppearanceVariant, TableToolbarAppearanceShape, TableToolbarAppearanceDivider, TableToolbarTokenName, ToolbarAction as ToolbarAction$1, GlobalConfigService, FilterPresentationConfig, AsyncConfigStorage, LocalStorageConfigService, ApiUrlEntry, FieldMetadata, SchemaIdParams, FormConfig, GenericCrudService, DynamicFormService, SchemaNormalizerService, ComponentKeyService, ComponentDocMeta, PraxisTextValue, PraxisAnalyticsProjection, PraxisDataQueryContext, ApiUrlConfig, DynamicDataRecord, MaterializedResourceIdentity, PraxisQueryFilterExpression, RecordRelatedSurfaceContextPack, PraxisResourceEvent, LoadingState, ColumnDefinition, RichBlockNode, ResourceCapabilityDigest, ConnectionStorage, LoadingOrchestrator, GlobalActionService, EnterpriseRuntimeContextService, PraxisLoadingRenderer, PraxisRuntimeComponentObservationEnvelope, TableDetailRichListNode, TableDetailListNode, TableDetailCardGridNode, TableDetailCardGridCardNode, TableDetailTimelineNode, JsonLogicDataRecord, TableDetailListItemAction, TableDetailActionBarNode, TableDetailActionBarAction, TableDetailRefNode, TableDetailTemplateRefNode, TableDetailDiagramEmbedNode, TableDetailEmbedAction, RichContentDocument, RichBlockHostCapabilities, GlobalActionRef, PraxisRuntimeGlobalActionEffect, ResourceActionCatalogItem, ResourceSurfaceCatalogItem, ResourceCapabilityOperation, JsonLogicExpression, PraxisPresentationVisualizationKind, PraxisTableCellVisualizationConstraint, GlobalActionCatalogEntry, IconPickerService, SurfaceOpenPayload, GlobalActionField, FieldDefinition, PraxisRuntimeConditionalEffectRule, PraxisJsonLogicService, TableConfigService, SettingsValueProvider as SettingsValueProvider$1, ResourceQuickConnectComponent, AnalyticsSchemaContractService, AnalyticsPresentationResolver, RichPresenterNode, RichComposeNode, ComponentAuthoringManifest, AiCapability, AiCapabilityCategory, AiValueKind, AiCapabilityCatalog, TableDrawerConfig, PraxisAnalyticalDrawerTab, PraxisPresentationVisualizationConfig, PraxisAnalyticalDrawerSchema, SafeExpressionEvaluator, PraxisComputedFieldsConfig, PraxisComputedFieldDefinition } from '@praxisui/core';
5
+ export { DynamicDataCollection, DynamicDataRecord, DynamicRecordMeta, ResourceLinkItem, ResourceLinks, createDynamicRecord, extractRecordId, isDynamicDataRecord, resolveDataField } from '@praxisui/core';
5
6
  import { ActivatedRoute } from '@angular/router';
6
7
  import { SafeHtml } from '@angular/platform-browser';
7
8
  import { MatTable, MatTableDataSource } from '@angular/material/table';
@@ -24,6 +25,7 @@ import { PraxisAssistantVoiceInputMode, PraxisAssistantTurnViewState, PraxisAssi
24
25
  import { HttpClient } from '@angular/common/http';
25
26
  import { MatTabChangeEvent } from '@angular/material/tabs';
26
27
  import { RuleEffectDefinition } from '@praxisui/table-rule-builder';
28
+ import { PraxisRichContentConfigEditor, PraxisRichContentEditorInputs } from '@praxisui/rich-content';
27
29
  import { MatCheckboxChange } from '@angular/material/checkbox';
28
30
 
29
31
  /** Transient presentation of the existing PER_ITEM response, never a workflow contract. */
@@ -38,6 +40,32 @@ interface TableCollectionOutcome {
38
40
  }>;
39
41
  }
40
42
 
43
+ interface TableBulkSyncSelection {
44
+ id: BulkWireId;
45
+ links: RestApiLinks;
46
+ }
47
+ /** Detached, one-invocation context owned by the table. */
48
+ interface TableBulkSyncContext {
49
+ resourcePath: string;
50
+ resourceKey: string;
51
+ tableId: string;
52
+ identityPath: string;
53
+ contract: BulkExecutionContract;
54
+ options?: ResourceDiscoveryRequestOptions;
55
+ selection: readonly TableBulkSyncSelection[];
56
+ }
57
+ /** Private, table-owned custody for one evaluated intent in this component instance. */
58
+ interface TableBulkSyncHandle {
59
+ context: TableBulkSyncContext;
60
+ session: BulkSyncSession;
61
+ confirmationKey: string | null;
62
+ /** Await an already dispatched session request before a remount authorizes projections. */
63
+ pendingSessionWork?: Promise<unknown> | null;
64
+ requestedChanges: readonly BulkFieldChange[] | null;
65
+ enterpriseIdentity: string | undefined;
66
+ operationalIdentity: string;
67
+ }
68
+
41
69
  interface ActionLike {
42
70
  action?: string;
43
71
  id?: string;
@@ -50,6 +78,23 @@ interface ActionLike {
50
78
  }
51
79
  declare function getActionId(action: ActionLike): string;
52
80
 
81
+ interface PraxisTableCrossFilterItem {
82
+ id: string;
83
+ field: string;
84
+ label: string;
85
+ value: unknown;
86
+ prefix?: string;
87
+ rawFilter?: Record<string, unknown>;
88
+ }
89
+ interface PraxisTableQueryContextClearEvent {
90
+ field?: string;
91
+ clearedFields?: string[];
92
+ clearedFilter?: PraxisTableCrossFilterItem;
93
+ remainingFilters?: Record<string, unknown>;
94
+ remainingFilterCount?: number;
95
+ tableId?: string;
96
+ source?: 'toolbar-chip';
97
+ }
53
98
  declare const PRAXIS_TABLE_TOOLBAR_APPEARANCE_PRESETS: Record<string, TableToolbarAppearanceConfig>;
54
99
  declare const PRAXIS_TABLE_TOOLBAR_DEFAULT_APPEARANCE: InjectionToken<TableToolbarAppearanceConfig>;
55
100
  declare const PRAXIS_TABLE_TOOLBAR_TOKEN_PRESETS: InjectionToken<Record<string, TableToolbarAppearanceConfig>>;
@@ -85,8 +130,11 @@ declare class PraxisTableToolbar implements AfterViewInit, OnDestroy {
85
130
  evaluationContext: Record<string, any> | null;
86
131
  activeQuickFilterId: string | null;
87
132
  activeDensity: TableToolbarAppearanceDensity | null;
133
+ activeCrossFilters: PraxisTableCrossFilterItem[];
88
134
  /** @internal Used by PraxisTable so toolbar menu decisions materialize through the table runtime. */
89
135
  columnVisibilityController?: (field: string, visible: boolean) => void;
136
+ readonly clearCrossFilter: EventEmitter<PraxisTableCrossFilterItem>;
137
+ readonly clearAllCrossFilters: EventEmitter<void>;
90
138
  toolbarAction: EventEmitter<Pick<ToolbarActionEvent<Record<string, unknown>>, "action" | "actionConfig" | "focusOrigin">>;
91
139
  exportAction: EventEmitter<{
92
140
  format: string;
@@ -151,6 +199,7 @@ declare class PraxisTableToolbar implements AfterViewInit, OnDestroy {
151
199
  filter: Record<string, unknown>;
152
200
  icon?: string;
153
201
  }>;
202
+ private normalizeQuickFilterExpression;
154
203
  shouldShowQuickFilters(): boolean;
155
204
  getQuickFiltersLabel(): string;
156
205
  getQuickFilterLabel(filter: {
@@ -162,6 +211,15 @@ declare class PraxisTableToolbar implements AfterViewInit, OnDestroy {
162
211
  id: string;
163
212
  filter: Record<string, unknown>;
164
213
  }): void;
214
+ hasActiveCrossFilters(): boolean;
215
+ getActiveCrossFilters(): PraxisTableCrossFilterItem[];
216
+ getCrossFiltersAriaLabel(): string;
217
+ getCrossFilterDefaultPrefix(): string;
218
+ getClearCrossFilterAriaLabel(filter: PraxisTableCrossFilterItem): string;
219
+ getClearCrossFilterTooltip(filter: PraxisTableCrossFilterItem): string;
220
+ getClearAllCrossFiltersLabel(): string;
221
+ onClearCrossFilter(filter: PraxisTableCrossFilterItem): void;
222
+ onClearAllCrossFilters(): void;
165
223
  isDensityToggleEnabled(): boolean;
166
224
  getDensityToggleLabel(): string;
167
225
  getDensityOptions(): TableToolbarAppearanceDensity[];
@@ -261,7 +319,7 @@ declare class PraxisTableToolbar implements AfterViewInit, OnDestroy {
261
319
  private sortActions;
262
320
  getExportIcon(format: string): string;
263
321
  static ɵfac: i0.ɵɵFactoryDeclaration<PraxisTableToolbar, [null, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }]>;
264
- static ɵcmp: i0.ɵɵComponentDeclaration<PraxisTableToolbar, "praxis-table-toolbar", never, { "config": { "alias": "config"; "required": false; }; "appearance": { "alias": "appearance"; "required": false; }; "backgroundColor": { "alias": "backgroundColor"; "required": false; }; "placement": { "alias": "placement"; "required": false; }; "focusScope": { "alias": "focusScope"; "required": false; }; "showMain": { "alias": "showMain"; "required": false; }; "showActionsGroup": { "alias": "showActionsGroup"; "required": false; }; "showEndActions": { "alias": "showEndActions"; "required": false; }; "showMobileActions": { "alias": "showMobileActions"; "required": false; }; "exportBusy": { "alias": "exportBusy"; "required": false; }; "exportStatusMessage": { "alias": "exportStatusMessage"; "required": false; }; "evaluationContext": { "alias": "evaluationContext"; "required": false; }; "activeQuickFilterId": { "alias": "activeQuickFilterId"; "required": false; }; "activeDensity": { "alias": "activeDensity"; "required": false; }; "columnVisibilityController": { "alias": "columnVisibilityController"; "required": false; }; }, { "toolbarAction": "toolbarAction"; "exportAction": "exportAction"; "columnVisibilityToggle": "columnVisibilityToggle"; "quickFilterChange": "quickFilterChange"; "densityChange": "densityChange"; }, never, ["[advancedFilter]", "[toolbar]", "[end-actions]"], true, never>;
322
+ static ɵcmp: i0.ɵɵComponentDeclaration<PraxisTableToolbar, "praxis-table-toolbar", never, { "config": { "alias": "config"; "required": false; }; "appearance": { "alias": "appearance"; "required": false; }; "backgroundColor": { "alias": "backgroundColor"; "required": false; }; "placement": { "alias": "placement"; "required": false; }; "focusScope": { "alias": "focusScope"; "required": false; }; "showMain": { "alias": "showMain"; "required": false; }; "showActionsGroup": { "alias": "showActionsGroup"; "required": false; }; "showEndActions": { "alias": "showEndActions"; "required": false; }; "showMobileActions": { "alias": "showMobileActions"; "required": false; }; "exportBusy": { "alias": "exportBusy"; "required": false; }; "exportStatusMessage": { "alias": "exportStatusMessage"; "required": false; }; "evaluationContext": { "alias": "evaluationContext"; "required": false; }; "activeQuickFilterId": { "alias": "activeQuickFilterId"; "required": false; }; "activeDensity": { "alias": "activeDensity"; "required": false; }; "activeCrossFilters": { "alias": "activeCrossFilters"; "required": false; }; "columnVisibilityController": { "alias": "columnVisibilityController"; "required": false; }; }, { "clearCrossFilter": "clearCrossFilter"; "clearAllCrossFilters": "clearAllCrossFilters"; "toolbarAction": "toolbarAction"; "exportAction": "exportAction"; "columnVisibilityToggle": "columnVisibilityToggle"; "quickFilterChange": "quickFilterChange"; "densityChange": "densityChange"; }, never, ["[advancedFilter]", "[toolbar]", "[end-actions]"], true, never>;
265
323
  }
266
324
 
267
325
  type ColumnDataType$1 = 'date' | 'number' | 'currency' | 'percentage' | 'string' | 'boolean' | 'custom';
@@ -1133,6 +1191,43 @@ declare class AnalyticsTableStatsApiService {
1133
1191
  static ɵprov: i0.ɵɵInjectableDeclaration<AnalyticsTableStatsApiService>;
1134
1192
  }
1135
1193
 
1194
+ /**
1195
+ * Canonical row click event interface emitted by PraxisTable and PraxisCrud.
1196
+ * Provides typed access to the underlying record, row index, original DOM mouse event,
1197
+ * resource identity, and selection/expansion state.
1198
+ */
1199
+ interface RowClickEvent<T = DynamicDataRecord> {
1200
+ row: T;
1201
+ index: number;
1202
+ originalEvent?: MouseEvent;
1203
+ resourceIdentity?: MaterializedResourceIdentity | string | null;
1204
+ selectionState?: {
1205
+ isSelected: boolean;
1206
+ isExpanded: boolean;
1207
+ };
1208
+ }
1209
+ /**
1210
+ * Event payload emitted when a table row is double clicked.
1211
+ */
1212
+ interface RowDoubleClickEvent<T = DynamicDataRecord> {
1213
+ action?: string;
1214
+ row: T;
1215
+ }
1216
+ /**
1217
+ * Event payload emitted when an analytical drawer is opened from a table row.
1218
+ */
1219
+ interface DrawerOpenEvent<T = DynamicDataRecord> {
1220
+ row: T;
1221
+ tabId?: string;
1222
+ }
1223
+ /**
1224
+ * Event payload emitted when row selections change in the table.
1225
+ */
1226
+ interface RowSelectionChangeEvent<T = DynamicDataRecord> {
1227
+ selected: T[];
1228
+ source?: 'row' | 'header' | 'programmatic';
1229
+ }
1230
+
1136
1231
  interface TableAiNavigationDestinationContext {
1137
1232
  id?: string;
1138
1233
  path: string;
@@ -1260,7 +1355,7 @@ type RuntimeRowAction = {
1260
1355
  __praxisDiscoveryPending?: boolean;
1261
1356
  };
1262
1357
  type ExpansionDetailRuntimeStatus = 'idle' | 'loading' | 'ready' | 'error' | 'blocked';
1263
- type ExpansionDetailResolvedSource = 'inline' | 'resource' | 'resourcePath' | 'hypermedia' | 'fallback';
1358
+ type ExpansionDetailResolvedSource = 'inline' | 'resource' | 'resourcePath' | 'hypermedia' | 'fallback' | 'schema';
1264
1359
  type ExpansionDetailViewState = {
1265
1360
  status: ExpansionDetailRuntimeStatus;
1266
1361
  schema: Record<string, unknown> | null;
@@ -1311,11 +1406,15 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1311
1406
  private _crudOperationResolver?;
1312
1407
  private readonly runtimeObservationRegistry;
1313
1408
  private readonly detailInlineRenderers;
1409
+ private readonly drawerRegistry;
1314
1410
  private collectionLinks;
1315
1411
  private collectionCapabilities;
1316
1412
  private collectionCapabilitiesRequestHref;
1317
1413
  private collectionCapabilitiesResolvedHref;
1318
1414
  private collectionCapabilitiesRequestSeq;
1415
+ bulkSyncHandle: TableBulkSyncHandle | null;
1416
+ private readonly bulkClient;
1417
+ private readonly bulkSessions;
1319
1418
  private readonly detailInlineNodeResolvers;
1320
1419
  private readonly detailResourceResolver;
1321
1420
  private runtimeObservationRegistration;
@@ -1337,7 +1436,15 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1337
1436
  autoOpenSettingsOnOutdated: boolean;
1338
1437
  crudContext: any;
1339
1438
  filterCriteria: Record<string, any>;
1439
+ filterTeleport: boolean;
1440
+ widgetId?: string;
1441
+ filterBarTemplate?: TemplateRef<unknown>;
1442
+ get filterTemplate(): TemplateRef<unknown> | undefined;
1443
+ private readonly widgetEventBus;
1340
1444
  queryContext: PraxisDataQueryContextBridge | null;
1445
+ readonly queryContextClear: EventEmitter<PraxisTableQueryContextClearEvent>;
1446
+ readonly queryContextChange: EventEmitter<PraxisDataQueryContextBridge | null>;
1447
+ activeCrossFilters: PraxisTableCrossFilterItem[];
1341
1448
  aiContext: TableAiContext | null;
1342
1449
  aiAssistantVoiceInputMode: PraxisAssistantVoiceInputMode;
1343
1450
  aiAssistantVoiceLanguage: string;
@@ -1351,10 +1458,10 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1351
1458
  private advancedFilterMetadataOverridesCacheKey;
1352
1459
  private advancedFilterMetadataOverridesCacheSource?;
1353
1460
  private advancedFilterMetadataOverridesCache?;
1354
- rowClick: EventEmitter<any>;
1461
+ rowClick: EventEmitter<RowClickEvent<DynamicDataRecord>>;
1355
1462
  widgetEvent: EventEmitter<any>;
1356
1463
  resourceEvent: EventEmitter<PraxisResourceEvent<unknown>>;
1357
- rowDoubleClick: EventEmitter<any>;
1464
+ rowDoubleClick: EventEmitter<RowDoubleClickEvent<DynamicDataRecord>>;
1358
1465
  rowExpansionChange: EventEmitter<RowExpansionChangeEvent>;
1359
1466
  rowAction: EventEmitter<any>;
1360
1467
  toolbarAction: EventEmitter<ToolbarActionEvent<any>>;
@@ -1375,6 +1482,12 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1375
1482
  loadingStateChange: EventEmitter<LoadingState>;
1376
1483
  collectionLinksChange: EventEmitter<RestApiLinks | null>;
1377
1484
  selectionChange: EventEmitter<any>;
1485
+ drawerOpen: EventEmitter<DrawerOpenEvent<DynamicDataRecord>>;
1486
+ drawerClose: EventEmitter<void>;
1487
+ drawerTabChange: EventEmitter<string>;
1488
+ isAnalyticalDrawerOpen: boolean;
1489
+ analyticalDrawerRow: any | null;
1490
+ activeAnalyticalDrawerTabId?: string;
1378
1491
  private latestLoadingState;
1379
1492
  private loadingIndicatorVisible;
1380
1493
  private loadingIndicatorDelayHandle;
@@ -1439,6 +1552,9 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1439
1552
  private localFilterFieldMetadataCache;
1440
1553
  private localFilterFieldMetadataCacheKey;
1441
1554
  private remoteSchemaLoadSequence;
1555
+ private enterpriseContextIdentity;
1556
+ private enterpriseContextReady;
1557
+ private staleEnterpriseLocalData;
1442
1558
  private remoteDataLoadSequence;
1443
1559
  private analyticsLoadSequence;
1444
1560
  private activeRemoteSchemaLoadSubscription;
@@ -1455,6 +1571,10 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1455
1571
  private expansionDetailSourceByRowKey;
1456
1572
  private expansionDetailAbortByRowKey;
1457
1573
  private expansionDetailActiveTabByRowKey;
1574
+ private detailRequests?;
1575
+ readonly bottomDetailCollapsed: i0.WritableSignal<boolean>;
1576
+ private bottomDetailKey;
1577
+ private getDetailRequests;
1458
1578
  private rowCapabilitySnapshotByHref;
1459
1579
  private rowCapabilityCachedAtByHref;
1460
1580
  private rowCapabilityErrorHrefs;
@@ -1493,6 +1613,8 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1493
1613
  shouldRenderFooterToolbar(): boolean;
1494
1614
  hasTopToolbarStack(): boolean;
1495
1615
  hasBottomTableStack(): boolean;
1616
+ hasSurfaceAfterFooterToolbar(): boolean;
1617
+ hasBottomDetailAfterPaginator(): boolean;
1496
1618
  shouldShowFooterToolbarMain(): boolean;
1497
1619
  shouldShowFooterToolbarEndActions(): boolean;
1498
1620
  getToolbarActionsPosition(): 'top' | 'bottom' | 'both';
@@ -1741,6 +1863,13 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1741
1863
  private resolveCollectionCapabilitiesHref;
1742
1864
  private materializeCollectionCreateToolbarAction;
1743
1865
  private materializeCollectionWorkflowToolbarActions;
1866
+ private materializeCollectionBulkSyncToolbarAction;
1867
+ private hasBulkSyncSelection;
1868
+ private tryHandleBulkSyncToolbarAction;
1869
+ private isBulkSyncPending;
1870
+ canShowBulkSyncHandle(): boolean;
1871
+ closeBulkSync(): void;
1872
+ private bulkSyncOperationalIdentity;
1744
1873
  private isCollectionActionDiscoveryEnabled;
1745
1874
  private ensureToolbarConfigForRuntime;
1746
1875
  private buildCollectionCreateToolbarAction;
@@ -1758,6 +1887,8 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1758
1887
  private resolveCollectionCreateDisabled;
1759
1888
  private isCreateToolbarAction;
1760
1889
  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, injector: Injector, componentKeys: ComponentKeyService, loadingOrchestrator: LoadingOrchestrator, globalActions: GlobalActionService, enterpriseRuntimeContext?: EnterpriseRuntimeContextService | undefined, loadingRenderer?: PraxisLoadingRenderer | undefined, route?: ActivatedRoute | undefined, logger?: LoggerService | undefined, analyticsStatsApi?: AnalyticsTableStatsApiService | undefined);
1890
+ /** Compare canonical context values; refreshed labels/timestamps do not change data ownership. */
1891
+ private handleEnterpriseContextChange;
1761
1892
  private get resourceDiscovery();
1762
1893
  private get resourceSurfaceOpenAdapter();
1763
1894
  private get resourceActionOpenAdapter();
@@ -1840,6 +1971,9 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1840
1971
  private hasActiveEmptyStateFilters;
1841
1972
  private hasMeaningfulFilterCriteria;
1842
1973
  private hasMeaningfulFilterValue;
1974
+ computeActiveCrossFilters(): PraxisTableCrossFilterItem[];
1975
+ onClearCrossFilter(item: PraxisTableCrossFilterItem): void;
1976
+ onClearAllCrossFilters(): void;
1843
1977
  private resolveNoDataStateConfig;
1844
1978
  private isEmptyStateTone;
1845
1979
  private isEmptyStateVariant;
@@ -1861,6 +1995,14 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1861
1995
  * race with the configured request.
1862
1996
  */
1863
1997
  private shouldFetchRemoteDataForQueryChanges;
1998
+ /**
1999
+ * Evaluates whether an external TableConfig change actually modifies remote query parameters
2000
+ * (e.g. resourcePath, page size, sorting criteria or data mode).
2001
+ *
2002
+ * Non-query-affecting updates (such as toolbar actions, capabilities resolution, appearance,
2003
+ * density or empty state) MUST NOT trigger a redundant remote data load or cancel in-flight requests.
2004
+ */
2005
+ private shouldRefetchOnConfigChange;
1864
2006
  private isDebug;
1865
2007
  private connectionKey;
1866
2008
  private saveConnection;
@@ -1887,7 +2029,31 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1887
2029
  getExpansionMotionStyle(): Record<string, string>;
1888
2030
  getRowExpansionRegionAriaLabel(row: any, index?: number): string;
1889
2031
  getExpansionDetailViewState(row: any, index?: number): ExpansionDetailViewState;
2032
+ hasBottomDetail(): boolean;
2033
+ isBottomDetailBeforeControls(): boolean;
2034
+ isBottomDetailAfterControls(): boolean;
2035
+ hasRenderableBottomDetailSurface(): boolean;
2036
+ shouldRenderBottomDetailSurface(bottom: {
2037
+ status?: string;
2038
+ detailState?: ExpansionDetailViewState | null;
2039
+ }): boolean;
2040
+ bottomDetailText(key: string, params?: Record<string, unknown>): string;
2041
+ getBottomDetailBodyHeight(): number | null;
2042
+ isBottomDetailDynamicHeight(): boolean;
2043
+ getBottomDetailState(): {
2044
+ status: string;
2045
+ title: string;
2046
+ row: Record<string, unknown> | null;
2047
+ index: number;
2048
+ detailState: ExpansionDetailViewState | null;
2049
+ message: string;
2050
+ };
2051
+ toggleBottomDetail(): void;
2052
+ private resetDetailRuntimeForConfig;
2053
+ retryBottomDetail(): void;
2054
+ private restoreBottomDetailFocus;
1890
2055
  getExpansionDetailItems(schema: Record<string, unknown> | null): any[];
2056
+ private hasExpansionDetailRenderableSchema;
1891
2057
  getExpansionDetailLayout(schema: Record<string, unknown> | null): 'stack' | 'tabs';
1892
2058
  getExpansionDetailTabs(schema: Record<string, unknown> | null): any[];
1893
2059
  getExpansionDetailNodeType(node: any): string;
@@ -1898,6 +2064,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1898
2064
  getExpansionDetailListItems(row: any, node: any): string[];
1899
2065
  getExpansionDetailRichListEntries(row: any, node: TableDetailRichListNode | any): unknown[];
1900
2066
  getExpansionDetailRichListEmptyText(node: TableDetailRichListNode | any): string;
2067
+ getExpansionDetailListEmptyText(node: TableDetailListNode | any): string;
1901
2068
  getExpansionDetailRichListItemNodes(node: TableDetailRichListNode | any): RichBlockNode[];
1902
2069
  getExpansionDetailCardGridHeaderNodes(node: TableDetailCardGridNode | any): RichBlockNode[];
1903
2070
  getExpansionDetailCardGridCards(node: TableDetailCardGridNode | any): TableDetailCardGridCardNode[];
@@ -1974,7 +2141,11 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1974
2141
  private isExpansionDetailRichListItemActionVisible;
1975
2142
  private evaluateExpansionDetailRichListItemCondition;
1976
2143
  getExpansionDetailRichText(node: any): string;
1977
- getExpansionDetailRichContentContext(row: any, index: number): JsonLogicDataRecord;
2144
+ getExpansionDetailRichContentContext(row: any, index: number, node?: any): JsonLogicDataRecord;
2145
+ getExpansionDetailRichContentDocument(node: any): RichContentDocument;
2146
+ getExpansionDetailRichContentLayout(node: any): 'block' | 'inline';
2147
+ getExpansionDetailRichContentHostCapabilities(row: any): RichBlockHostCapabilities;
2148
+ private confirmExpansionDetailRichAction;
1978
2149
  getExpansionDetailRichContentNodes(node: any, row: any, index: number): RichBlockNode[] | null;
1979
2150
  getExpansionDetailTabRichContentNodes(tab: any, row: any, index: number): RichBlockNode[] | null;
1980
2151
  private mapExpansionDetailNodeToRichContent;
@@ -1992,28 +2163,28 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1992
2163
  onExpansionToggleFromIcon(row: any, index: number, event: MouseEvent): void;
1993
2164
  onExpansionToggleKeydown(event: KeyboardEvent, row: any, index: number): void;
1994
2165
  private getExpansionConfig;
2166
+ private getDetailConfig;
1995
2167
  private ensureExpansionDetailPrepared;
1996
2168
  private resolveExpansionDetailSchemaForRow;
1997
2169
  private resolveExpansionDetailByMode;
1998
2170
  private resolveExpansionDetailInlineSchema;
2171
+ private resolveExpansionDetailFromSchema;
2172
+ private humanizeFieldName;
1999
2173
  private resolveExpansionDetailFromResource;
2000
2174
  private resolveExpansionDetailFromResourcePath;
2001
2175
  private resolveExpansionDetailFromHypermedia;
2176
+ private isDirectRichContentDocument;
2002
2177
  private normalizeExpansionDetailSchemaCandidate;
2003
2178
  private sanitizeExpansionDetailSchema;
2004
2179
  private sanitizeExpansionDetailNodes;
2005
2180
  private sanitizeExpansionDetailNode;
2006
2181
  private sanitizeExpansionDetailMediaBlockNode;
2007
2182
  private sanitizeExpansionDetailCardGridCards;
2183
+ private expansionDetailRichContentIssue;
2008
2184
  private getExpansionDetailCardGridContentTypes;
2009
2185
  private getExpansionDetailComposeItemTypes;
2010
2186
  private buildExpansionBlockedPlaceholderNode;
2011
2187
  private interpolateExpansionResourcePath;
2012
- private isExpansionResourcePathAllowed;
2013
- private normalizeResolvedExpansionResourcePath;
2014
- private isAbsoluteExpansionResourcePath;
2015
- private normalizeExpansionResourceAllowListPattern;
2016
- private wildcardToRegExp;
2017
2188
  private resolveExpansionContextValue;
2018
2189
  private buildExpansionContextRecord;
2019
2190
  private getExpansionFallbackMode;
@@ -2056,6 +2227,11 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2056
2227
  private areStringSetsEqual;
2057
2228
  private shouldToggleExpansionOnRowClick;
2058
2229
  private shouldSelectRowOnRowClick;
2230
+ isAnalyticalDrawerEnabled(): boolean;
2231
+ private shouldOpenAnalyticalDrawerOnRowClick;
2232
+ openAnalyticalDrawer(row: any, tabId?: string): void;
2233
+ closeAnalyticalDrawer(): void;
2234
+ onAnalyticalDrawerTabChange(tabId: string): void;
2059
2235
  private getExpansionMotionPreset;
2060
2236
  private getExpansionMotionDurationMs;
2061
2237
  private getExpansionMotionEasingCurve;
@@ -2148,6 +2324,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2148
2324
  onAdvancedFilterSubmit(criteria: Record<string, any>): void;
2149
2325
  onAdvancedFilterChange(criteria: Record<string, any>): void;
2150
2326
  onAdvancedFilterClear(): void;
2327
+ clearAdvancedFilter(): void;
2151
2328
  onQuickFilterChange(event: {
2152
2329
  id: string;
2153
2330
  filter: Record<string, unknown>;
@@ -2155,7 +2332,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2155
2332
  }): void;
2156
2333
  private clearQuickFilterRuntimeState;
2157
2334
  private hasEquivalentFilterCriteria;
2158
- private applyAdvancedFilterCriteria;
2335
+ applyAdvancedFilterCriteria(criteria: Record<string, any> | null | undefined, reason?: string): void;
2159
2336
  private setAdvancedFilterCriteria;
2160
2337
  private syncAdvancedFilterValueFromCriteria;
2161
2338
  private deriveRuntimeVisibleAdvancedFilterFields;
@@ -2548,6 +2725,11 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2548
2725
  getIconText(row: any, column: ColumnDefinition): string | null;
2549
2726
  getIconRichContentNodes(row: any, column: ColumnDefinition): RichBlockNode[];
2550
2727
  private getIconRawText;
2728
+ /**
2729
+ * Enriquece as linhas com propriedades calculadas declaradas em `computedFields`.
2730
+ * Torna as propriedades virtuais fisicamente acessíveis no objeto da linha (Issue #34).
2731
+ */
2732
+ private enrichRowsWithComputedFields;
2551
2733
  /**
2552
2734
  * Lightweight, controlled evaluator for string/number expressions using row context.
2553
2735
  * Accepts values like '= row.status === "OK" ? "primary" : "warn"'.
@@ -2839,7 +3021,8 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2839
3021
  private scheduleRowDiscoveryMarkForCheck;
2840
3022
  ngOnDestroy(): void;
2841
3023
  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; }, { optional: true; }]>;
2842
- 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; }; "configPersistenceStrategy": { "alias": "configPersistenceStrategy"; "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; }; "aiContext": { "alias": "aiContext"; "required": false; }; "aiAssistantVoiceInputMode": { "alias": "aiAssistantVoiceInputMode"; "required": false; }; "aiAssistantVoiceLanguage": { "alias": "aiAssistantVoiceLanguage"; "required": false; }; "horizontalScroll": { "alias": "horizontalScroll"; "required": false; }; "enableCustomization": { "alias": "enableCustomization"; "required": false; }; "authoringCapability": { "alias": "authoringCapability"; "required": false; }; "dense": { "alias": "dense"; "required": false; }; }, { "rowClick": "rowClick"; "widgetEvent": "widgetEvent"; "resourceEvent": "resourceEvent"; "rowDoubleClick": "rowDoubleClick"; "rowExpansionChange": "rowExpansionChange"; "rowAction": "rowAction"; "toolbarAction": "toolbarAction"; "bulkAction": "bulkAction"; "exportAction": "exportAction"; "columnReorder": "columnReorder"; "columnReorderAttempt": "columnReorderAttempt"; "columnResize": "columnResize"; "beforeDelete": "beforeDelete"; "afterDelete": "afterDelete"; "deleteError": "deleteError"; "beforeBulkDelete": "beforeBulkDelete"; "afterBulkDelete": "afterBulkDelete"; "bulkDeleteError": "bulkDeleteError"; "schemaStatusChange": "schemaStatusChange"; "configChange": "configChange"; "metadataChange": "metadataChange"; "loadingStateChange": "loadingStateChange"; "collectionLinksChange": "collectionLinksChange"; "selectionChange": "selectionChange"; }, ["toolbar", "projectedFilter"], ["[advancedFilter]", "[toolbar]", "[advancedFilter]", "[toolbar]", "[advancedFilter]", "[toolbar]"], true, never>;
3024
+ 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; }; "configPersistenceStrategy": { "alias": "configPersistenceStrategy"; "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; }; "filterTeleport": { "alias": "filterTeleport"; "required": false; }; "widgetId": { "alias": "widgetId"; "required": false; }; "queryContext": { "alias": "queryContext"; "required": false; }; "aiContext": { "alias": "aiContext"; "required": false; }; "aiAssistantVoiceInputMode": { "alias": "aiAssistantVoiceInputMode"; "required": false; }; "aiAssistantVoiceLanguage": { "alias": "aiAssistantVoiceLanguage"; "required": false; }; "horizontalScroll": { "alias": "horizontalScroll"; "required": false; }; "enableCustomization": { "alias": "enableCustomization"; "required": false; }; "authoringCapability": { "alias": "authoringCapability"; "required": false; }; "dense": { "alias": "dense"; "required": false; }; }, { "queryContextClear": "queryContextClear"; "queryContextChange": "queryContextChange"; "rowClick": "rowClick"; "widgetEvent": "widgetEvent"; "resourceEvent": "resourceEvent"; "rowDoubleClick": "rowDoubleClick"; "rowExpansionChange": "rowExpansionChange"; "rowAction": "rowAction"; "toolbarAction": "toolbarAction"; "bulkAction": "bulkAction"; "exportAction": "exportAction"; "columnReorder": "columnReorder"; "columnReorderAttempt": "columnReorderAttempt"; "columnResize": "columnResize"; "beforeDelete": "beforeDelete"; "afterDelete": "afterDelete"; "deleteError": "deleteError"; "beforeBulkDelete": "beforeBulkDelete"; "afterBulkDelete": "afterBulkDelete"; "bulkDeleteError": "bulkDeleteError"; "schemaStatusChange": "schemaStatusChange"; "configChange": "configChange"; "metadataChange": "metadataChange"; "loadingStateChange": "loadingStateChange"; "collectionLinksChange": "collectionLinksChange"; "selectionChange": "selectionChange"; "drawerOpen": "drawerOpen"; "drawerClose": "drawerClose"; "drawerTabChange": "drawerTabChange"; }, ["toolbar", "projectedFilter"], ["[advancedFilter]", "[toolbar]", "[advancedFilter]", "[toolbar]", "[advancedFilter]", "[toolbar]"], true, never>;
3025
+ static ngAcceptInputType_filterTeleport: unknown;
2843
3026
  static ngAcceptInputType_enableCustomization: unknown;
2844
3027
  }
2845
3028
 
@@ -3408,17 +3591,7 @@ declare class BehaviorConfigEditorComponent implements OnInit, OnDestroy, OnChan
3408
3591
  private resolvePositiveNumber;
3409
3592
  private resolveNonNegativeNumber;
3410
3593
  private resolveExpansionMaxExpandedRows;
3411
- private asRecord;
3412
- private cloneRecord;
3413
3594
  private cloneTableConfig;
3414
- private resolveAllowedNodes;
3415
- private objectToPrettyJson;
3416
- private parseJsonRecordOrFallback;
3417
- private setInlineSchemaParseError;
3418
- private setResourcePathParamsMapParseError;
3419
- private isInlineSchemaValidationErrorActive;
3420
- private isResourcePathParamsMapValidationErrorActive;
3421
- private setControlErrorFlag;
3422
3595
  static ɵfac: i0.ɵɵFactoryDeclaration<BehaviorConfigEditorComponent, never>;
3423
3596
  static ɵcmp: i0.ɵɵComponentDeclaration<BehaviorConfigEditorComponent, "behavior-config-editor", never, { "config": { "alias": "config"; "required": false; }; "resourcePath": { "alias": "resourcePath"; "required": false; }; "forceClientStrategies": { "alias": "forceClientStrategies"; "required": false; }; }, { "configChange": "configChange"; "behaviorChange": "behaviorChange"; }, never, never, true, never>;
3424
3597
  }
@@ -4189,6 +4362,123 @@ declare class TableRulesEditorComponent implements OnChanges, OnInit, OnDestroy
4189
4362
  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>;
4190
4363
  }
4191
4364
 
4365
+ type Node = Record<string, any>;
4366
+ /** Edits the original authoring tree; keys exist only in the editor's WeakMap. */
4367
+ declare class TableDetailTreeDraft {
4368
+ private readonly keys;
4369
+ private sequence;
4370
+ selectedKey: string | null;
4371
+ schema: Node;
4372
+ constructor(schema?: Node);
4373
+ entries(): {
4374
+ key: string;
4375
+ node: Node;
4376
+ siblings: Node[];
4377
+ depth: number;
4378
+ }[];
4379
+ selected(): {
4380
+ key: string;
4381
+ node: Node;
4382
+ siblings: Node[];
4383
+ depth: number;
4384
+ } | undefined;
4385
+ move(direction: -1 | 1): void;
4386
+ add(node: Node, nested?: boolean): void;
4387
+ }
4388
+
4389
+ declare class TableDetailEditorComponent implements OnChanges, OnDestroy {
4390
+ private richContentEditorSubscription;
4391
+ private currentRichContentEditor?;
4392
+ richContentDraftDirty: boolean;
4393
+ richContentDraftValid: boolean;
4394
+ set richContentEditor(value: PraxisRichContentConfigEditor | undefined);
4395
+ get richContentEditor(): PraxisRichContentConfigEditor | undefined;
4396
+ config: TableConfig;
4397
+ configChange: EventEmitter<_praxisui_core.TableConfigModern>;
4398
+ draftStateChange: EventEmitter<{
4399
+ valid: boolean;
4400
+ dirty: boolean;
4401
+ }>;
4402
+ private readonly i18n;
4403
+ private baseline?;
4404
+ private emitted?;
4405
+ private readonly coupledBefore;
4406
+ private readonly coupledLast;
4407
+ private readonly richContentInputsByNode;
4408
+ tree: TableDetailTreeDraft;
4409
+ json: string;
4410
+ jsonInvalid: boolean;
4411
+ jsonTouched: boolean;
4412
+ advanced: boolean;
4413
+ preset: string;
4414
+ readonly presets: string[];
4415
+ readonly sourceModes: string[];
4416
+ readonly resourceKinds: string[];
4417
+ readonly resourcePathMethods: string[];
4418
+ fallbackModes(): string[];
4419
+ sample: string;
4420
+ get previewContext(): {
4421
+ row: {
4422
+ id: string;
4423
+ note: string;
4424
+ status: string;
4425
+ progress: number;
4426
+ };
4427
+ };
4428
+ /** Local presenter projection only; never used as an authoring/save source. */
4429
+ previewNodes(): RichBlockNode[];
4430
+ previewRichContentDocuments(): RichContentDocument[];
4431
+ richContentEditorInputs(): PraxisRichContentEditorInputs | null;
4432
+ applyRichContentEditor(): void;
4433
+ addPreset(preset: 'callout' | 'richCard'): void;
4434
+ nodeLabel(node: Record<string, any>): string;
4435
+ nodeIcon(node: Record<string, any>): string;
4436
+ canMove(direction: -1 | 1): boolean;
4437
+ selectTreeEntry(key: string): void;
4438
+ onTreeItemKeydown(event: KeyboardEvent, key: string): void;
4439
+ tx(key: string): string;
4440
+ get detail(): _praxisui_core.TableDetailConfig | undefined;
4441
+ get issues(): string[];
4442
+ get selected(): {
4443
+ [x: string]: any;
4444
+ } | undefined;
4445
+ ngOnChanges(): void;
4446
+ ngOnDestroy(): void;
4447
+ private hydrate;
4448
+ private emit;
4449
+ private report;
4450
+ resetDraft(config: TableConfig): void;
4451
+ presentation(command: {
4452
+ enabled?: boolean;
4453
+ placement?: 'row' | 'bottom';
4454
+ initiallyCollapsed?: boolean;
4455
+ bottomStackPosition?: 'beforeControls' | 'afterControls';
4456
+ emptyBehavior?: 'message' | 'hide';
4457
+ }): void;
4458
+ sourceMode(mode: string): void;
4459
+ sourceField(group: string, field: string, value: string): void;
4460
+ sourceRootField(field: string, value: string): void;
4461
+ sourceValue(group: string, field: string): string;
4462
+ allowList(value: string): void;
4463
+ height(px: number): void;
4464
+ heightMode(mode: 'fixed' | 'dynamic'): void;
4465
+ detailMessage(key: 'empty' | 'ready'): string;
4466
+ setDetailMessage(key: 'empty' | 'ready', value: string): void;
4467
+ private patchDetail;
4468
+ add(nested?: boolean): void;
4469
+ canNest(): boolean;
4470
+ move(direction: -1 | 1): void;
4471
+ remove(): void;
4472
+ edit(field: string, value: string): void;
4473
+ fields(): string[];
4474
+ isAdvancedNode(): boolean;
4475
+ private commitTree;
4476
+ editJson(value: string): void;
4477
+ discard(): void;
4478
+ static ɵfac: i0.ɵɵFactoryDeclaration<TableDetailEditorComponent, never>;
4479
+ static ɵcmp: i0.ɵɵComponentDeclaration<TableDetailEditorComponent, "praxis-table-detail-editor", never, { "config": { "alias": "config"; "required": true; }; }, { "configChange": "configChange"; "draftStateChange": "draftStateChange"; }, never, never, true, never>;
4480
+ }
4481
+
4192
4482
  type ResourcePathIntent = 'set' | 'clear' | 'unchanged';
4193
4483
  type EffectiveDataMode = 'remote' | 'local' | 'empty';
4194
4484
  declare class PraxisTableConfigEditor implements OnInit, OnDestroy, SettingsValueProvider {
@@ -4199,6 +4489,7 @@ declare class PraxisTableConfigEditor implements OnInit, OnDestroy, SettingsValu
4199
4489
  private readonly globalActionCatalog;
4200
4490
  filterSettingsEditor?: FilterSettingsComponent;
4201
4491
  behaviorEditor?: BehaviorConfigEditorComponent;
4492
+ detailEditor?: TableDetailEditorComponent;
4202
4493
  rulesEditor?: TableRulesEditorComponent;
4203
4494
  set crudEditorSetter(ref: any);
4204
4495
  private crudEditor?;
@@ -4250,6 +4541,7 @@ declare class PraxisTableConfigEditor implements OnInit, OnDestroy, SettingsValu
4250
4541
  hasSuccess: boolean;
4251
4542
  statusMessage: string;
4252
4543
  private isValidJson;
4544
+ private detailDraftState;
4253
4545
  private behaviorFeedbackBurstTypes;
4254
4546
  isDirty$: BehaviorSubject<boolean>;
4255
4547
  isValid$: BehaviorSubject<boolean>;
@@ -4360,6 +4652,11 @@ declare class PraxisTableConfigEditor implements OnInit, OnDestroy, SettingsValu
4360
4652
  * Verifica se um recurso está disponível na versão atual
4361
4653
  */
4362
4654
  isFeatureAvailable(feature: string): boolean;
4655
+ onDetailConfigChange(config: TableConfig): void;
4656
+ onDetailDraftStateChange(state: {
4657
+ valid: boolean;
4658
+ dirty: boolean;
4659
+ }): void;
4363
4660
  onBehaviorConfigChange(newConfig: TableConfig): void;
4364
4661
  onBehaviorChange(change: BehaviorConfigChange): void;
4365
4662
  private shouldSuppressBehaviorFeedback;
@@ -4495,6 +4792,145 @@ declare class PraxisFilterWidgetConfigEditor implements SettingsValueProvider$1,
4495
4792
  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>;
4496
4793
  }
4497
4794
 
4795
+ /**
4796
+ * Interface mínima estrutural para qualquer componente que suporte teleporte de filtros
4797
+ * (ex.: PraxisTable ou PraxisCrudComponent).
4798
+ */
4799
+ interface PraxisFilterTeleportHost {
4800
+ filterTeleport?: boolean;
4801
+ filterTemplate?: TemplateRef<unknown>;
4802
+ filterBarTemplate?: TemplateRef<unknown>;
4803
+ table?: PraxisFilterTeleportHost;
4804
+ }
4805
+ type PraxisFilterOutletTarget = PraxisFilterTeleportHost | TemplateRef<unknown> | null | undefined;
4806
+ /**
4807
+ * Praxis UI Platform — Canonical Filter Outlet Component (Issue #11)
4808
+ *
4809
+ * Renderiza a barra de filtros avançados desacoplada da tabela de dados ou do CRUD,
4810
+ * permitindo acomodá-la em qualquer card, drawer ou cabeçalho superior tático.
4811
+ *
4812
+ * @example
4813
+ * ```html
4814
+ * <div class="filters-card">
4815
+ * <praxis-filter-outlet [target]="heroesCrud" />
4816
+ * </div>
4817
+ *
4818
+ * <praxis-crud #heroesCrud ... />
4819
+ * ```
4820
+ */
4821
+ declare class PraxisFilterOutletComponent implements OnChanges, AfterViewInit, OnDestroy {
4822
+ target: PraxisFilterOutletTarget;
4823
+ private readonly cdr;
4824
+ private previousHost?;
4825
+ get resolvedTemplate(): TemplateRef<unknown> | null;
4826
+ ngOnChanges(changes: SimpleChanges): void;
4827
+ ngAfterViewInit(): void;
4828
+ ngOnDestroy(): void;
4829
+ private attachTeleportTarget;
4830
+ static ɵfac: i0.ɵɵFactoryDeclaration<PraxisFilterOutletComponent, never>;
4831
+ static ɵcmp: i0.ɵɵComponentDeclaration<PraxisFilterOutletComponent, "praxis-filter-outlet", never, { "target": { "alias": "target"; "required": false; }; }, {}, never, never, true, never>;
4832
+ }
4833
+ /**
4834
+ * Praxis UI Platform — Canonical Filter Outlet Directive (Issue #11)
4835
+ *
4836
+ * Diretiva estrutural alternativa para teleporte reativo da barra de filtros.
4837
+ *
4838
+ * @example
4839
+ * ```html
4840
+ * <div class="filters-card">
4841
+ * <ng-container *praxisFilterOutlet="heroesCrud"></ng-container>
4842
+ * </div>
4843
+ * ```
4844
+ */
4845
+ declare class PraxisFilterOutletDirective implements OnChanges, AfterViewInit, OnDestroy {
4846
+ target: PraxisFilterOutletTarget;
4847
+ private readonly viewContainer;
4848
+ private readonly cdr;
4849
+ private previousHost?;
4850
+ ngOnChanges(changes: SimpleChanges): void;
4851
+ ngAfterViewInit(): void;
4852
+ ngOnDestroy(): void;
4853
+ private updateView;
4854
+ static ɵfac: i0.ɵɵFactoryDeclaration<PraxisFilterOutletDirective, never>;
4855
+ static ɵdir: i0.ɵɵDirectiveDeclaration<PraxisFilterOutletDirective, "[praxisFilterOutlet]", never, { "target": { "alias": "praxisFilterOutlet"; "required": false; }; }, {}, never, never, true, never>;
4856
+ }
4857
+
4858
+ interface PraxisScopeBarItem {
4859
+ id: string;
4860
+ label: string;
4861
+ filter?: Record<string, unknown> | string;
4862
+ count?: number | null;
4863
+ icon?: string;
4864
+ tone?: 'default' | 'primary' | 'success' | 'warning' | 'danger' | 'info' | 'ready';
4865
+ isDefault?: boolean;
4866
+ tooltip?: string;
4867
+ }
4868
+ interface PraxisScopeBarConfig {
4869
+ items?: PraxisScopeBarItem[];
4870
+ activeId?: string;
4871
+ showOmnibox?: boolean;
4872
+ omniboxPlaceholder?: string;
4873
+ leadIcon?: string;
4874
+ leadLabel?: string;
4875
+ showClearButton?: boolean;
4876
+ clearLabel?: string;
4877
+ searchField?: string;
4878
+ }
4879
+ declare class PraxisScopeBarComponent implements OnInit {
4880
+ private readonly eventBus;
4881
+ private readonly i18n;
4882
+ private readonly destroyRef;
4883
+ protected scopeNavigationLabel(): string;
4884
+ chipsTrack?: ElementRef<HTMLElement>;
4885
+ private readonly itemsSignal;
4886
+ set items(val: PraxisScopeBarItem[] | undefined);
4887
+ get items(): PraxisScopeBarItem[] | undefined;
4888
+ set activeId(val: string | undefined);
4889
+ get activeId(): string | undefined;
4890
+ readonly activeIdChange: EventEmitter<string>;
4891
+ showOmnibox: boolean;
4892
+ omniboxPlaceholder: string;
4893
+ set omniboxValue(val: string | undefined);
4894
+ get omniboxValue(): string | undefined;
4895
+ readonly omniboxValueChange: EventEmitter<string>;
4896
+ omniboxDebounceMs: number;
4897
+ leadIcon: string;
4898
+ leadLabel?: string;
4899
+ showClearButton: boolean;
4900
+ clearLabel: string;
4901
+ private readonly targetSignal;
4902
+ set target(val: any);
4903
+ get target(): any;
4904
+ targetWidgetId?: string;
4905
+ scopeBarId: string;
4906
+ searchField: string;
4907
+ readonly scopeChange: EventEmitter<PraxisScopeBarItem>;
4908
+ readonly searchChange: EventEmitter<string>;
4909
+ readonly filterCriteriaChange: EventEmitter<Record<string, unknown>>;
4910
+ readonly clear: EventEmitter<void>;
4911
+ private readonly searchSubject$;
4912
+ readonly currentActiveId: i0.WritableSignal<string | null>;
4913
+ readonly currentSearchText: i0.WritableSignal<string>;
4914
+ readonly effectiveItems: i0.Signal<PraxisScopeBarItem[]>;
4915
+ ngOnInit(): void;
4916
+ isItemActive(item: PraxisScopeBarItem): boolean;
4917
+ selectScope(item: PraxisScopeBarItem): void;
4918
+ onSearchInput(event: Event): void;
4919
+ clearSearch(): void;
4920
+ resetFilters(): void;
4921
+ canClear(): boolean;
4922
+ onTrackKeydown(event: KeyboardEvent): void;
4923
+ private dispatchFilters;
4924
+ private applyCriteriaToTarget;
4925
+ private discoverItemsFromTarget;
4926
+ private normalizeFilter;
4927
+ static ɵfac: i0.ɵɵFactoryDeclaration<PraxisScopeBarComponent, never>;
4928
+ static ɵcmp: i0.ɵɵComponentDeclaration<PraxisScopeBarComponent, "praxis-scope-bar", never, { "items": { "alias": "items"; "required": false; }; "activeId": { "alias": "activeId"; "required": false; }; "showOmnibox": { "alias": "showOmnibox"; "required": false; }; "omniboxPlaceholder": { "alias": "omniboxPlaceholder"; "required": false; }; "omniboxValue": { "alias": "omniboxValue"; "required": false; }; "omniboxDebounceMs": { "alias": "omniboxDebounceMs"; "required": false; }; "leadIcon": { "alias": "leadIcon"; "required": false; }; "leadLabel": { "alias": "leadLabel"; "required": false; }; "showClearButton": { "alias": "showClearButton"; "required": false; }; "clearLabel": { "alias": "clearLabel"; "required": false; }; "target": { "alias": "target"; "required": false; }; "targetWidgetId": { "alias": "targetWidgetId"; "required": false; }; "scopeBarId": { "alias": "scopeBarId"; "required": false; }; "searchField": { "alias": "searchField"; "required": false; }; }, { "activeIdChange": "activeIdChange"; "omniboxValueChange": "omniboxValueChange"; "scopeChange": "scopeChange"; "searchChange": "searchChange"; "filterCriteriaChange": "filterCriteriaChange"; "clear": "clear"; }, never, never, true, never>;
4929
+ static ngAcceptInputType_showOmnibox: unknown;
4930
+ static ngAcceptInputType_omniboxDebounceMs: unknown;
4931
+ static ngAcceptInputType_showClearButton: unknown;
4932
+ }
4933
+
4498
4934
  declare class DataFormatterComponent implements OnInit, OnChanges {
4499
4935
  private cdr;
4500
4936
  private formattingService;
@@ -4977,9 +5413,9 @@ type ComponentEditPlanCapability = {
4977
5413
  declare const TABLE_COMPONENT_EDIT_PLAN_KIND = "praxis.table.component-edit-plan";
4978
5414
  declare const TABLE_COMPONENT_EDIT_PLAN_BATCH_KIND = "praxis.table.component-edit-plan.batch";
4979
5415
  declare const TABLE_COMPONENT_EDIT_PLAN_VERSION = "1.0";
4980
- type TableComponentEditChangeKind = 'add_column' | 'set_column_format' | 'set_column_header' | 'set_column_visibility' | 'set_column_filterable' | 'set_column_sortable' | 'set_column_width' | 'set_column_order' | 'set_column_align' | 'set_column_style' | 'set_column_header_style' | 'set_column_sticky' | 'set_column_conditional_style' | 'set_row_conditional_style' | 'set_column_computed' | 'set_column_value_mapping' | 'set_column_renderer' | 'set_column_badge_renderer' | 'set_column_conditional_badge_renderers' | 'set_row_conditional_renderer' | 'configure_table_filtering' | 'configure_advanced_filters' | 'add_advanced_filter_fields' | 'remove_advanced_filter_fields' | 'configure_table_pagination' | 'configure_table_selection' | 'configure_table_sorting' | 'configure_toolbar' | 'add_toolbar_action' | 'add_row_action' | 'add_bulk_action' | 'configure_export' | 'set_table_density' | 'set_toolbar_visibility';
4981
- type TableComponentEditOperationId = 'column.add' | 'column.format.set' | 'column.header.set' | 'column.visibility.set' | 'column.filterable.set' | 'column.sortable.set' | 'column.width.set' | 'column.order.set' | 'column.align.set' | 'column.style.set' | 'column.headerStyle.set' | 'column.sticky.set' | 'column.renderer.set' | 'column.valueMapping.set' | 'column.conditionalStyle.add' | 'row.styleRule.add' | 'row.styleRule.update' | 'column.conditionalRenderer.add' | 'column.computed.add' | 'row.conditionalRenderer.add' | 'behavior.filtering.configure' | 'filter.advanced.configure' | 'filter.advanced.fields.add' | 'filter.advanced.fields.remove' | 'behavior.pagination.configure' | 'behavior.selection.configure' | 'behavior.sorting.configure' | 'toolbar.configure' | 'toolbar.action.add' | 'rowAction.add' | 'bulkAction.add' | 'export.configure' | 'appearance.density.set' | 'toolbar.visibility.set';
4982
- declare const TABLE_COMPONENT_EDIT_PLAN_ALLOWED_CHANGE_KINDS: readonly ["add_column", "set_column_format", "set_column_header", "set_column_visibility", "set_column_filterable", "set_column_sortable", "set_column_width", "set_column_order", "set_column_align", "set_column_style", "set_column_header_style", "set_column_sticky", "set_column_conditional_style", "set_row_conditional_style", "set_column_computed", "set_column_value_mapping", "set_column_renderer", "set_column_badge_renderer", "set_column_conditional_badge_renderers", "set_row_conditional_renderer", "configure_table_filtering", "configure_advanced_filters", "add_advanced_filter_fields", "remove_advanced_filter_fields", "configure_table_pagination", "configure_table_selection", "configure_table_sorting", "configure_toolbar", "add_toolbar_action", "add_row_action", "add_bulk_action", "configure_export", "set_table_density", "set_toolbar_visibility"];
5416
+ type TableComponentEditChangeKind = 'add_column' | 'set_column_format' | 'set_column_header' | 'set_column_visibility' | 'set_column_filterable' | 'set_column_sortable' | 'set_column_width' | 'set_column_order' | 'set_column_align' | 'set_column_style' | 'set_column_header_style' | 'set_column_sticky' | 'set_column_conditional_style' | 'set_row_conditional_style' | 'set_column_computed' | 'set_column_value_mapping' | 'set_column_renderer' | 'set_column_badge_renderer' | 'set_column_conditional_badge_renderers' | 'set_row_conditional_renderer' | 'configure_table_filtering' | 'configure_advanced_filters' | 'add_advanced_filter_fields' | 'remove_advanced_filter_fields' | 'configure_table_pagination' | 'configure_table_detail' | 'configure_table_detail_source' | 'configure_table_detail_presentation' | 'configure_table_expansion' | 'configure_table_selection' | 'configure_table_sorting' | 'configure_toolbar' | 'add_toolbar_action' | 'add_row_action' | 'add_bulk_action' | 'configure_export' | 'set_table_density' | 'set_toolbar_visibility';
5417
+ type TableComponentEditOperationId = 'column.add' | 'column.format.set' | 'column.header.set' | 'column.visibility.set' | 'column.filterable.set' | 'column.sortable.set' | 'column.width.set' | 'column.order.set' | 'column.align.set' | 'column.style.set' | 'column.headerStyle.set' | 'column.sticky.set' | 'column.renderer.set' | 'column.valueMapping.set' | 'column.conditionalStyle.add' | 'row.styleRule.add' | 'row.styleRule.update' | 'column.conditionalRenderer.add' | 'column.computed.add' | 'row.conditionalRenderer.add' | 'behavior.filtering.configure' | 'filter.advanced.configure' | 'filter.advanced.fields.add' | 'filter.advanced.fields.remove' | 'behavior.pagination.configure' | 'detail.configure' | 'detail.source.configure' | 'detail.presentation.configure' | 'expansion.configure' | 'behavior.selection.configure' | 'behavior.sorting.configure' | 'toolbar.configure' | 'toolbar.action.add' | 'rowAction.add' | 'bulkAction.add' | 'export.configure' | 'appearance.density.set' | 'toolbar.visibility.set';
5418
+ declare const TABLE_COMPONENT_EDIT_PLAN_ALLOWED_CHANGE_KINDS: readonly ["add_column", "set_column_format", "set_column_header", "set_column_visibility", "set_column_filterable", "set_column_sortable", "set_column_width", "set_column_order", "set_column_align", "set_column_style", "set_column_header_style", "set_column_sticky", "set_column_conditional_style", "set_row_conditional_style", "set_column_computed", "set_column_value_mapping", "set_column_renderer", "set_column_badge_renderer", "set_column_conditional_badge_renderers", "set_row_conditional_renderer", "configure_table_filtering", "configure_advanced_filters", "add_advanced_filter_fields", "remove_advanced_filter_fields", "configure_table_pagination", "configure_table_detail", "configure_table_detail_source", "configure_table_detail_presentation", "configure_table_expansion", "configure_table_selection", "configure_table_sorting", "configure_toolbar", "add_toolbar_action", "add_row_action", "add_bulk_action", "configure_export", "set_table_density", "set_toolbar_visibility"];
4983
5419
  declare const TABLE_COMPONENT_EDIT_PLAN_EXPECTED_PATHS: Record<TableComponentEditChangeKind, string>;
4984
5420
  interface TableComponentEditPlan {
4985
5421
  kind?: typeof TABLE_COMPONENT_EDIT_PLAN_KIND;
@@ -5022,7 +5458,7 @@ declare const TABLE_COMPONENT_EDIT_PLAN_JSON_SCHEMA: {
5022
5458
  readonly $defs: {
5023
5459
  readonly changeKind: {
5024
5460
  readonly type: "string";
5025
- readonly enum: readonly ["add_column", "set_column_format", "set_column_header", "set_column_visibility", "set_column_filterable", "set_column_sortable", "set_column_width", "set_column_order", "set_column_align", "set_column_style", "set_column_header_style", "set_column_sticky", "set_column_conditional_style", "set_row_conditional_style", "set_column_computed", "set_column_value_mapping", "set_column_renderer", "set_column_badge_renderer", "set_column_conditional_badge_renderers", "set_row_conditional_renderer", "configure_table_filtering", "configure_advanced_filters", "add_advanced_filter_fields", "remove_advanced_filter_fields", "configure_table_pagination", "configure_table_selection", "configure_table_sorting", "configure_toolbar", "add_toolbar_action", "add_row_action", "add_bulk_action", "configure_export", "set_table_density", "set_toolbar_visibility"];
5461
+ readonly enum: readonly ["add_column", "set_column_format", "set_column_header", "set_column_visibility", "set_column_filterable", "set_column_sortable", "set_column_width", "set_column_order", "set_column_align", "set_column_style", "set_column_header_style", "set_column_sticky", "set_column_conditional_style", "set_row_conditional_style", "set_column_computed", "set_column_value_mapping", "set_column_renderer", "set_column_badge_renderer", "set_column_conditional_badge_renderers", "set_row_conditional_renderer", "configure_table_filtering", "configure_advanced_filters", "add_advanced_filter_fields", "remove_advanced_filter_fields", "configure_table_pagination", "configure_table_detail", "configure_table_detail_source", "configure_table_detail_presentation", "configure_table_expansion", "configure_table_selection", "configure_table_sorting", "configure_toolbar", "add_toolbar_action", "add_row_action", "add_bulk_action", "configure_export", "set_table_density", "set_toolbar_visibility"];
5026
5462
  };
5027
5463
  readonly capabilityPath: {
5028
5464
  readonly type: "string";
@@ -5103,7 +5539,7 @@ declare const TABLE_COMPONENT_EDIT_PLAN_JSON_SCHEMA: {
5103
5539
  readonly const: "praxis-table";
5104
5540
  };
5105
5541
  readonly operationId: {
5106
- readonly enum: readonly ["column.add", "column.format.set", "column.header.set", "column.visibility.set", "column.filterable.set", "column.sortable.set", "column.width.set", "column.order.set", "column.align.set", "column.style.set", "column.headerStyle.set", "column.sticky.set", "column.renderer.set", "column.valueMapping.set", "column.conditionalStyle.add", "row.styleRule.add", "column.conditionalRenderer.add", "column.computed.add", "row.conditionalRenderer.add", "behavior.filtering.configure", "filter.advanced.configure", "filter.advanced.fields.add", "filter.advanced.fields.remove", "behavior.pagination.configure", "behavior.selection.configure", "behavior.sorting.configure", "toolbar.configure", "toolbar.action.add", "rowAction.add", "bulkAction.add", "export.configure", "appearance.density.set", "toolbar.visibility.set"];
5542
+ readonly enum: readonly ["column.add", "column.format.set", "column.header.set", "column.visibility.set", "column.filterable.set", "column.sortable.set", "column.width.set", "column.order.set", "column.align.set", "column.style.set", "column.headerStyle.set", "column.sticky.set", "column.renderer.set", "column.valueMapping.set", "column.conditionalStyle.add", "row.styleRule.add", "column.conditionalRenderer.add", "column.computed.add", "row.conditionalRenderer.add", "behavior.filtering.configure", "filter.advanced.configure", "filter.advanced.fields.add", "filter.advanced.fields.remove", "behavior.pagination.configure", "detail.configure", "detail.source.configure", "detail.presentation.configure", "expansion.configure", "behavior.selection.configure", "behavior.sorting.configure", "toolbar.configure", "toolbar.action.add", "rowAction.add", "bulkAction.add", "export.configure", "appearance.density.set", "toolbar.visibility.set"];
5107
5543
  };
5108
5544
  readonly target: true;
5109
5545
  readonly input: true;
@@ -5314,5 +5750,134 @@ declare function coerceTableComponentEditPlan(value: unknown): TableComponentEdi
5314
5750
  declare function compileTableComponentEditPlans(plans: TableComponentEditPlan[], currentConfig: TableConfig): TableComponentEditPlanCompileResult;
5315
5751
  declare function compileTableComponentEditPlan(plan: TableComponentEditPlan, currentConfig: TableConfig): TableComponentEditPlanCompileResult;
5316
5752
 
5317
- export { ANALYTICS_TABLE_ROW_KEY_FIELD, 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_AUTHORING_MANIFEST, PRAXIS_FILTER_COMPONENT_METADATA, PRAXIS_FILTER_VIEW_CONTEXT_SCHEMA_VERSION, PRAXIS_TABLE_AUTHORING_MANIFEST, PRAXIS_TABLE_COMPONENT_METADATA, PRAXIS_TABLE_TOOLBAR_APPEARANCE_PRESETS, PRAXIS_TABLE_TOOLBAR_DEFAULT_APPEARANCE, PRAXIS_TABLE_TOOLBAR_TOKEN_PRESETS, 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, analyticsComparisonMetricField, buildTableApplyPlan, coerceTableComponentEditPlan, coerceTableComponentEditPlans, compileTableComponentEditPlan, compileTableComponentEditPlans, createTableAuthoringDocument, getActionId, getEnum, getTableCapabilities, getTableComponentEditPlanCapabilities, isTableRendererSupportedByRichContentP0, mapTableRendererToRichContentP0, normalizeTableAuthoringDocument, parseLegacyOrTableDocument, providePraxisFilterMetadata, providePraxisTableMetadata, providePraxisTableToolbarAppearance, serializeTableAuthoringDocument, toCanonicalTableConfig, validateTableAuthoringDocument };
5318
- export type { ActionLike, AnalyticsComparisonMetricValueKind, 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, PraxisFilterViewContext, PraxisFilterViewField, PraxisFilterWidgetEditorInputs, PraxisFilterWidgetEditorValue, PraxisTableWidgetEditorInputs, PraxisTableWidgetEditorValue, ResourcePathIntent, RowAction, RowExpansionChangeBase, RowExpansionChangeEvent, RowExpansionReasonCode, RowExpansionTrigger, StringFormatterOptions, TableAiContext, TableAiNavigationContextPack, TableAiNavigationDestinationContext, TableApplyPlan, TableAuthoringDocument, TableBindings, Capability as TableComponentCapability, CapabilityCatalog as TableComponentCapabilityCatalog, CapabilityCategory as TableComponentCapabilityCategory, TableComponentEditChangeKind, TableComponentEditPlan, TableComponentEditPlanCompileResult, ValueKind as TableComponentValueKind, TableConfigPersistenceStrategy, TableHorizontalScroll, TableProjectionContext, TableRichContentP0Node, TableRuntimeContext, TableValidationContext, ToolbarAction, ToolbarActionsChange, ValueKind$1 as ValueKind, ValueMappingPair };
5753
+ declare function isAnalyticalDrawerSchema(schema: unknown): schema is PraxisAnalyticalDrawerSchema;
5754
+ declare function interpolateRelationEndpoint(endpoint: string, row: Record<string, unknown> | null | undefined): {
5755
+ url: string;
5756
+ hasMissingTokens: boolean;
5757
+ };
5758
+ declare class PraxisAnalyticalDrawerComponent implements OnInit, OnChanges, OnDestroy {
5759
+ private _isOpen;
5760
+ private previousActiveElement;
5761
+ handleDocumentEscape(event?: Event): void;
5762
+ set isOpen(value: boolean);
5763
+ get isOpen(): boolean;
5764
+ private _resourcePath?;
5765
+ set resourcePath(value: string | undefined);
5766
+ get resourcePath(): string | undefined;
5767
+ surfaceName: string;
5768
+ private _drawerConfig;
5769
+ set drawerConfig(value: TableDrawerConfig | null);
5770
+ get drawerConfig(): TableDrawerConfig | null;
5771
+ private _row;
5772
+ set row(value: any | null);
5773
+ get row(): any | null;
5774
+ relations: Record<string, unknown>;
5775
+ loadingRelations: boolean;
5776
+ closeDrawer: EventEmitter<void>;
5777
+ tabChange: EventEmitter<string>;
5778
+ relationFetch: EventEmitter<{
5779
+ key: string;
5780
+ endpoint: string;
5781
+ }>;
5782
+ protected readonly activeTabId: i0.WritableSignal<string>;
5783
+ protected readonly customRelations: i0.WritableSignal<Record<string, unknown>>;
5784
+ protected readonly isFetchingRelations: i0.WritableSignal<boolean>;
5785
+ protected readonly resolvedRemoteConfig: i0.WritableSignal<TableDrawerConfig | null>;
5786
+ protected readonly isResolvingSchema: i0.WritableSignal<boolean>;
5787
+ private readonly evaluator;
5788
+ private readonly http;
5789
+ private readonly drawerRegistry;
5790
+ private readonly apiUrl;
5791
+ private readonly sanitizer;
5792
+ private readonly formattingService;
5793
+ private relationSubs;
5794
+ private schemaSub?;
5795
+ private static readonly urlCache;
5796
+ private static readonly schemaCache;
5797
+ private lastFetchedKey;
5798
+ private lastResolvingKey;
5799
+ static clearCache(): void;
5800
+ private resolveUrl;
5801
+ ngOnInit(): void;
5802
+ ngOnChanges(changes: SimpleChanges): void;
5803
+ ngOnDestroy(): void;
5804
+ getEffectiveDrawerConfig(): TableDrawerConfig | null;
5805
+ private mergeTabs;
5806
+ private resolveRemoteDrawerMetadata;
5807
+ protected onClose(): void;
5808
+ protected onBackdropClick(event: MouseEvent): void;
5809
+ protected selectTab(tabId: string): void;
5810
+ private getAnalyticalSchema;
5811
+ protected resolvedTabs: i0.Signal<PraxisAnalyticalDrawerTab[]>;
5812
+ private generateAutoOverviewProperties;
5813
+ private formatPropertyLabel;
5814
+ protected resolvedTitle: i0.Signal<string>;
5815
+ protected resolvedSubtitle: i0.Signal<string>;
5816
+ protected resolvedClassificationPill: i0.Signal<string>;
5817
+ protected resolvedWidth: i0.Signal<string>;
5818
+ protected getDrawerIcon(): string;
5819
+ protected getEvaluationContext(): Record<string, unknown>;
5820
+ protected isCardGridContent(content: unknown): boolean;
5821
+ protected asCardGrid(content: unknown): {
5822
+ columns?: number;
5823
+ cards?: any[];
5824
+ };
5825
+ protected getGridColumnsStyle(columns?: number): string;
5826
+ protected isRichContentDocument(content: unknown): boolean;
5827
+ protected asRichContentDocument(content: unknown): RichContentDocument;
5828
+ protected isPropertyGrid(content: unknown): boolean;
5829
+ protected asPropertyGrid(content: unknown): any[];
5830
+ protected isArray(val: unknown): boolean;
5831
+ protected evaluateAndFormatMetric(item: any): string;
5832
+ protected evaluatePropertyValue(item: any): string;
5833
+ protected renderMicroViz(viz: PraxisPresentationVisualizationConfig | undefined, item: any): SafeHtml;
5834
+ private syncActiveTab;
5835
+ private fetchConfiguredRelations;
5836
+ private cancelRelationRequests;
5837
+ static ɵfac: i0.ɵɵFactoryDeclaration<PraxisAnalyticalDrawerComponent, never>;
5838
+ static ɵcmp: i0.ɵɵComponentDeclaration<PraxisAnalyticalDrawerComponent, "praxis-analytical-drawer", never, { "isOpen": { "alias": "isOpen"; "required": false; }; "resourcePath": { "alias": "resourcePath"; "required": false; }; "surfaceName": { "alias": "surfaceName"; "required": false; }; "drawerConfig": { "alias": "drawerConfig"; "required": false; }; "row": { "alias": "row"; "required": false; }; "relations": { "alias": "relations"; "required": false; }; "loadingRelations": { "alias": "loadingRelations"; "required": false; }; }, { "closeDrawer": "closeDrawer"; "tabChange": "tabChange"; "relationFetch": "relationFetch"; }, never, never, true, never>;
5839
+ }
5840
+
5841
+ type AnalyticalDrawerSchemaOrConfig = PraxisAnalyticalDrawerSchema | TableDrawerConfig;
5842
+ declare const PRAXIS_ANALYTICAL_DRAWER_SCHEMAS: InjectionToken<Record<string, AnalyticalDrawerSchemaOrConfig> | Record<string, AnalyticalDrawerSchemaOrConfig>[]>;
5843
+ /**
5844
+ * Registra esquemas de gavetas analíticas por coordenada de recurso (ex.: 'operations/incidentes').
5845
+ * Pode ser chamado no app.config.ts ou em providers de rotas/módulos.
5846
+ */
5847
+ declare function providePraxisAnalyticalDrawerSchemas(schemas: Record<string, AnalyticalDrawerSchemaOrConfig>): Provider;
5848
+ declare class AnalyticalDrawerRegistryService {
5849
+ private readonly registry;
5850
+ constructor();
5851
+ register(resourcePath: string, schema: AnalyticalDrawerSchemaOrConfig): void;
5852
+ registerAll(schemas: Record<string, AnalyticalDrawerSchemaOrConfig>): void;
5853
+ get(resourcePath: string): AnalyticalDrawerSchemaOrConfig | undefined;
5854
+ has(resourcePath: string): boolean;
5855
+ clear(): void;
5856
+ normalizeKey(path: string | undefined | null): string;
5857
+ static ɵfac: i0.ɵɵFactoryDeclaration<AnalyticalDrawerRegistryService, never>;
5858
+ static ɵprov: i0.ɵɵInjectableDeclaration<AnalyticalDrawerRegistryService>;
5859
+ }
5860
+
5861
+ interface ComputedFieldsEvaluationOptions {
5862
+ evaluator?: SafeExpressionEvaluator;
5863
+ formattingService?: {
5864
+ formatValue: (value: any, columnType: any, formatString: string) => any;
5865
+ } | null;
5866
+ }
5867
+ /**
5868
+ * Normaliza a definição de um campo computado (aceita string simples ou objeto estruturado).
5869
+ */
5870
+ declare function normalizeComputedFieldDefinition(raw: PraxisComputedFieldDefinition | string): PraxisComputedFieldDefinition;
5871
+ /**
5872
+ * Formata um valor calculado com suporte a moedas, porcentagens, números e formato compacto corporativo (ex: R$ 3,1M).
5873
+ */
5874
+ declare function formatComputedFieldValue(value: unknown, format?: string, type?: string, formattingService?: ComputedFieldsEvaluationOptions['formattingService']): unknown;
5875
+ /**
5876
+ * Enriquece uma coleção de linhas com as propriedades calculadas declaradas em `computedFieldsConfig`.
5877
+ * Executado durante o pipeline de ingestão de dados, tornando as propriedades computadas
5878
+ * nativamente visíveis para colunas, sorting, filtros, gavetas analíticas e exportação.
5879
+ */
5880
+ declare function applyComputedFieldsToRows<T extends Record<string, any> = Record<string, any>>(rows: T[], computedFieldsConfig?: PraxisComputedFieldsConfig | null, options?: ComputedFieldsEvaluationOptions): T[];
5881
+
5882
+ export { ANALYTICS_TABLE_ROW_KEY_FIELD, AnalyticalDrawerRegistryService, 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_ANALYTICAL_DRAWER_SCHEMAS, PRAXIS_FILTER_AUTHORING_MANIFEST, PRAXIS_FILTER_COMPONENT_METADATA, PRAXIS_FILTER_VIEW_CONTEXT_SCHEMA_VERSION, PRAXIS_TABLE_AUTHORING_MANIFEST, PRAXIS_TABLE_COMPONENT_METADATA, PRAXIS_TABLE_TOOLBAR_APPEARANCE_PRESETS, PRAXIS_TABLE_TOOLBAR_DEFAULT_APPEARANCE, PRAXIS_TABLE_TOOLBAR_TOKEN_PRESETS, PraxisAnalyticalDrawerComponent, PraxisFilter, PraxisFilterOutletComponent, PraxisFilterOutletDirective, PraxisFilterWidgetConfigEditor, PraxisScopeBarComponent, 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, analyticsComparisonMetricField, applyComputedFieldsToRows, buildTableApplyPlan, coerceTableComponentEditPlan, coerceTableComponentEditPlans, compileTableComponentEditPlan, compileTableComponentEditPlans, createTableAuthoringDocument, formatComputedFieldValue, getActionId, getEnum, getTableCapabilities, getTableComponentEditPlanCapabilities, interpolateRelationEndpoint, isAnalyticalDrawerSchema, isTableRendererSupportedByRichContentP0, mapTableRendererToRichContentP0, normalizeComputedFieldDefinition, normalizeTableAuthoringDocument, parseLegacyOrTableDocument, providePraxisAnalyticalDrawerSchemas, providePraxisFilterMetadata, providePraxisTableMetadata, providePraxisTableToolbarAppearance, serializeTableAuthoringDocument, toCanonicalTableConfig, validateTableAuthoringDocument };
5883
+ export type { ActionLike, AnalyticalDrawerSchemaOrConfig, AnalyticsComparisonMetricValueKind, 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, ComputedFieldsEvaluationOptions, ConcatenationParams, ConditionalMappingParams, CurrencyFormatterOptions, DataFormattingOptions, DataMode, DateFormatterOptions, DefaultValueParams, DrawerOpenEvent, EditorDiagnostic, EditorDocument, FieldSchema, FilterConfig, FilterTag, FormatPreset, FormatterConfig, FormulaDefinition, FormulaParameterSchema, FormulaParams, FormulaTemplate, FormulaType, I18n, JsonEditorEvent, JsonValidationResult, MessagesLocalizationChange, NestedPropertyParams, NumberFormatterOptions, PercentageFormatterOptions, PraxisFilterOutletTarget, PraxisFilterTeleportHost, PraxisFilterViewContext, PraxisFilterViewField, PraxisFilterWidgetEditorInputs, PraxisFilterWidgetEditorValue, PraxisScopeBarConfig, PraxisScopeBarItem, PraxisTableCrossFilterItem, PraxisTableQueryContextClearEvent, PraxisTableWidgetEditorInputs, PraxisTableWidgetEditorValue, ResourcePathIntent, RowAction, RowClickEvent, RowDoubleClickEvent, RowExpansionChangeBase, RowExpansionChangeEvent, RowExpansionReasonCode, RowExpansionTrigger, RowSelectionChangeEvent, StringFormatterOptions, TableAiContext, TableAiNavigationContextPack, TableAiNavigationDestinationContext, TableApplyPlan, TableAuthoringDocument, TableBindings, Capability as TableComponentCapability, CapabilityCatalog as TableComponentCapabilityCatalog, CapabilityCategory as TableComponentCapabilityCategory, TableComponentEditChangeKind, TableComponentEditPlan, TableComponentEditPlanCompileResult, ValueKind as TableComponentValueKind, TableConfigPersistenceStrategy, TableHorizontalScroll, TableProjectionContext, TableRichContentP0Node, TableRuntimeContext, TableValidationContext, ToolbarAction, ToolbarActionsChange, ValueKind$1 as ValueKind, ValueMappingPair };