@praxisui/table 10.0.0-rc.4 → 10.0.0-rc.40

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 i0 from '@angular/core';
2
- import { InjectionToken, AfterViewInit, OnDestroy, EventEmitter, ElementRef, Provider, OnInit, OnChanges, DoCheck, DestroyRef, ChangeDetectorRef, NgZone, SimpleChanges, ComponentRef, AfterViewChecked, AfterContentInit, Injector, Type } from '@angular/core';
3
1
  import * as _praxisui_core from '@praxisui/core';
4
- 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, 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 } from '@praxisui/core';
2
+ 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, TableConfigInput, PraxisQueryFilterExpression, RecordRelatedSurfaceContextPack, PraxisResourceEvent, LoadingState, ColumnDefinition, RichBlockNode, EmptyAction, 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, ResourceQuickViewBinding, ApiEndpoint, JsonLogicExpression, PraxisPresentationVisualizationKind, PraxisTableCellVisualizationConstraint, PraxisPresentationVisualizationThreshold, PraxisPresentationVisualizationTone, GlobalActionCatalogEntry, IconPickerService, SurfaceOpenPayload, GlobalActionField, FieldDefinition, PraxisRuntimeConditionalEffectRule, PraxisJsonLogicService, DiscoveredResourceOption, TableConfigService, SettingsValueProvider as SettingsValueProvider$1, ResourceQuickConnectComponent, AnalyticsSchemaContractService, AnalyticsPresentationResolver, RichPresenterNode, RichComposeNode, ComponentAuthoringManifest, AiCapability, AiCapabilityCategory, AiValueKind, AiCapabilityCatalog, TableDrawerConfig, PraxisAnalyticalDrawerTab, PraxisPresentationVisualizationConfig, PraxisAnalyticalDrawerSchema, SafeExpressionEvaluator, PraxisComputedFieldsConfig, PraxisComputedFieldDefinition, GovernedPagePreviewWidgetAdapter, WidgetInstance } from '@praxisui/core';
3
+ export { DynamicDataCollection, DynamicDataRecord, DynamicRecordMeta, ResourceLinkItem, ResourceLinks, createDynamicRecord, extractRecordId, isDynamicDataRecord, resolveDataField } from '@praxisui/core';
4
+ import * as i0 from '@angular/core';
5
+ import { InjectionToken, AfterViewInit, OnDestroy, EventEmitter, ElementRef, Provider, OnInit, OnChanges, DoCheck, DestroyRef, ChangeDetectorRef, NgZone, SimpleChanges, ComponentRef, AfterViewChecked, AfterContentInit, TemplateRef, Injector, Type } from '@angular/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';
@@ -39,6 +40,32 @@ interface TableCollectionOutcome {
39
40
  }>;
40
41
  }
41
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
+
42
69
  interface ActionLike {
43
70
  action?: string;
44
71
  id?: string;
@@ -51,6 +78,23 @@ interface ActionLike {
51
78
  }
52
79
  declare function getActionId(action: ActionLike): string;
53
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' | 'quick-filter' | 'advanced-filter';
97
+ }
54
98
  declare const PRAXIS_TABLE_TOOLBAR_APPEARANCE_PRESETS: Record<string, TableToolbarAppearanceConfig>;
55
99
  declare const PRAXIS_TABLE_TOOLBAR_DEFAULT_APPEARANCE: InjectionToken<TableToolbarAppearanceConfig>;
56
100
  declare const PRAXIS_TABLE_TOOLBAR_TOKEN_PRESETS: InjectionToken<Record<string, TableToolbarAppearanceConfig>>;
@@ -86,8 +130,11 @@ declare class PraxisTableToolbar implements AfterViewInit, OnDestroy {
86
130
  evaluationContext: Record<string, any> | null;
87
131
  activeQuickFilterId: string | null;
88
132
  activeDensity: TableToolbarAppearanceDensity | null;
133
+ activeCrossFilters: PraxisTableCrossFilterItem[];
89
134
  /** @internal Used by PraxisTable so toolbar menu decisions materialize through the table runtime. */
90
135
  columnVisibilityController?: (field: string, visible: boolean) => void;
136
+ readonly clearCrossFilter: EventEmitter<PraxisTableCrossFilterItem>;
137
+ readonly clearAllCrossFilters: EventEmitter<void>;
91
138
  toolbarAction: EventEmitter<Pick<ToolbarActionEvent<Record<string, unknown>>, "action" | "actionConfig" | "focusOrigin">>;
92
139
  exportAction: EventEmitter<{
93
140
  format: string;
@@ -152,6 +199,7 @@ declare class PraxisTableToolbar implements AfterViewInit, OnDestroy {
152
199
  filter: Record<string, unknown>;
153
200
  icon?: string;
154
201
  }>;
202
+ private normalizeQuickFilterExpression;
155
203
  shouldShowQuickFilters(): boolean;
156
204
  getQuickFiltersLabel(): string;
157
205
  getQuickFilterLabel(filter: {
@@ -163,6 +211,15 @@ declare class PraxisTableToolbar implements AfterViewInit, OnDestroy {
163
211
  id: string;
164
212
  filter: Record<string, unknown>;
165
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;
166
223
  isDensityToggleEnabled(): boolean;
167
224
  getDensityToggleLabel(): string;
168
225
  getDensityOptions(): TableToolbarAppearanceDensity[];
@@ -262,7 +319,7 @@ declare class PraxisTableToolbar implements AfterViewInit, OnDestroy {
262
319
  private sortActions;
263
320
  getExportIcon(format: string): string;
264
321
  static ɵfac: i0.ɵɵFactoryDeclaration<PraxisTableToolbar, [null, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }]>;
265
- 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>;
266
323
  }
267
324
 
268
325
  type ColumnDataType$1 = 'date' | 'number' | 'currency' | 'percentage' | 'string' | 'boolean' | 'custom';
@@ -397,9 +454,12 @@ declare class TableDefaultsProvider {
397
454
  constructor(global: GlobalConfigService);
398
455
  /**
399
456
  * Returns default configuration for a given table identifier.
457
+ * Precedence inside defaults: GlobalConfig.table > createDefaultTableConfig().
400
458
  * @param tableId Table identifier
401
459
  */
402
- getDefaults(_tableId: string): TableConfig;
460
+ getDefaults(_tableId: string, options?: {
461
+ includeGlobal?: boolean;
462
+ }): TableConfig;
403
463
  static ɵfac: i0.ɵɵFactoryDeclaration<TableDefaultsProvider, never>;
404
464
  static ɵprov: i0.ɵɵInjectableDeclaration<TableDefaultsProvider>;
405
465
  }
@@ -422,6 +482,8 @@ type FilterConfig = {
422
482
  /** User-selected extra field ids to show before pinned always-visible */
423
483
  selectedFieldIds?: string[];
424
484
  showAdvanced?: boolean;
485
+ showAddButton?: boolean;
486
+ showFilterSettings?: boolean;
425
487
  mode?: 'filter';
426
488
  changeDebounceMs?: number;
427
489
  allowSaveTags?: boolean;
@@ -460,6 +522,14 @@ type FilterConfig = {
460
522
  useInlineTimeRangeVariant?: boolean;
461
523
  /** Opt-out para mapear treeSelect/multiSelectTree na variante compacta inline. */
462
524
  useInlineTreeSelectVariant?: boolean;
525
+ /** Opt-out para mapear select simples na variante compacta inline. */
526
+ useInlineSelectVariant?: boolean;
527
+ /** Opt-out para mapear multiSelect/chipInput na variante compacta inline. */
528
+ useInlineMultiSelectVariant?: boolean;
529
+ /** Opt-out para mapear input/searchInput na variante compacta inline. */
530
+ useInlineInputVariant?: boolean;
531
+ /** Opt-out para mapear toggle/checkbox/switch na variante compacta inline. */
532
+ useInlineToggleVariant?: boolean;
463
533
  overlayVariant?: 'card' | 'frosted';
464
534
  overlayBackdrop?: boolean;
465
535
  advancedOpenMode?: 'overlay' | 'modal' | 'drawer';
@@ -644,6 +714,7 @@ declare class PraxisFilter implements OnInit, OnChanges, AfterViewInit, OnDestro
644
714
  changeDebounceMs: number;
645
715
  /** Controla a exibição do botão de preferências dentro do filtro */
646
716
  showFilterSettings: boolean;
717
+ private hostShowFilterSettings?;
647
718
  /** Controla a exibição do botão de filtro avançado */
648
719
  showAdvancedButton: boolean;
649
720
  /** Projection of FilterConfig.presentation for standalone and embedded hosts. */
@@ -655,6 +726,7 @@ declare class PraxisFilter implements OnInit, OnChanges, AfterViewInit, OnDestro
655
726
  get advancedActionDisplay(): string;
656
727
  /** Controla a exibição do botão de adicionar campos */
657
728
  showAddButton: boolean;
729
+ private hostShowAddButton?;
658
730
  /** Controla a exibição do botão de limpar filtros */
659
731
  showClearButton: boolean;
660
732
  /** Controla a exibição do botão de pesquisar/aplicar filtros em fluxos manuais. */
@@ -866,6 +938,8 @@ declare class PraxisFilter implements OnInit, OnChanges, AfterViewInit, OnDestro
866
938
  private areMetadataOverrideMapsEqual;
867
939
  /** Force-sync settings coming from parent table config updates. */
868
940
  applyExternalSettings(cfg?: Partial<FilterConfig>): void;
941
+ private activeFilterSettingsRef?;
942
+ private activeFieldEditorRef?;
869
943
  openSettings(): void;
870
944
  createTag(label?: string): void;
871
945
  renameTag(tag: FilterTag, label?: string): void;
@@ -914,6 +988,7 @@ declare class PraxisFilter implements OnInit, OnChanges, AfterViewInit, OnDestro
914
988
  private applySchemaMetasNow;
915
989
  private withFilterMaterialDesignPolicy;
916
990
  private withAdvancedDatePickerTouchPolicy;
991
+ private withAdvancedEntityLookupPresentationPolicy;
917
992
  private isAdvancedDatePickerControl;
918
993
  private buildAdvancedFilterColumn;
919
994
  private isLongTextFilterField;
@@ -1062,6 +1137,7 @@ declare class PraxisFilter implements OnInit, OnChanges, AfterViewInit, OnDestro
1062
1137
  private normalizeFilterFieldValue;
1063
1138
  private getFilterFieldMetaByName;
1064
1139
  private isEntityLookupFilterField;
1140
+ private isIncompleteInlineDateRangeValue;
1065
1141
  private isEffectivelyEmptyFilterValue;
1066
1142
  private syncFormsToDto;
1067
1143
  private updateDisplayedTags;
@@ -1120,6 +1196,8 @@ declare class AnalyticsTableStatsApiService {
1120
1196
  constructor(http: HttpClient, apiUrl: ApiUrlConfig);
1121
1197
  execute(projection: PraxisAnalyticsProjection, queryContext?: PraxisDataQueryContext | null): Observable<AnalyticsTableRow[]>;
1122
1198
  private toTableRows;
1199
+ private projectDimensionValues;
1200
+ private resolveDimensionBucketLabel;
1123
1201
  private resolveTimeSeriesCategory;
1124
1202
  private resolveBucketCategory;
1125
1203
  private resolveBucketKey;
@@ -1134,6 +1212,43 @@ declare class AnalyticsTableStatsApiService {
1134
1212
  static ɵprov: i0.ɵɵInjectableDeclaration<AnalyticsTableStatsApiService>;
1135
1213
  }
1136
1214
 
1215
+ /**
1216
+ * Canonical row click event interface emitted by PraxisTable and PraxisCrud.
1217
+ * Provides typed access to the underlying record, row index, original DOM mouse event,
1218
+ * resource identity, and selection/expansion state.
1219
+ */
1220
+ interface RowClickEvent<T = DynamicDataRecord> {
1221
+ row: T;
1222
+ index: number;
1223
+ originalEvent?: MouseEvent;
1224
+ resourceIdentity?: MaterializedResourceIdentity | string | null;
1225
+ selectionState?: {
1226
+ isSelected: boolean;
1227
+ isExpanded: boolean;
1228
+ };
1229
+ }
1230
+ /**
1231
+ * Event payload emitted when a table row is double clicked.
1232
+ */
1233
+ interface RowDoubleClickEvent<T = DynamicDataRecord> {
1234
+ action?: string;
1235
+ row: T;
1236
+ }
1237
+ /**
1238
+ * Event payload emitted when an analytical drawer is opened from a table row.
1239
+ */
1240
+ interface DrawerOpenEvent<T = DynamicDataRecord> {
1241
+ row: T;
1242
+ tabId?: string;
1243
+ }
1244
+ /**
1245
+ * Event payload emitted when row selections change in the table.
1246
+ */
1247
+ interface RowSelectionChangeEvent<T = DynamicDataRecord> {
1248
+ selected: T[];
1249
+ source?: 'row' | 'header' | 'programmatic';
1250
+ }
1251
+
1137
1252
  interface TableAiNavigationDestinationContext {
1138
1253
  id?: string;
1139
1254
  path: string;
@@ -1261,7 +1376,7 @@ type RuntimeRowAction = {
1261
1376
  __praxisDiscoveryPending?: boolean;
1262
1377
  };
1263
1378
  type ExpansionDetailRuntimeStatus = 'idle' | 'loading' | 'ready' | 'error' | 'blocked';
1264
- type ExpansionDetailResolvedSource = 'inline' | 'resource' | 'resourcePath' | 'hypermedia' | 'fallback';
1379
+ type ExpansionDetailResolvedSource = 'inline' | 'resource' | 'resourcePath' | 'hypermedia' | 'fallback' | 'schema';
1265
1380
  type ExpansionDetailViewState = {
1266
1381
  status: ExpansionDetailRuntimeStatus;
1267
1382
  schema: Record<string, unknown> | null;
@@ -1296,6 +1411,9 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1296
1411
  private analyticsStatsApi?;
1297
1412
  activeRowOverflowMenuTrigger?: MatMenuTrigger;
1298
1413
  private activeRowOverflowMenuTriggerElement?;
1414
+ private activeRowOverflowMenuRow?;
1415
+ private activeRowOverflowMenuSignature?;
1416
+ private reattachingRowOverflowMenuTrigger?;
1299
1417
  private openingRowActions;
1300
1418
  private static readonly CELL_ANIMATION_CHANGE_CACHE_LIMIT;
1301
1419
  private static readonly AI_SELECTION_ROW_LIMIT;
@@ -1312,18 +1430,26 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1312
1430
  private _crudOperationResolver?;
1313
1431
  private readonly runtimeObservationRegistry;
1314
1432
  private readonly detailInlineRenderers;
1433
+ private readonly drawerRegistry;
1434
+ private readonly quickViewService;
1315
1435
  private collectionLinks;
1316
1436
  private collectionCapabilities;
1317
1437
  private collectionCapabilitiesRequestHref;
1318
1438
  private collectionCapabilitiesResolvedHref;
1319
1439
  private collectionCapabilitiesRequestSeq;
1440
+ bulkSyncHandle: TableBulkSyncHandle | null;
1441
+ private readonly bulkClient;
1442
+ private readonly bulkSessions;
1320
1443
  private readonly detailInlineNodeResolvers;
1321
1444
  private readonly detailResourceResolver;
1322
1445
  private runtimeObservationRegistration;
1323
1446
  readonly paginatorSelectConfig: MatPaginatorSelectConfig;
1324
1447
  private static readonly ROW_ANIMATION_PRESETS;
1325
1448
  private static readonly ROW_ANIMATION_PRESET_ALIASES;
1449
+ static ngAcceptInputType_config: TableConfigInput;
1326
1450
  config: TableConfig;
1451
+ private hostInputConfig?;
1452
+ private persistedUserConfig?;
1327
1453
  resourcePath: string;
1328
1454
  data: any[] | null;
1329
1455
  tableId: string;
@@ -1338,7 +1464,21 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1338
1464
  autoOpenSettingsOnOutdated: boolean;
1339
1465
  crudContext: any;
1340
1466
  filterCriteria: Record<string, any>;
1467
+ readonly filterCriteriaChange: EventEmitter<Record<string, any>>;
1468
+ private _filterTeleport;
1469
+ set filterTeleport(value: boolean);
1470
+ get filterTeleport(): boolean;
1471
+ widgetId?: string;
1472
+ readonly filterTemplateSignal: i0.WritableSignal<TemplateRef<unknown> | undefined>;
1473
+ private _filterBarTemplate?;
1474
+ set filterBarTemplate(tpl: TemplateRef<unknown> | undefined);
1475
+ get filterBarTemplate(): TemplateRef<unknown> | undefined;
1476
+ get filterTemplate(): TemplateRef<unknown> | undefined;
1477
+ private readonly widgetEventBus;
1341
1478
  queryContext: PraxisDataQueryContextBridge | null;
1479
+ readonly queryContextClear: EventEmitter<PraxisTableQueryContextClearEvent>;
1480
+ readonly queryContextChange: EventEmitter<PraxisDataQueryContextBridge | null>;
1481
+ activeCrossFilters: PraxisTableCrossFilterItem[];
1342
1482
  aiContext: TableAiContext | null;
1343
1483
  aiAssistantVoiceInputMode: PraxisAssistantVoiceInputMode;
1344
1484
  aiAssistantVoiceLanguage: string;
@@ -1352,10 +1492,10 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1352
1492
  private advancedFilterMetadataOverridesCacheKey;
1353
1493
  private advancedFilterMetadataOverridesCacheSource?;
1354
1494
  private advancedFilterMetadataOverridesCache?;
1355
- rowClick: EventEmitter<any>;
1495
+ rowClick: EventEmitter<RowClickEvent<DynamicDataRecord>>;
1356
1496
  widgetEvent: EventEmitter<any>;
1357
1497
  resourceEvent: EventEmitter<PraxisResourceEvent<unknown>>;
1358
- rowDoubleClick: EventEmitter<any>;
1498
+ rowDoubleClick: EventEmitter<RowDoubleClickEvent<DynamicDataRecord>>;
1359
1499
  rowExpansionChange: EventEmitter<RowExpansionChangeEvent>;
1360
1500
  rowAction: EventEmitter<any>;
1361
1501
  toolbarAction: EventEmitter<ToolbarActionEvent<any>>;
@@ -1376,6 +1516,12 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1376
1516
  loadingStateChange: EventEmitter<LoadingState>;
1377
1517
  collectionLinksChange: EventEmitter<RestApiLinks | null>;
1378
1518
  selectionChange: EventEmitter<any>;
1519
+ drawerOpen: EventEmitter<DrawerOpenEvent<DynamicDataRecord>>;
1520
+ drawerClose: EventEmitter<void>;
1521
+ drawerTabChange: EventEmitter<string>;
1522
+ isAnalyticalDrawerOpen: boolean;
1523
+ analyticalDrawerRow: any | null;
1524
+ activeAnalyticalDrawerTabId?: string;
1379
1525
  private latestLoadingState;
1380
1526
  private loadingIndicatorVisible;
1381
1527
  private loadingIndicatorDelayHandle;
@@ -1392,6 +1538,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1392
1538
  selection: SelectionModel<any>;
1393
1539
  dataSubject: BehaviorSubject<any[]>;
1394
1540
  subscriptions: Subscription[];
1541
+ private surfaceOutcomeOwnerDestroyed;
1395
1542
  showToolbar: boolean;
1396
1543
  hasInitialized: boolean;
1397
1544
  pageIndex: number;
@@ -1421,6 +1568,10 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1421
1568
  private columnReorderUndoSubscription;
1422
1569
  private columnRuntimeMutationOperationCounter;
1423
1570
  private latestColumnRuntimeMutationOperationId;
1571
+ private persistenceContextEpoch;
1572
+ private persistenceContextDestroyed;
1573
+ /** Fence delayed work; requests already sent are not retroactively canceled. */
1574
+ private persistenceGuard;
1424
1575
  private columnRuntimePersistenceInFlight;
1425
1576
  private columnRuntimePersistencePending;
1426
1577
  private columnResizeTransientWidths;
@@ -1441,6 +1592,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1441
1592
  private localFilterFieldMetadataCacheKey;
1442
1593
  private remoteSchemaLoadSequence;
1443
1594
  private enterpriseContextIdentity;
1595
+ private enterpriseContextReady;
1444
1596
  private staleEnterpriseLocalData;
1445
1597
  private remoteDataLoadSequence;
1446
1598
  private analyticsLoadSequence;
@@ -1476,8 +1628,10 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1476
1628
  private rowContextRuntimeByRef;
1477
1629
  private rowDiscoveryQueue;
1478
1630
  private rowDiscoveryActiveRequests;
1631
+ private rowDiscoveryActivePrefetchRequests;
1479
1632
  private rowDiscoveryEpoch;
1480
1633
  private rowDiscoveryMarkForCheckScheduled;
1634
+ private pendingMarkForCheckRows;
1481
1635
  private lastRowDiscoveryScopeKey;
1482
1636
  private readonly i18n;
1483
1637
  private readonly sanitizer;
@@ -1494,6 +1648,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1494
1648
  idField: string;
1495
1649
  horizontalScroll: 'auto' | 'wrap' | 'none';
1496
1650
  private horizontalScrollOverrideSource;
1651
+ private hostHorizontalScrollInput?;
1497
1652
  getToolbarPosition(): 'top' | 'bottom' | 'both';
1498
1653
  shouldShowToolbarTopPlacement(): boolean;
1499
1654
  shouldShowToolbarBottomPlacement(): boolean;
@@ -1578,6 +1733,9 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1578
1733
  getLoadingSurfaceMessage(): string;
1579
1734
  getLoadingSkeletonRows(): number[];
1580
1735
  isLoadingSkeletonAnimated(): boolean;
1736
+ getSetupEmptyStateTitle(): string;
1737
+ getSetupEmptyStateDescription(): string;
1738
+ getSetupEmptyStatePrimaryAction(): EmptyAction | undefined;
1581
1739
  getNoDataStateTitle(): string;
1582
1740
  getNoDataStateDescription(): string | undefined;
1583
1741
  getTableSettingsLabel(): string;
@@ -1611,11 +1769,14 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1611
1769
  getNoDataStateIconContainer(): 'none' | 'circle' | 'soft';
1612
1770
  getNoDataStatePrimaryAction(): any | null;
1613
1771
  getNoDataStateSecondaryActions(): any[];
1772
+ private isAdvancedFiltersEffectivelyEnabled;
1614
1773
  shouldRenderAdvancedFilter(): boolean;
1615
1774
  getAdvancedFilterResourcePath(): string;
1616
1775
  getAdvancedFilterPersistenceKey(): string;
1617
1776
  getAdvancedFilterFormId(): string;
1618
1777
  getAdvancedFilterOpenMode(): 'modal' | 'drawer';
1778
+ shouldShowAdvancedFilterAddButton(): boolean;
1779
+ shouldShowAdvancedFilterSettings(): boolean;
1619
1780
  getAdvancedFilterAlwaysVisibleFields(): string[] | undefined;
1620
1781
  getAdvancedFilterAlwaysVisibleFieldMetadataOverrides(): Record<string, Record<string, any>>;
1621
1782
  getAdvancedFilterFieldMetadata(): FieldMetadata[] | null | undefined;
@@ -1715,6 +1876,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1715
1876
  private syncLocalPageSizeFromConfig;
1716
1877
  private recomputeLocalView;
1717
1878
  private resolveLocalSortField;
1879
+ private resolveColumnSemanticSourceField;
1718
1880
  private setSchemaFieldsSnapshot;
1719
1881
  private setFilterSchemaFieldsSnapshot;
1720
1882
  private inferFilterSchemaSourceFields;
@@ -1730,13 +1892,17 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1730
1892
  private tableConfigKey;
1731
1893
  private filterConfigKey;
1732
1894
  private ensureConfigDefaults;
1895
+ private recomposeEffectiveTableConfig;
1733
1896
  private hasDeclaredAppearanceDensity;
1734
1897
  private hasDeclaredAppearanceSection;
1735
1898
  private shouldApplyAppearanceDefaultValue;
1736
1899
  private mergePersistedTableConfigWithInput;
1900
+ private reconcileTableConfigInputChange;
1737
1901
  private reconcileHostDeclaredTableContract;
1738
1902
  private reconcileHostDeclaredColumns;
1739
1903
  private reconcileHostDeclaredRowActions;
1904
+ private reconcileHostDeclaredBulkActions;
1905
+ private reconcileHostDeclaredFiltering;
1740
1906
  private reconcileHostDeclaredExport;
1741
1907
  private normalizePersistedExportFormats;
1742
1908
  private normalizePersistedRowActionIds;
@@ -1750,6 +1916,13 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1750
1916
  private resolveCollectionCapabilitiesHref;
1751
1917
  private materializeCollectionCreateToolbarAction;
1752
1918
  private materializeCollectionWorkflowToolbarActions;
1919
+ private materializeCollectionBulkSyncToolbarAction;
1920
+ private hasBulkSyncSelection;
1921
+ private tryHandleBulkSyncToolbarAction;
1922
+ private isBulkSyncPending;
1923
+ canShowBulkSyncHandle(): boolean;
1924
+ closeBulkSync(): void;
1925
+ private bulkSyncOperationalIdentity;
1753
1926
  private isCollectionActionDiscoveryEnabled;
1754
1927
  private ensureToolbarConfigForRuntime;
1755
1928
  private buildCollectionCreateToolbarAction;
@@ -1851,6 +2024,10 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1851
2024
  private hasActiveEmptyStateFilters;
1852
2025
  private hasMeaningfulFilterCriteria;
1853
2026
  private hasMeaningfulFilterValue;
2027
+ isStructuralQueryContextField(field: string): boolean;
2028
+ computeActiveCrossFilters(): PraxisTableCrossFilterItem[];
2029
+ onClearCrossFilter(item: PraxisTableCrossFilterItem): void;
2030
+ onClearAllCrossFilters(): void;
1854
2031
  private resolveNoDataStateConfig;
1855
2032
  private isEmptyStateTone;
1856
2033
  private isEmptyStateVariant;
@@ -1872,6 +2049,14 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1872
2049
  * race with the configured request.
1873
2050
  */
1874
2051
  private shouldFetchRemoteDataForQueryChanges;
2052
+ /**
2053
+ * Evaluates whether an external TableConfig change actually modifies remote query parameters
2054
+ * (e.g. resourcePath, page size, sorting criteria or data mode).
2055
+ *
2056
+ * Non-query-affecting updates (such as toolbar actions, capabilities resolution, appearance,
2057
+ * density or empty state) MUST NOT trigger a redundant remote data load or cancel in-flight requests.
2058
+ */
2059
+ private shouldRefetchOnConfigChange;
1875
2060
  private isDebug;
1876
2061
  private connectionKey;
1877
2062
  private saveConnection;
@@ -1955,6 +2140,15 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1955
2140
  private resolveExpansionDetailTimelineExpressionValue;
1956
2141
  private getExpansionDetailTimelineObjectValue;
1957
2142
  private normalizeExpansionDetailCardGridCardContent;
2143
+ /** `visibleWhen` is canonical Json Logic (object or boolean); string DSL is not a valid rule. */
2144
+ private normalizeExpansionDetailVisibleWhen;
2145
+ /**
2146
+ * Visibility gate for every detail node, including host-mediated ones (cardGrid, list, detailList,
2147
+ * timeline) that are not rendered by PraxisRichContent. Mirrors `PraxisRichContent.evaluateRule`:
2148
+ * same context (`row`, `computed`, `detail`), truthiness of the Json Logic result, fail-closed on error.
2149
+ */
2150
+ isExpansionDetailNodeVisible(node: any, row: any, index: number): boolean;
2151
+ private withExpansionDetailParentVisibleWhen;
1958
2152
  private normalizeExpansionDetailMediaBlockAvatar;
1959
2153
  private normalizeExpansionDetailMediaBlockText;
1960
2154
  private normalizeExpansionDetailMediaBlockMeta;
@@ -2010,7 +2204,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2010
2204
  private isExpansionDetailRichListItemActionVisible;
2011
2205
  private evaluateExpansionDetailRichListItemCondition;
2012
2206
  getExpansionDetailRichText(node: any): string;
2013
- getExpansionDetailRichContentContext(row: any, index: number): JsonLogicDataRecord;
2207
+ getExpansionDetailRichContentContext(row: any, index: number, node?: any): JsonLogicDataRecord;
2014
2208
  getExpansionDetailRichContentDocument(node: any): RichContentDocument;
2015
2209
  getExpansionDetailRichContentLayout(node: any): 'block' | 'inline';
2016
2210
  getExpansionDetailRichContentHostCapabilities(row: any): RichBlockHostCapabilities;
@@ -2020,6 +2214,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2020
2214
  private mapExpansionDetailNodeToRichContent;
2021
2215
  private mapExpansionDetailMediaBlockNodeToRichContent;
2022
2216
  private mapExpansionDetailCardNodeToRichContent;
2217
+ private expansionDetailVisibleWhenPatch;
2023
2218
  private mapExpansionDetailStackNodeToRichContent;
2024
2219
  private mapExpansionDetailValueNodeToRichContent;
2025
2220
  private mapExpansionDetailTimelineNodeToRichContent;
@@ -2037,9 +2232,12 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2037
2232
  private resolveExpansionDetailSchemaForRow;
2038
2233
  private resolveExpansionDetailByMode;
2039
2234
  private resolveExpansionDetailInlineSchema;
2235
+ private resolveExpansionDetailFromSchema;
2236
+ private humanizeFieldName;
2040
2237
  private resolveExpansionDetailFromResource;
2041
2238
  private resolveExpansionDetailFromResourcePath;
2042
2239
  private resolveExpansionDetailFromHypermedia;
2240
+ private isDirectRichContentDocument;
2043
2241
  private normalizeExpansionDetailSchemaCandidate;
2044
2242
  private sanitizeExpansionDetailSchema;
2045
2243
  private sanitizeExpansionDetailNodes;
@@ -2093,6 +2291,11 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2093
2291
  private areStringSetsEqual;
2094
2292
  private shouldToggleExpansionOnRowClick;
2095
2293
  private shouldSelectRowOnRowClick;
2294
+ isAnalyticalDrawerEnabled(): boolean;
2295
+ private shouldOpenAnalyticalDrawerOnRowClick;
2296
+ openAnalyticalDrawer(row: any, tabId?: string): void;
2297
+ closeAnalyticalDrawer(): void;
2298
+ onAnalyticalDrawerTabChange(tabId: string): void;
2096
2299
  private getExpansionMotionPreset;
2097
2300
  private getExpansionMotionDurationMs;
2098
2301
  private getExpansionMotionEasingCurve;
@@ -2125,7 +2328,9 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2125
2328
  private showActionFeedbackMessage;
2126
2329
  private emitEventWithActionFeedback;
2127
2330
  private executeConfiguredGlobalAction;
2331
+ private isWritableConfiguredSurfaceOpen;
2128
2332
  private withTableRuntimeContext;
2333
+ private resolveTableSurfaceRuntime;
2129
2334
  private executeSurfaceOpen;
2130
2335
  private resolveConfiguredGlobalActionRef;
2131
2336
  private resolveActionGlobalActionRef;
@@ -2151,6 +2356,8 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2151
2356
  private unwrapCollectionWorkflowResult;
2152
2357
  private showCollectionWorkflowContractError;
2153
2358
  private tryHandleCollectionCreateToolbarAction;
2359
+ private bindDiscoveredSurfaceOutcome;
2360
+ private applySurfaceActionRefresh;
2154
2361
  private resolveBulkExportFormat;
2155
2362
  private isBulkExportActionKey;
2156
2363
  private normalizeExportFormat;
@@ -2185,14 +2392,27 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2185
2392
  onAdvancedFilterSubmit(criteria: Record<string, any>): void;
2186
2393
  onAdvancedFilterChange(criteria: Record<string, any>): void;
2187
2394
  onAdvancedFilterClear(): void;
2395
+ clearAdvancedFilter(): void;
2188
2396
  onQuickFilterChange(event: {
2189
2397
  id: string;
2190
2398
  filter: Record<string, unknown>;
2191
2399
  active: boolean;
2192
2400
  }): void;
2401
+ getConfiguredQuickFilters(): Array<{
2402
+ id: string;
2403
+ label: string;
2404
+ filter: Record<string, unknown>;
2405
+ icon?: string;
2406
+ }>;
2407
+ getQuickFilterManagedFields(): string[];
2408
+ private parseQuickFilterDefinition;
2409
+ getEffectiveEditableFilterCriteria(): Record<string, any>;
2410
+ private reconcileEditableQueryContextFilters;
2411
+ private syncQuickFilterStateFromEffectiveCriteria;
2193
2412
  private clearQuickFilterRuntimeState;
2194
2413
  private hasEquivalentFilterCriteria;
2195
- private applyAdvancedFilterCriteria;
2414
+ private lastAppliedFilterCriteria;
2415
+ applyAdvancedFilterCriteria(criteria: Record<string, any> | null | undefined, reason?: string): void;
2196
2416
  private setAdvancedFilterCriteria;
2197
2417
  private syncAdvancedFilterValueFromCriteria;
2198
2418
  private deriveRuntimeVisibleAdvancedFilterFields;
@@ -2217,6 +2437,9 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2217
2437
  private emitWidgetInputPatch;
2218
2438
  private cloneInputPatch;
2219
2439
  private executeTableEditorApplyPlan;
2440
+ private normalizeResourcePathIdentity;
2441
+ private areColumnsDerivedFromPreviousResource;
2442
+ private stripResourceBoundTableConfigState;
2220
2443
  private attachRuntimeMetadataToEditorConfig;
2221
2444
  private syncInternalFilterSettings;
2222
2445
  private resetPreferencesToDefaults;
@@ -2377,6 +2600,9 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2377
2600
  private buildRowDiscoveryScopeKey;
2378
2601
  private resetRowContextRuntimeState;
2379
2602
  private enqueueRowDiscoveryRequest;
2603
+ private promoteQueuedRowDiscoveryRequest;
2604
+ private prioritizeQueuedPrefetchRowDiscovery;
2605
+ private canDispatchNextRowDiscoveryTask;
2380
2606
  private drainRowDiscoveryQueue;
2381
2607
  private buildRowDiscoveryOptions;
2382
2608
  private getRowLinks;
@@ -2444,6 +2670,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2444
2670
  * 3. format (data formatting like dates, numbers, currency)
2445
2671
  */
2446
2672
  getCellValue(rowData: any, column: ColumnDefinition): any;
2673
+ private shouldSuppressIntegerThousandsGrouping;
2447
2674
  private applyImplicitRuntimeCellPresentation;
2448
2675
  private shouldHumanizeRuntimeEnumCell;
2449
2676
  private resolveCellFormattingType;
@@ -2537,6 +2764,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2537
2764
  * Safely access nested properties using dot notation
2538
2765
  */
2539
2766
  private getNestedPropertyValue;
2767
+ private hasNestedProperty;
2540
2768
  /**
2541
2769
  * Verifica se a ordenação está habilitada
2542
2770
  */
@@ -2575,6 +2803,16 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2575
2803
  private isColumnFiltersSupported;
2576
2804
  private isRowDraggingSupported;
2577
2805
  private isRowExpansionSupported;
2806
+ private isSchemaExpansionModeActive;
2807
+ private getVisibleTableFieldNamesSet;
2808
+ private hasCompanionDenormalizedFieldInSchema;
2809
+ private isComplementarySchemaExpansionField;
2810
+ private isPopulatedExpansionRow;
2811
+ private hasNonEmptyExpansionFieldValue;
2812
+ private getComplementarySchemaExpansionFieldsForRow;
2813
+ private getLoadedTableRowsForExpansionCheck;
2814
+ private reconcileExpansionColumnsAfterDataChange;
2815
+ private hasComplementarySchemaExpansionFields;
2578
2816
  private enforceAppearanceSchemaGuards;
2579
2817
  private enforceUnsupportedFeatureGuards;
2580
2818
  getToolbarEvaluationContext(): Record<string, any>;
@@ -2585,6 +2823,11 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2585
2823
  getIconText(row: any, column: ColumnDefinition): string | null;
2586
2824
  getIconRichContentNodes(row: any, column: ColumnDefinition): RichBlockNode[];
2587
2825
  private getIconRawText;
2826
+ /**
2827
+ * Enriquece as linhas com propriedades calculadas declaradas em `computedFields`.
2828
+ * Torna as propriedades virtuais fisicamente acessíveis no objeto da linha (Issue #34).
2829
+ */
2830
+ private enrichRowsWithComputedFields;
2588
2831
  /**
2589
2832
  * Lightweight, controlled evaluator for string/number expressions using row context.
2590
2833
  * Accepts values like '= row.status === "OK" ? "primary" : "warn"'.
@@ -2626,8 +2869,12 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2626
2869
  getBadgeRichContentNodes(row: any, column: ColumnDefinition): RichBlockNode[];
2627
2870
  shouldRenderBadge(row: any, column: ColumnDefinition): boolean;
2628
2871
  getEffectiveRendererType(row: any, column: ColumnDefinition): 'icon' | 'image' | 'badge' | 'link' | 'button' | 'chip' | 'progress' | 'avatar' | 'toggle' | 'menu' | 'html' | 'compose' | 'rating' | 'microVisualization' | null;
2872
+ private readonly microVisualizationSafeHtmlCache;
2873
+ private readonly microVisualizationPageBoundsCache;
2629
2874
  getMicroVisualizationHtml(row: any, column: ColumnDefinition): SafeHtml;
2875
+ private createMicroVisualizationValueFormatter;
2630
2876
  private resolveMicroVisualizationForRow;
2877
+ private resolvePageMicroVisualizationBounds;
2631
2878
  private applyMicroVisualizationExpression;
2632
2879
  private evaluateMicroVisualizationExpression;
2633
2880
  getComposeItems(row: any, column: ColumnDefinition): any[];
@@ -2640,6 +2887,10 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2640
2887
  private asComposeValueItemColumn;
2641
2888
  asItemColumn(base: ColumnDefinition, item: any): any;
2642
2889
  getItemEffectiveType(row: any, column: ColumnDefinition, item: any): any;
2890
+ getEffectiveQuickViewBinding(row: any, column: ColumnDefinition): ResourceQuickViewBinding | null;
2891
+ getComposeValueQuickViewBinding(row: any, column: ColumnDefinition, item: any): ResourceQuickViewBinding | null;
2892
+ getQuickViewEndpointKey(): ApiEndpoint | string | null;
2893
+ getQuickViewTriggerAriaLabel(label: string | null | undefined, column?: ColumnDefinition): string;
2643
2894
  private mergeRenderer;
2644
2895
  private hasRenderableColumnOverride;
2645
2896
  private resolveColumnRuleAnimationCandidate;
@@ -2746,7 +2997,10 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2746
2997
  private emitMetadataChange;
2747
2998
  private emitSchemaStatus;
2748
2999
  getRowId(row: any): any;
3000
+ private preserveSelectionOnNextDataLoad;
2749
3001
  private reconcileSelectionAfterDataChange;
3002
+ private areSelectedRowSnapshotsEquivalent;
3003
+ private serializeSelectedRowSnapshot;
2750
3004
  private getComparableRowIdentity;
2751
3005
  getIdField(): string;
2752
3006
  private getSchemaIdFieldOverride;
@@ -2782,6 +3036,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2782
3036
  getRowSelectionAriaLabel(row: any, index?: number): string;
2783
3037
  getMasterSelectionAriaLabel(): string;
2784
3038
  private selectRowFromUserInteraction;
3039
+ clearSelection(emitEvent?: boolean): void;
2785
3040
  private emitSelectionChange;
2786
3041
  private publishSelectionStatus;
2787
3042
  private getAccessibleRowLabel;
@@ -2822,7 +3077,11 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2822
3077
  getInlineRowActions(row: any): any[];
2823
3078
  getOverflowRowActions(row: any): any[];
2824
3079
  hasOverflowRowActions(row: any): boolean;
3080
+ onRowOverflowMenuTriggerHover(row: any): void;
2825
3081
  onRowOverflowMenuOpened(row: any): void;
3082
+ onRowOverflowMenuClosed(trigger?: MatMenuTrigger): void;
3083
+ private buildRowOverflowMenuSignature;
3084
+ private getCanonicalCrudActionOrderIndex;
2826
3085
  private prepareRowDiscoveryRetry;
2827
3086
  private getVisibleRowActions;
2828
3087
  private getResolvedRowActions;
@@ -2836,6 +3095,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2836
3095
  private getDiscoveredRowCrudActionsFromSnapshot;
2837
3096
  private buildDiscoveredRowCrudAction;
2838
3097
  private getDiscoveredRowSurfaceActionsFromSnapshot;
3098
+ private resolveBaselineCrudActionForRowSurface;
2839
3099
  private getDiscoveredRowWorkflowActionsFromCatalog;
2840
3100
  private getDiscoveredRowWorkflowActionsFromItems;
2841
3101
  private resolveRowCrudCapabilityOperation;
@@ -2876,7 +3136,8 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2876
3136
  private scheduleRowDiscoveryMarkForCheck;
2877
3137
  ngOnDestroy(): void;
2878
3138
  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; }]>;
2879
- 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>;
3139
+ 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; }; }, { "filterCriteriaChange": "filterCriteriaChange"; "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>;
3140
+ static ngAcceptInputType_filterTeleport: unknown;
2880
3141
  static ngAcceptInputType_enableCustomization: unknown;
2881
3142
  }
2882
3143
 
@@ -3076,10 +3337,11 @@ interface RendererFieldOption {
3076
3337
  isVisible: boolean;
3077
3338
  isHidden?: boolean;
3078
3339
  }
3079
- type ComposePresetId = 'personAvatar' | 'contactTwoLines' | 'documentEmail' | 'statusChip';
3340
+ type ComposePresetId = 'personAvatar' | 'roleDepartment' | 'contactTwoLines' | 'documentEmail' | 'statusChip';
3080
3341
  declare class ColumnsConfigEditorComponent implements OnInit, OnChanges, OnDestroy {
3081
3342
  private cdr;
3082
3343
  private readonly i18n;
3344
+ private readonly jsonLogic;
3083
3345
  tx(key: string, fallback: string): string;
3084
3346
  readonly ratingAriaLabelPlaceholder: string;
3085
3347
  readonly ratingRendererHint: string;
@@ -3092,6 +3354,13 @@ declare class ColumnsConfigEditorComponent implements OnInit, OnChanges, OnDestr
3092
3354
  type?: string;
3093
3355
  tableHidden?: boolean;
3094
3356
  hidden?: boolean;
3357
+ options?: Array<{
3358
+ value?: any;
3359
+ key?: any;
3360
+ label?: string;
3361
+ text?: string;
3362
+ }>;
3363
+ enumValues?: Array<string | number>;
3095
3364
  xUi?: Record<string, any>;
3096
3365
  ui?: Record<string, any>;
3097
3366
  }>;
@@ -3122,7 +3391,22 @@ declare class ColumnsConfigEditorComponent implements OnInit, OnChanges, OnDestr
3122
3391
  condOverridesSelectedIndex: number;
3123
3392
  getConditionalOverrides(): any[];
3124
3393
  ensureConditionalOverrides(): any[];
3394
+ getColumnActiveRendererIcon(column: ColumnDefinition | null | undefined): string | null;
3395
+ getColumnActiveRendererTooltip(column: ColumnDefinition | null | undefined): string;
3396
+ getFieldDomainOptions(fieldName: string | undefined): Array<{
3397
+ value: string | number | boolean;
3398
+ label: string;
3399
+ }>;
3400
+ getSelectedColumnDomainOptions(): Array<{
3401
+ value: string | number | boolean;
3402
+ label: string;
3403
+ }>;
3404
+ getFilteredOverrideConditionValueOptions(condition: any): Array<{
3405
+ value: string;
3406
+ label: string;
3407
+ }>;
3125
3408
  addConditionalOverride(): void;
3409
+ generateDomainConditionalBadges(): void;
3126
3410
  removeConditionalOverride(index: number): void;
3127
3411
  duplicateConditionalOverride(index: number): void;
3128
3412
  onConditionalOverrideReorder(event: any): void;
@@ -3131,6 +3415,18 @@ declare class ColumnsConfigEditorComponent implements OnInit, OnChanges, OnDestr
3131
3415
  getJsonLogicSummary(value: JsonLogicExpression | null | undefined): string;
3132
3416
  private parseJsonLogicText;
3133
3417
  setConditionalOverrideCondition(index: number, raw: string): void;
3418
+ readonly overrideConditionOperators: readonly ["===", "==", "!==", "!=", ">", ">=", "<", "<=", "truthy", "falsy"];
3419
+ private normalizeConditionFieldName;
3420
+ getOverrideConditionField(condition: any): string;
3421
+ getOverrideConditionOperator(condition: any): string;
3422
+ getOverrideConditionValue(condition: any): string;
3423
+ setOverrideGuidedCondition(index: number, patch: {
3424
+ field?: string;
3425
+ operator?: string;
3426
+ value?: string;
3427
+ }): void;
3428
+ private extractGuidedJsonLogicCondition;
3429
+ private coerceGuidedScalar;
3134
3430
  getOverrideField(path: string): any;
3135
3431
  setOverrideField(path: string, value: any): void;
3136
3432
  setOverrideJsonLogicField(path: string, raw: string): void;
@@ -3139,13 +3435,19 @@ declare class ColumnsConfigEditorComponent implements OnInit, OnChanges, OnDestr
3139
3435
  item: any;
3140
3436
  index: number;
3141
3437
  }>;
3438
+ addOverrideComposeItem(type: 'value' | 'badge' | 'icon' | 'chip' | 'progress' | 'avatar' | 'link' | 'button' | 'rating' | 'html'): void;
3142
3439
  addOverrideComposeValueItem(): void;
3440
+ moveOverrideComposeItem(index: number, delta: -1 | 1): void;
3441
+ duplicateOverrideComposeItem(index: number): void;
3442
+ removeOverrideComposeItem(index: number): void;
3443
+ setOverrideComposeItemProp(index: number, path: string, value: any): void;
3143
3444
  setOverrideComposeValueItemField(index: number, field: string): void;
3144
3445
  setOverrideComposeValueItemEmphasis(index: number, emphasis: string): void;
3145
3446
  getOverrideComposeLayoutProp(key: string): any;
3146
3447
  setOverrideComposeLayoutProp(key: string, value: any): void;
3147
3448
  onOverrideTypeChange(ov: any, val: string): void;
3148
3449
  getOverrideMicroVisualizationProp(path: string): any;
3450
+ private ensureOverrideMicroVisualizationObject;
3149
3451
  setOverrideMicroVisualizationProp(path: string, value: any): void;
3150
3452
  getOverrideMicroVisualizationKind(): PraxisPresentationVisualizationKind;
3151
3453
  getOverrideMicroVisualizationGuidance(): 'recommended' | 'conditional';
@@ -3155,15 +3457,30 @@ declare class ColumnsConfigEditorComponent implements OnInit, OnChanges, OnDestr
3155
3457
  isOverrideMicroVisualizationSegmentsKind(): boolean;
3156
3458
  isOverrideMicroVisualizationItemsKind(): boolean;
3157
3459
  isOverrideMicroVisualizationTotalKind(): boolean;
3460
+ isOverrideMicroVisualizationTargetKind(): boolean;
3461
+ isOverrideMicroVisualizationBaselineKind(): boolean;
3462
+ isOverrideMicroVisualizationSuffixKind(): boolean;
3463
+ isOverrideMicroVisualizationScaleBoundsKind(): boolean;
3464
+ isOverrideMicroVisualizationScaleScopeKind(): boolean;
3465
+ isOverrideMicroVisualizationThresholdsSupported(): boolean;
3466
+ getOverrideMicroVisualizationThresholds(): PraxisPresentationVisualizationThreshold[];
3467
+ addOverrideMicroVisualizationThreshold(): void;
3468
+ applyDefaultOverrideMicroVisualizationThresholds(): void;
3469
+ setOverrideMicroVisualizationThresholdNumber(index: number, bound: 'min' | 'max', raw: string): void;
3470
+ setOverrideMicroVisualizationThresholdTone(index: number, tone: PraxisPresentationVisualizationTone): void;
3471
+ moveOverrideMicroVisualizationThreshold(index: number, delta: -1 | 1): void;
3472
+ removeOverrideMicroVisualizationThreshold(index: number): void;
3158
3473
  getOverrideMicroVisualizationGuidanceText(): string;
3159
3474
  exportOverrideJson(index: number): void;
3160
3475
  importOverrideJson(index: number): void;
3161
3476
  rendererValidationErrors: string[];
3477
+ get validationErrors(): string[];
3162
3478
  rendererImportWarnings: string[];
3163
3479
  rendererIsValid: boolean;
3164
3480
  rendererPreviewEnabled: boolean;
3165
3481
  private rendererAppliedSnapshot;
3166
3482
  previewRows: any[];
3483
+ microVisualizationSampleValuesText: string;
3167
3484
  private refreshRendererFieldOptions;
3168
3485
  getRendererFieldOptions(): RendererFieldOption[];
3169
3486
  formatRendererFieldOption(option: RendererFieldOption): string;
@@ -3196,11 +3513,14 @@ declare class ColumnsConfigEditorComponent implements OnInit, OnChanges, OnDestr
3196
3513
  isExistingColumn(column: ColumnDefinition): boolean;
3197
3514
  isCalculatedColumn(column: ColumnDefinition): boolean;
3198
3515
  hasValueGetterError(column: ColumnDefinition): boolean;
3516
+ private hydrateApiColumnFlags;
3199
3517
  private generateAvailableDataSchema;
3200
3518
  /**
3201
3519
  * Map ColumnDataType to FieldSchema type
3202
3520
  */
3203
3521
  private mapColumnTypeToFieldType;
3522
+ private _cachedFormulaKey;
3523
+ private _cachedFormulaRef;
3204
3524
  getColumnFormula(column: ColumnDefinition | null): FormulaDefinition | undefined;
3205
3525
  onFormulaChange(formula: FormulaDefinition): void;
3206
3526
  onGeneratedExpressionChange(expression: string): void;
@@ -3258,7 +3578,23 @@ declare class ColumnsConfigEditorComponent implements OnInit, OnChanges, OnDestr
3258
3578
  setRendererJsonLogicProp(kind: string, path: string, raw: string): void;
3259
3579
  setRendererProp(kind: string, path: string, value: any): void;
3260
3580
  private createDefaultMicroVisualization;
3581
+ private ensureMicroVisualizationObject;
3261
3582
  setMicroVisualizationProp(path: string, value: any): void;
3583
+ isMicroVisualizationThresholdsSupported(): boolean;
3584
+ getMicroVisualizationThresholds(): PraxisPresentationVisualizationThreshold[];
3585
+ addMicroVisualizationThreshold(): void;
3586
+ applyDefaultMicroVisualizationThresholds(): void;
3587
+ setMicroVisualizationThresholdNumber(index: number, bound: 'min' | 'max', raw: string): void;
3588
+ setMicroVisualizationThresholdTone(index: number, tone: PraxisPresentationVisualizationTone): void;
3589
+ moveMicroVisualizationThreshold(index: number, delta: -1 | 1): void;
3590
+ removeMicroVisualizationThreshold(index: number): void;
3591
+ setMicroVisualizationSampleValuesText(raw: string): void;
3592
+ private readonly sanitizer;
3593
+ private readonly microVisualizationPreviewSafeHtmlCache;
3594
+ private memoizeMicroVisualizationSafeHtml;
3595
+ getMicroVisualizationSampleValues(): number[];
3596
+ getPreviewMicroVisualizationSafeHtmlForValue(sampleValue: number): SafeHtml;
3597
+ getPreviewMicroVisualizationHtmlForValue(sampleValue: number): string;
3262
3598
  private _deepClone;
3263
3599
  hasSelectedRenderer(): boolean;
3264
3600
  onApplyRenderer(): void;
@@ -3278,6 +3614,12 @@ declare class ColumnsConfigEditorComponent implements OnInit, OnChanges, OnDestr
3278
3614
  private stripRowPrefixes;
3279
3615
  private _coerceExpected;
3280
3616
  private getNested;
3617
+ private buildPreviewEvaluationContext;
3618
+ evaluatePreviewOverrideCondition(condition: any, row: any): boolean;
3619
+ private mergePreviewRenderer;
3620
+ private hasRenderablePreviewOverride;
3621
+ getEffectivePreviewRenderer(row: any): any;
3622
+ getPreviewSampleRows(): any[];
3281
3623
  getPreviewRendererType(row: any): 'icon' | 'image' | 'badge' | 'link' | 'button' | 'chip' | 'progress' | 'microVisualization' | 'rating' | 'avatar' | 'toggle' | 'menu' | 'html' | 'compose' | null;
3282
3624
  getPreviewIconName(row: any): string | null;
3283
3625
  getPreviewIconColor(row: any): string | null;
@@ -3289,16 +3631,22 @@ declare class ColumnsConfigEditorComponent implements OnInit, OnChanges, OnDestr
3289
3631
  getPreviewImageShape(): 'square' | 'rounded' | 'circle' | undefined;
3290
3632
  getPreviewImageFit(): 'cover' | 'contain' | undefined;
3291
3633
  getPreviewBadgeText(row: any): string | null;
3292
- getPreviewBadgeIcon(_row: any): string | null;
3293
- getPreviewBadgeClasses(_row: any): string[];
3634
+ getPreviewBadgeIcon(row: any): string | null;
3635
+ getPreviewBadgeClasses(row: any): string[];
3636
+ private buildBadgeClassesFromConfig;
3294
3637
  getPreviewLinkText(row: any): string;
3295
3638
  getPreviewLinkHref(row: any): string | null;
3296
3639
  getPreviewButtonLabel(row: any): string;
3297
- getPreviewButtonIcon(): string | null;
3640
+ getPreviewButtonIcon(row?: any): string | null;
3298
3641
  getPreviewChipText(row: any): string | null;
3299
- getPreviewChipClasses(): string[];
3642
+ getPreviewChipIcon(row?: any): string | null;
3643
+ getPreviewChipClasses(row?: any): string[];
3644
+ getComposePreviewButtonLabel(item: any, row: any): string;
3300
3645
  getPreviewProgressValue(row: any): number;
3646
+ getPreviewMicroVisualizationSafeHtml(row: any): SafeHtml;
3301
3647
  getPreviewMicroVisualizationHtml(row: any): string;
3648
+ private createPreviewMicroVisualizationValueFormatter;
3649
+ private resolvePreviewMicroVisualizationConfig;
3302
3650
  getMicroVisualizationGuidance(): 'recommended' | 'conditional';
3303
3651
  getMicroVisualizationKind(): PraxisPresentationVisualizationKind;
3304
3652
  isMicroVisualizationValueKind(): boolean;
@@ -3306,6 +3654,11 @@ declare class ColumnsConfigEditorComponent implements OnInit, OnChanges, OnDestr
3306
3654
  isMicroVisualizationSegmentsKind(): boolean;
3307
3655
  isMicroVisualizationItemsKind(): boolean;
3308
3656
  isMicroVisualizationTotalKind(): boolean;
3657
+ isMicroVisualizationTargetKind(): boolean;
3658
+ isMicroVisualizationBaselineKind(): boolean;
3659
+ isMicroVisualizationSuffixKind(): boolean;
3660
+ isMicroVisualizationScaleBoundsKind(): boolean;
3661
+ isMicroVisualizationScaleScopeKind(): boolean;
3309
3662
  getMicroVisualizationGuidanceText(): string;
3310
3663
  getMicroVisualizationConstraint(): PraxisTableCellVisualizationConstraint;
3311
3664
  getPreviewRatingValue(row: any): number;
@@ -3314,7 +3667,36 @@ declare class ColumnsConfigEditorComponent implements OnInit, OnChanges, OnDestr
3314
3667
  getPreviewRatingOutlineColor(): string | undefined;
3315
3668
  getPreviewRatingSize(): 'small' | 'medium' | 'large';
3316
3669
  getPreviewRatingAriaLabel(): string | undefined;
3317
- getComposePreviewItems(_row: any): any[];
3670
+ getComposePreviewItems(row: any): any[];
3671
+ isComposePreviewMedia(row: any): boolean;
3672
+ getComposePreviewContainerStyle(row: any): Record<string, string>;
3673
+ getComposePreviewValueText(item: any, row: any): string;
3674
+ getComposePreviewValueClasses(item: any): string[];
3675
+ getComposePreviewBadgeText(item: any, row: any): string;
3676
+ getComposePreviewBadgeClasses(item: any): string[];
3677
+ getComposePreviewChipText(item: any, row: any): string;
3678
+ getComposePreviewChipClasses(item: any): string[];
3679
+ getComposePreviewLinkText(item: any, row: any): string;
3680
+ getComposePreviewLinkHref(item: any, row: any): string | null;
3681
+ getComposePreviewIconName(item: any, row: any): string | null;
3682
+ getComposePreviewIconColor(item: any, _row: any): string | null;
3683
+ getComposePreviewIconStyle(item: any, _row: any): Record<string, string> | null;
3684
+ getComposePreviewAvatarStyle(item: any): Record<string, string>;
3685
+ getComposePreviewAvatarInitials(item: any, row: any): string;
3686
+ getComposePreviewAvatarSrc(item: any, row: any): string | null;
3687
+ getComposePreviewAvatarAlt(item: any, row: any): string;
3688
+ getComposePreviewImageSrc(item: any, row: any): string | null;
3689
+ getComposePreviewImageAlt(item: any, row: any): string;
3690
+ getComposePreviewImageStyle(item: any): Record<string, string>;
3691
+ getComposePreviewProgressColor(item: any): string | null;
3692
+ getComposePreviewHtml(item: any, row: any): string;
3693
+ getComposePreviewToggleState(item: any, row: any): boolean;
3694
+ getComposePreviewMenuCount(item: any, row: any): number;
3695
+ private isValidPreviewMediaUrl;
3696
+ private resolvePreviewSafeSrc;
3697
+ /** Mirrors PraxisTable.getSafeHtml token interpolation: `[[field]]` values are HTML-escaped. */
3698
+ private interpolatePreviewHtml;
3699
+ getComposePreviewProgressValue(item: any, row: any): number;
3318
3700
  getComposePreviewRatingValue(item: any, row: any): number;
3319
3701
  getComposePreviewRatingMax(item: any): number;
3320
3702
  getComposePreviewRatingColor(item: any): string | undefined;
@@ -3330,7 +3712,10 @@ declare class ColumnsConfigEditorComponent implements OnInit, OnChanges, OnDestr
3330
3712
  getPreviewToggleState(row: any): boolean;
3331
3713
  getPreviewMenuCount(row: any): number;
3332
3714
  getPreviewHtml(row: any): string;
3333
- trackByIdx: (_: number, item: any) => number;
3715
+ getPreviewProgressColor(row: any): string | null;
3716
+ /** Preview rows are re-cloned on every read; the sample slot index is their stable identity. */
3717
+ trackByIdx: (index: number, _item: unknown) => number;
3718
+ private validateMicroVisualizationThresholds;
3334
3719
  private validateRenderer;
3335
3720
  private readonly _emptyMappingRef;
3336
3721
  composeSelectedIndex: number;
@@ -3348,10 +3733,13 @@ declare class ColumnsConfigEditorComponent implements OnInit, OnChanges, OnDestr
3348
3733
  onComposeReorder(event: any): void;
3349
3734
  selectComposeItem(index: number): void;
3350
3735
  getComposeLayoutProp(key: string): any;
3736
+ hasComposeMediaLeadingItem(): boolean;
3351
3737
  setComposeLayoutProp(key: string, value: any): void;
3352
3738
  getSelectedComposeItem(): any;
3353
3739
  getSelectedComposeItemProp(path: string): any;
3354
3740
  setSelectedComposeItemProp(path: string, value: any): void;
3741
+ getConsolidatedSecondaryColumn(item: any): ExtendedColumnDefinition | null;
3742
+ hideConsolidatedColumn(field: string): void;
3355
3743
  private findRendererFieldByCandidates;
3356
3744
  private normalizeFieldLookup;
3357
3745
  getColumnKeyInputType(column: ColumnDefinition | null): 'text' | 'number' | 'boolean';
@@ -3360,11 +3748,18 @@ declare class ColumnsConfigEditorComponent implements OnInit, OnChanges, OnDestr
3360
3748
  }): void;
3361
3749
  get selectedColumnDataType(): ColumnDataType$1;
3362
3750
  set selectedColumnDataType(value: ColumnDataType$1);
3751
+ private findColumnFieldMetadata;
3752
+ private inferColumnDataTypeFromMetadata;
3363
3753
  getColumnDataType(column: ColumnDefinition | null): ColumnDataType$1;
3364
3754
  /**
3365
- * Infer column data type from field name patterns (shared logic with PraxisTable)
3755
+ * Infer column data type from field name patterns (shared logic with PraxisTable, supporting pt-BR and en-US)
3366
3756
  */
3367
3757
  private inferFieldTypeFromFieldName;
3758
+ inferRecommendedColumnAlignment(column: ColumnDefinition | null, explicitType?: ColumnDataType$1): 'left' | 'center' | 'right';
3759
+ inferRecommendedColumnFormat(column: ColumnDefinition | null, explicitType?: ColumnDataType$1): string;
3760
+ private applySmartCalibrationToColumn;
3761
+ calibrateSelectedColumnFromMetadata(): void;
3762
+ calibrateAllColumnsFromMetadata(): void;
3368
3763
  onDataTypeChange(dataType: ColumnDataType$1): void;
3369
3764
  showDataFormatter(column: ColumnDefinition | null): boolean;
3370
3765
  getFormatterIcon(column: ColumnDefinition | null): string;
@@ -3729,6 +4124,8 @@ declare class FilterSettingsComponent implements OnChanges, AfterViewInit, OnDes
3729
4124
  presentation: FormControl<FilterConfig['presentation']>;
3730
4125
  alwaysVisibleFields: FormControl<string[]>;
3731
4126
  showAdvanced: FormControl<boolean>;
4127
+ showAddButton: FormControl<boolean>;
4128
+ showFilterSettings: FormControl<boolean>;
3732
4129
  mode: FormControl<'filter'>;
3733
4130
  changeDebounceMs: FormControl<number>;
3734
4131
  allowSaveTags: FormControl<boolean>;
@@ -3834,6 +4231,9 @@ declare class FilterSettingsComponent implements OnChanges, AfterViewInit, OnDes
3834
4231
  isPresetActive(key: string): boolean;
3835
4232
  hasBooleanFieldMetadata(): boolean;
3836
4233
  getFieldLabel(name: string): string;
4234
+ getFieldTypeBadge(meta?: FieldMetadata | null): string;
4235
+ getFieldDescription(meta?: FieldMetadata | null): string;
4236
+ getSelectedAlwaysVisibleTriggerLabel(): string;
3837
4237
  onAlwaysVisibleFieldSearchChange(value: string): void;
3838
4238
  clearAlwaysVisibleFieldSearch(): void;
3839
4239
  filteredAlwaysVisibleMetadata(): FieldMetadata[];
@@ -4183,6 +4583,12 @@ declare class TableRulesEditorComponent implements OnChanges, OnInit, OnDestroy
4183
4583
  value: any;
4184
4584
  label: string;
4185
4585
  }>;
4586
+ getDomainRuleTargetField(): string | null;
4587
+ getDomainRuleCandidateOptions(): Array<{
4588
+ value: any;
4589
+ label: string;
4590
+ }>;
4591
+ generateDomainRules(): void;
4186
4592
  isNoValueOperator(op: string): boolean;
4187
4593
  getValuePlaceholder(): string;
4188
4594
  getI18nValuePlaceholder(): string;
@@ -4237,7 +4643,7 @@ declare class TableDetailTreeDraft {
4237
4643
  depth: number;
4238
4644
  } | undefined;
4239
4645
  move(direction: -1 | 1): void;
4240
- add(node: Node, nested?: boolean): void;
4646
+ add(node: Node, nested?: boolean): Node | null;
4241
4647
  }
4242
4648
 
4243
4649
  declare class TableDetailEditorComponent implements OnChanges, OnDestroy {
@@ -4254,6 +4660,7 @@ declare class TableDetailEditorComponent implements OnChanges, OnDestroy {
4254
4660
  dirty: boolean;
4255
4661
  }>;
4256
4662
  private readonly i18n;
4663
+ private readonly jsonLogic;
4257
4664
  private baseline?;
4258
4665
  private emitted?;
4259
4666
  private readonly coupledBefore;
@@ -4265,26 +4672,49 @@ declare class TableDetailEditorComponent implements OnChanges, OnDestroy {
4265
4672
  jsonTouched: boolean;
4266
4673
  advanced: boolean;
4267
4674
  preset: string;
4675
+ /** True when the last "add inside" was refused because the block cannot live inside a card grid card. */
4676
+ addRejected: boolean;
4268
4677
  readonly presets: string[];
4269
4678
  readonly sourceModes: string[];
4270
4679
  readonly resourceKinds: string[];
4271
4680
  readonly resourcePathMethods: string[];
4681
+ readonly cardGridColumnOptions: Array<'auto' | 1 | 2 | 3 | 4>;
4682
+ readonly cardVariants: Array<'outlined' | 'elevated' | 'filled' | 'plain' | 'transparent'>;
4683
+ readonly cardSizes: Array<'sm' | 'md' | 'lg'>;
4684
+ readonly cardDensities: Array<'compact' | 'comfortable'>;
4685
+ readonly composeLayouts: Array<'flex' | 'grid'>;
4686
+ readonly composeDirections: Array<'row' | 'column'>;
4687
+ readonly composeGaps: Array<'xs' | 'sm' | 'md' | 'lg' | 'xl'>;
4688
+ readonly composeAlignItemsOptions: Array<'' | 'start' | 'center' | 'end' | 'stretch'>;
4689
+ readonly badgePresetOptions: Array<'default' | 'softPill' | 'solidPill' | 'outlinedTag' | 'compactSquare' | 'custom'>;
4690
+ readonly iconSurfacePresetOptions: Array<'none' | 'softTile' | 'circleBadge' | 'outlinedTile' | 'elevatedTile' | 'custom'>;
4691
+ readonly semanticTones: Array<'' | 'neutral' | 'info' | 'primary' | 'secondary' | 'tertiary' | 'success' | 'warning' | 'danger'>;
4692
+ readonly conditionOperators: Array<'===' | '!=' | '>' | '>=' | '<' | '<=' | 'truthy' | 'falsy'>;
4272
4693
  fallbackModes(): string[];
4273
- sample: string;
4694
+ sample: 'A' | 'B' | 'C';
4274
4695
  get previewContext(): {
4275
- row: {
4276
- id: string;
4277
- note: string;
4278
- status: string;
4279
- progress: number;
4280
- };
4696
+ row: Record<string, unknown>;
4281
4697
  };
4698
+ private projectDetailNodeToRichBlockNodes;
4282
4699
  /** Local presenter projection only; never used as an authoring/save source. */
4283
4700
  previewNodes(): RichBlockNode[];
4701
+ /**
4702
+ * Returns structured preview groups so `cardGrid` blocks render with their real
4703
+ * multi-column CSS Grid (`columns` and `minCardWidth`) and headers in the preview canvas.
4704
+ */
4705
+ previewCardGridGroups(): Array<{
4706
+ isCardGrid: boolean;
4707
+ title?: string;
4708
+ subtitle?: string;
4709
+ gridTemplateColumns?: string;
4710
+ cards?: RichBlockNode[];
4711
+ nodes?: RichBlockNode[];
4712
+ }>;
4284
4713
  previewRichContentDocuments(): RichContentDocument[];
4285
4714
  richContentEditorInputs(): PraxisRichContentEditorInputs | null;
4286
4715
  applyRichContentEditor(): void;
4287
- addPreset(preset: 'callout' | 'richCard'): void;
4716
+ addPreset(preset: 'callout' | 'richCard' | 'richDetailGrid'): void;
4717
+ effectiveNodeType(node?: Record<string, any> | undefined): string;
4288
4718
  nodeLabel(node: Record<string, any>): string;
4289
4719
  nodeIcon(node: Record<string, any>): string;
4290
4720
  canMove(direction: -1 | 1): boolean;
@@ -4323,10 +4753,75 @@ declare class TableDetailEditorComponent implements OnChanges, OnDestroy {
4323
4753
  canNest(): boolean;
4324
4754
  move(direction: -1 | 1): void;
4325
4755
  remove(): void;
4756
+ fieldValue(field: string): string;
4326
4757
  edit(field: string, value: string): void;
4327
4758
  fields(): string[];
4328
4759
  isAdvancedNode(): boolean;
4760
+ availableColumns(): Array<{
4761
+ field: string;
4762
+ label: string;
4763
+ }>;
4764
+ supportsFieldBinding(): boolean;
4765
+ boundColumnField(): string;
4766
+ bindColumnField(fieldName: string): void;
4767
+ cardGridColumnsValue(): 'auto' | 1 | 2 | 3 | 4;
4768
+ setCardGridColumns(value: 'auto' | 1 | 2 | 3 | 4): void;
4769
+ cardGridMinWidthValue(): number;
4770
+ setCardGridMinWidth(value: number | string): void;
4771
+ cardVariantValue(): 'outlined' | 'elevated' | 'filled' | 'plain' | 'transparent';
4772
+ setCardVariant(variant: 'outlined' | 'elevated' | 'filled' | 'plain' | 'transparent' | 'soft'): void;
4773
+ cardSizeValue(): 'sm' | 'md' | 'lg';
4774
+ setCardSize(size: 'sm' | 'md' | 'lg'): void;
4775
+ cardDensityValue(): 'compact' | 'comfortable';
4776
+ setCardDensity(density: 'compact' | 'comfortable' | 'spacious'): void;
4777
+ composeLayoutValue(): 'flex' | 'grid';
4778
+ setComposeLayout(layout: 'flex' | 'grid'): void;
4779
+ composeDirectionValue(): 'row' | 'column';
4780
+ setComposeDirection(direction: 'row' | 'column'): void;
4781
+ composeGapValue(): 'xs' | 'sm' | 'md' | 'lg' | 'xl';
4782
+ setComposeGap(gap: 'xs' | 'sm' | 'md' | 'lg' | 'xl'): void;
4783
+ composeAlignItemsValue(): '' | 'start' | 'center' | 'end' | 'stretch';
4784
+ setComposeAlignItems(align: '' | 'start' | 'center' | 'end' | 'stretch' | 'flex-start' | 'flex-end'): void;
4785
+ composeWrapValue(): boolean;
4786
+ setComposeWrap(wrap: boolean): void;
4787
+ supportsTone(): boolean;
4788
+ toneValue(): string;
4789
+ setTone(tone: string): void;
4790
+ supportsStyleControls(): boolean;
4791
+ nodeStyleValue(key: string): string;
4792
+ setNodeStyleValue(key: string, value: string): void;
4793
+ hasNodeAppearanceOverrides(): boolean;
4794
+ resetNodeAppearance(): void;
4795
+ badgeAppearancePreset(): 'default' | 'softPill' | 'solidPill' | 'outlinedTag' | 'compactSquare' | 'custom';
4796
+ applyBadgeAppearancePreset(preset: 'default' | 'softPill' | 'solidPill' | 'outlinedTag' | 'compactSquare' | 'custom'): void;
4797
+ iconSurfacePreset(): 'none' | 'softTile' | 'circleBadge' | 'outlinedTile' | 'elevatedTile' | 'custom';
4798
+ applyIconSurfacePreset(preset: 'none' | 'softTile' | 'circleBadge' | 'outlinedTile' | 'elevatedTile' | 'custom'): void;
4799
+ canConvertSelectedToRichContent(): boolean;
4800
+ private isLosslesslyConvertibleToRichContent;
4801
+ /**
4802
+ * Losslessly converts the selected `cardGrid` or `card` block (or its parent `cardGrid`
4803
+ * when a card inside `cardGrid.cards` is selected) into a canonical `richContent` node
4804
+ * so the user can continue authoring in the full embedded `PraxisRichContentConfigEditor`.
4805
+ */
4806
+ convertSelectedToRichContent(): void;
4807
+ supportsVisibleWhen(): boolean;
4808
+ visibleWhenMode(): 'always' | 'conditional' | 'custom';
4809
+ setVisibleWhenMode(mode: 'always' | 'conditional' | 'custom'): void;
4810
+ visibleWhenField(): string;
4811
+ visibleWhenOperator(): '===' | '!=' | '>' | '>=' | '<' | '<=' | 'truthy' | 'falsy';
4812
+ visibleWhenValue(): string;
4813
+ setVisibleWhenRule(patch: {
4814
+ field?: string;
4815
+ operator?: '===' | '!=' | '>' | '>=' | '<' | '<=' | 'truthy' | 'falsy';
4816
+ value?: string;
4817
+ }): void;
4818
+ private parseConditionScalar;
4819
+ private parseGuidedVisibleWhen;
4820
+ private isPreviewNodeVisible;
4329
4821
  private commitTree;
4822
+ /** Offered next to `cardGridContent`/`composeContent` issues: converts legacy fields into canonical presenters. */
4823
+ canNormalizeRichChildren(): boolean;
4824
+ normalizeRichChildren(): void;
4330
4825
  editJson(value: string): void;
4331
4826
  discard(): void;
4332
4827
  static ɵfac: i0.ɵɵFactoryDeclaration<TableDetailEditorComponent, never>;
@@ -4401,16 +4896,24 @@ declare class PraxisTableConfigEditor implements OnInit, OnDestroy, SettingsValu
4401
4896
  isValid$: BehaviorSubject<boolean>;
4402
4897
  isBusy$: BehaviorSubject<boolean>;
4403
4898
  columnMetas: FieldMetadata[];
4899
+ filterSchemaFields: FieldDefinition[];
4404
4900
  filterDtoMetas: FieldMetadata[];
4405
4901
  filterDtoMetasLoading: boolean;
4406
4902
  filterDtoMetasErrorMsg: string;
4903
+ resourceSchemaFields: FieldDefinition[];
4904
+ resourceSchemaMetas: FieldMetadata[];
4905
+ resourceSchemaLoading: boolean;
4906
+ selectedCatalogResource: DiscoveredResourceOption | null;
4407
4907
  private hasCrudOverridesDirty;
4408
4908
  private hasLocalDataInput;
4409
4909
  private filterDtoLoadSeq;
4910
+ private resourceSchemaLoadSeq;
4911
+ private loadedSchemaResourcePath;
4410
4912
  private lastKnownFilterSettings;
4411
4913
  private globalActionValidationIssues;
4412
4914
  private readonly panelData;
4413
4915
  private readonly crudService;
4916
+ private readonly resourceDiscovery;
4414
4917
  private readonly panelRef;
4415
4918
  constructor(cdr: ChangeDetectorRef, configService: TableConfigService);
4416
4919
  tx(key: string, fallback: string): string;
@@ -4427,10 +4930,65 @@ declare class PraxisTableConfigEditor implements OnInit, OnDestroy, SettingsValu
4427
4930
  onFilterSettingsChange(cfg: FilterConfig): void;
4428
4931
  private cloneFilterSettings;
4429
4932
  private isEffectivelyEmptyFilterSettings;
4933
+ private enrichFieldMetadataList;
4934
+ /**
4935
+ * Converte o resumo de campos publicado em `/schemas/catalog` (`responseFields` ou `filterFields`)
4936
+ * em `FieldMetadata[]` para alimentar imediatamente os seletores de chave primária, colunas e
4937
+ * filtros rápidos enquanto `/schemas/filtered` ainda está em resolução ou indisponível.
4938
+ */
4939
+ private extractCatalogFieldMetas;
4430
4940
  getFilterSettingsMetas(): FieldMetadata[];
4431
4941
  getColumnAuthoringMetas(): FieldMetadata[];
4942
+ getRulesEditorFields(): FieldDefinition[];
4943
+ getFieldTypeBadge(option?: FieldMetadata | null): string;
4944
+ getFieldDescription(option?: FieldMetadata | null): string;
4432
4945
  get filteredIdFieldOptions(): FieldMetadata[];
4946
+ getFilteredQuickFilterFieldOptions(currentValue?: string): FieldMetadata[];
4433
4947
  isUsingFilterDtoMetas(): boolean;
4948
+ get toolbarFiltersEnabled(): boolean;
4949
+ get toolbarShowQuickFilters(): boolean;
4950
+ get toolbarShowAdvancedButton(): boolean;
4951
+ get advancedFilterShowAddButton(): boolean;
4952
+ get advancedFilterShowFilterSettings(): boolean;
4953
+ get toolbarQuickFilters(): Array<{
4954
+ id: string;
4955
+ label: string;
4956
+ icon?: string;
4957
+ filter: any;
4958
+ }>;
4959
+ get duplicatedQuickFilterInlineFields(): string[];
4960
+ private inferDefaultStatusFilterField;
4961
+ getQuickFilterValueOptions(fieldName: string, currentValue?: unknown): Array<{
4962
+ value: string;
4963
+ label: string;
4964
+ }>;
4965
+ private updateToolbarFiltersPatch;
4966
+ onToolbarFiltersEnabledChange(enabled: boolean): void;
4967
+ onToolbarShowQuickFiltersChange(show: boolean): void;
4968
+ onToolbarShowAdvancedButtonChange(show: boolean): void;
4969
+ onAdvancedFilterShowAddButtonChange(show: boolean): void;
4970
+ onAdvancedFilterShowFilterSettingsChange(show: boolean): void;
4971
+ applyBooleanQuickFilterPreset(fieldName?: string): void;
4972
+ addQuickFilterScope(): void;
4973
+ removeQuickFilterScope(index: number): void;
4974
+ updateQuickFilterMeta(index: number, patch: {
4975
+ id?: string;
4976
+ label?: string;
4977
+ icon?: string;
4978
+ }): void;
4979
+ getQuickFilterMode(item: {
4980
+ filter?: any;
4981
+ }): 'all' | 'boolean' | 'equals';
4982
+ getQuickFilterField(item: {
4983
+ filter?: any;
4984
+ }): string;
4985
+ getQuickFilterValue(item: {
4986
+ filter?: any;
4987
+ }): any;
4988
+ onQuickFilterModeChange(index: number, mode: 'all' | 'boolean' | 'equals'): void;
4989
+ onQuickFilterFieldChange(index: number, fieldName: string): void;
4990
+ onQuickFilterValueChange(index: number, rawValue: any): void;
4991
+ consolidateDuplicateInlineFilterFields(): void;
4434
4992
  getEffectiveDataMode(): EffectiveDataMode;
4435
4993
  isEffectiveLocalMode(): boolean;
4436
4994
  private resolveLocalDataModeFeatureEnabled;
@@ -4460,8 +5018,16 @@ declare class PraxisTableConfigEditor implements OnInit, OnDestroy, SettingsValu
4460
5018
  private syncFilterSettingsFromEditor;
4461
5019
  private hasAdvancedSettingsProperty;
4462
5020
  private syncLastKnownFilterSettingsFromEditedConfig;
5021
+ onCatalogResourceSelected(resource: DiscoveredResourceOption | null): void;
5022
+ private normalizeResourcePathIdentity;
5023
+ private resetEditedConfigForResourceSwitch;
4463
5024
  onResourcePathChange(val: string): void;
5025
+ get resourceEndpointKey(): any;
5026
+ get resourceApiUrlEntry(): any;
5027
+ private getResourceDiscoveryOptions;
5028
+ private canUseResourceDiscovery;
4464
5029
  private loadFilterDtoMetas;
5030
+ private loadResourceSchemaMetas;
4465
5031
  onIdFieldChange(val: string): void;
4466
5032
  onIdFieldOptionSelected(value: string): void;
4467
5033
  get mobileCardMode(): boolean;
@@ -4526,6 +5092,8 @@ declare class PraxisTableConfigEditor implements OnInit, OnDestroy, SettingsValu
4526
5092
  interface PraxisTableWidgetEditorInputs {
4527
5093
  config?: TableConfig | null;
4528
5094
  resourcePath?: string | null;
5095
+ endpointKey?: ApiEndpoint;
5096
+ apiUrlEntry?: ApiUrlEntry | null;
4529
5097
  horizontalScroll?: 'auto' | 'wrap' | 'none';
4530
5098
  tableId?: string;
4531
5099
  componentInstanceId?: string;
@@ -4555,6 +5123,9 @@ declare class PraxisTableWidgetConfigEditor implements SettingsValueProvider$1,
4555
5123
  getSettingsValue(): PraxisTableWidgetEditorValue;
4556
5124
  onSave(): PraxisTableWidgetEditorValue;
4557
5125
  reset(): void;
5126
+ private normalizeResourcePathIdentity;
5127
+ private stripResourceBoundTableState;
5128
+ private sanitizeEditedConfigForResourceSwitch;
4558
5129
  private buildValue;
4559
5130
  static ɵfac: i0.ɵɵFactoryDeclaration<PraxisTableWidgetConfigEditor, never>;
4560
5131
  static ɵcmp: i0.ɵɵComponentDeclaration<PraxisTableWidgetConfigEditor, "praxis-table-widget-config-editor", never, { "inputs": { "alias": "inputs"; "required": false; }; "widgetKey": { "alias": "widgetKey"; "required": false; }; "context": { "alias": "context"; "required": false; }; }, {}, never, never, true, never>;
@@ -4563,6 +5134,8 @@ declare class PraxisTableWidgetConfigEditor implements SettingsValueProvider$1,
4563
5134
  interface PraxisFilterWidgetEditorInputs {
4564
5135
  presentation?: FilterConfig['presentation'];
4565
5136
  resourcePath?: string | null;
5137
+ endpointKey?: ApiEndpoint;
5138
+ apiUrlEntry?: ApiUrlEntry | null;
4566
5139
  fieldMetadata?: FieldMetadata[] | null;
4567
5140
  filterId?: string;
4568
5141
  formId?: string;
@@ -4584,6 +5157,10 @@ interface PraxisFilterWidgetEditorInputs {
4584
5157
  actionsButtonColor?: 'primary' | 'accent' | 'warn' | 'basic';
4585
5158
  actionsVariant?: 'standard' | 'outlined';
4586
5159
  useInlineSearchableSelectVariant?: boolean;
5160
+ useInlineSelectVariant?: boolean;
5161
+ useInlineMultiSelectVariant?: boolean;
5162
+ useInlineInputVariant?: boolean;
5163
+ useInlineToggleVariant?: boolean;
4587
5164
  useInlineRangeVariant?: boolean;
4588
5165
  useInlineDateVariant?: boolean;
4589
5166
  useInlineDateRangeVariant?: boolean;
@@ -4595,6 +5172,7 @@ interface PraxisFilterWidgetEditorInputs {
4595
5172
  advancedOpenMode?: 'modal' | 'drawer';
4596
5173
  advancedClearButtonsEnabled?: boolean;
4597
5174
  persistenceKey?: string;
5175
+ showAddButton?: boolean;
4598
5176
  showFilterSettings?: boolean;
4599
5177
  enableCustomization?: boolean;
4600
5178
  [key: string]: unknown;
@@ -4606,6 +5184,7 @@ declare class PraxisFilterWidgetConfigEditor implements SettingsValueProvider$1,
4606
5184
  widgetKey?: string;
4607
5185
  resourceEditor?: ResourceQuickConnectComponent;
4608
5186
  private readonly crud;
5187
+ private readonly resourceDiscovery;
4609
5188
  private readonly cdr;
4610
5189
  private readonly i18n;
4611
5190
  resourceError: boolean;
@@ -4614,8 +5193,17 @@ declare class PraxisFilterWidgetConfigEditor implements SettingsValueProvider$1,
4614
5193
  private settingsDirty;
4615
5194
  private loadingResource;
4616
5195
  private fieldRequest;
5196
+ private selectedCatalogResource;
4617
5197
  tx(key: string): string;
4618
5198
  ngAfterViewInit(): void;
5199
+ /**
5200
+ * Hidrata imediatamente os metadados de filtro a partir do resumo de campos publicado
5201
+ * em `/schemas/catalog` (`filterFields` ou `responseFields`) enquanto o schema completo
5202
+ * (`/schemas/filtered`) ainda está carregando ou indisponível no host.
5203
+ */
5204
+ onCatalogResourceSelected(resource: DiscoveredResourceOption | null): void;
5205
+ private extractCatalogFieldMetas;
5206
+ onResourcePathChange(nextPath: string): void;
4619
5207
  loadResourceFields(markDirty?: boolean): Promise<void>;
4620
5208
  private optionalInject;
4621
5209
  set inputs(value: PraxisFilterWidgetEditorInputs | null);
@@ -4646,6 +5234,198 @@ declare class PraxisFilterWidgetConfigEditor implements SettingsValueProvider$1,
4646
5234
  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>;
4647
5235
  }
4648
5236
 
5237
+ /**
5238
+ * Interface mínima estrutural para qualquer componente que suporte teleporte de filtros
5239
+ * (ex.: PraxisTable ou PraxisCrudComponent).
5240
+ */
5241
+ interface PraxisFilterTeleportHost {
5242
+ filterTeleport?: boolean;
5243
+ filterTemplate?: TemplateRef<unknown>;
5244
+ filterBarTemplate?: TemplateRef<unknown>;
5245
+ filterTemplateSignal?: () => TemplateRef<unknown> | undefined;
5246
+ internalTable?: PraxisFilterTeleportHost;
5247
+ }
5248
+ type PraxisFilterOutletTarget = PraxisFilterTeleportHost | TemplateRef<unknown> | null | undefined;
5249
+ /**
5250
+ * Praxis UI Platform — Canonical Filter Outlet Component (Issue #11)
5251
+ *
5252
+ * Renderiza a barra de filtros avançados desacoplada da tabela de dados ou do CRUD,
5253
+ * permitindo acomodá-la em qualquer card, drawer ou cabeçalho superior tático.
5254
+ *
5255
+ * @example
5256
+ * ```html
5257
+ * <div class="filters-card">
5258
+ * <praxis-filter-outlet [target]="heroesCrud" />
5259
+ * </div>
5260
+ *
5261
+ * <praxis-crud #heroesCrud ... />
5262
+ * ```
5263
+ */
5264
+ declare class PraxisFilterOutletComponent implements OnChanges, AfterViewInit, OnDestroy {
5265
+ target: PraxisFilterOutletTarget;
5266
+ private readonly cdr;
5267
+ private readonly targetSignal;
5268
+ private previousHost?;
5269
+ constructor();
5270
+ get resolvedTemplate(): TemplateRef<unknown> | null;
5271
+ ngOnChanges(changes: SimpleChanges): void;
5272
+ ngAfterViewInit(): void;
5273
+ ngOnDestroy(): void;
5274
+ private detachPreviousHost;
5275
+ private attachTeleportTarget;
5276
+ static ɵfac: i0.ɵɵFactoryDeclaration<PraxisFilterOutletComponent, never>;
5277
+ static ɵcmp: i0.ɵɵComponentDeclaration<PraxisFilterOutletComponent, "praxis-filter-outlet", never, { "target": { "alias": "target"; "required": false; }; }, {}, never, never, true, never>;
5278
+ }
5279
+ /**
5280
+ * Praxis UI Platform — Canonical Filter Outlet Directive (Issue #11)
5281
+ *
5282
+ * Diretiva estrutural alternativa para teleporte reativo da barra de filtros.
5283
+ *
5284
+ * @example
5285
+ * ```html
5286
+ * <div class="filters-card">
5287
+ * <ng-container *praxisFilterOutlet="heroesCrud"></ng-container>
5288
+ * </div>
5289
+ * ```
5290
+ */
5291
+ declare class PraxisFilterOutletDirective implements OnChanges, AfterViewInit, OnDestroy {
5292
+ target: PraxisFilterOutletTarget;
5293
+ private readonly viewContainer;
5294
+ private readonly cdr;
5295
+ private readonly targetSignal;
5296
+ private previousHost?;
5297
+ private renderedTemplate;
5298
+ constructor();
5299
+ ngOnChanges(changes: SimpleChanges): void;
5300
+ ngAfterViewInit(): void;
5301
+ ngOnDestroy(): void;
5302
+ private detachPreviousHost;
5303
+ private updateView;
5304
+ static ɵfac: i0.ɵɵFactoryDeclaration<PraxisFilterOutletDirective, never>;
5305
+ static ɵdir: i0.ɵɵDirectiveDeclaration<PraxisFilterOutletDirective, "[praxisFilterOutlet]", never, { "target": { "alias": "praxisFilterOutlet"; "required": false; }; }, {}, never, never, true, never>;
5306
+ }
5307
+
5308
+ interface PraxisScopeBarItem {
5309
+ id: string;
5310
+ label: string;
5311
+ filter?: Record<string, unknown> | string;
5312
+ count?: number | null;
5313
+ icon?: string;
5314
+ tone?: 'default' | 'primary' | 'success' | 'warning' | 'danger' | 'info' | 'ready';
5315
+ isDefault?: boolean;
5316
+ tooltip?: string;
5317
+ }
5318
+ interface PraxisScopeBarActiveBadge {
5319
+ key: string;
5320
+ label: string;
5321
+ valueText: string;
5322
+ source: 'scope' | 'search' | 'external';
5323
+ }
5324
+ interface PraxisScopeBarConfig {
5325
+ items?: PraxisScopeBarItem[];
5326
+ activeId?: string;
5327
+ showOmnibox?: boolean;
5328
+ omniboxPlaceholder?: string;
5329
+ leadIcon?: string;
5330
+ leadLabel?: string;
5331
+ showClearButton?: boolean;
5332
+ clearLabel?: string;
5333
+ searchField?: string;
5334
+ targetWidgetId?: string;
5335
+ targetWidgetIds?: string[];
5336
+ showActiveFilterSummary?: boolean;
5337
+ filterLabels?: Record<string, string>;
5338
+ }
5339
+ declare class PraxisScopeBarComponent implements OnInit {
5340
+ private readonly eventBus;
5341
+ private readonly i18n;
5342
+ private readonly destroyRef;
5343
+ private targetFilterSubscription?;
5344
+ private isApplyingCriteriaToTarget;
5345
+ protected scopeNavigationLabel(): string;
5346
+ protected scopeSearchAriaLabel(): string;
5347
+ protected scopeClearSearchTitle(): string;
5348
+ protected scopeClearSearchAriaLabel(): string;
5349
+ protected scopeFiltersAriaLabel(): string;
5350
+ protected scopeActiveSummaryAriaLabel(): string;
5351
+ protected scopeActiveSummaryLabel(): string;
5352
+ protected scopeRemoveCriterionAriaLabel(label: string): string;
5353
+ protected scopeActiveFilterCountAriaLabel(count: number): string;
5354
+ chipsTrack?: ElementRef<HTMLElement>;
5355
+ set config(val: PraxisScopeBarConfig | undefined | null);
5356
+ private readonly itemsSignal;
5357
+ set items(val: PraxisScopeBarItem[] | undefined);
5358
+ get items(): PraxisScopeBarItem[] | undefined;
5359
+ set activeId(val: string | undefined);
5360
+ get activeId(): string | undefined;
5361
+ readonly activeIdChange: EventEmitter<string>;
5362
+ private readonly showOmniboxSignal;
5363
+ set showOmnibox(val: boolean);
5364
+ get showOmnibox(): boolean;
5365
+ omniboxPlaceholder: string;
5366
+ set omniboxValue(val: string | undefined);
5367
+ get omniboxValue(): string | undefined;
5368
+ readonly omniboxValueChange: EventEmitter<string>;
5369
+ omniboxDebounceMs: number;
5370
+ leadIcon: string;
5371
+ leadLabel?: string;
5372
+ showClearButton: boolean;
5373
+ clearLabel: string;
5374
+ private readonly showActiveFilterSummarySignal;
5375
+ set showActiveFilterSummary(val: boolean);
5376
+ get showActiveFilterSummary(): boolean;
5377
+ private readonly activeFiltersSignal;
5378
+ set activeFilters(val: Record<string, unknown> | undefined | null);
5379
+ get activeFilters(): Record<string, unknown>;
5380
+ readonly activeFiltersChange: EventEmitter<Record<string, unknown>>;
5381
+ private readonly filterLabelsSignal;
5382
+ set filterLabels(val: Record<string, string> | undefined | null);
5383
+ get filterLabels(): Record<string, string>;
5384
+ private readonly targetSignal;
5385
+ set target(val: any);
5386
+ get target(): any;
5387
+ targetWidgetId?: string;
5388
+ targetWidgetIds?: string[];
5389
+ scopeBarId: string;
5390
+ searchField: string;
5391
+ readonly scopeChange: EventEmitter<PraxisScopeBarItem>;
5392
+ readonly searchChange: EventEmitter<string>;
5393
+ readonly filterCriteriaChange: EventEmitter<Record<string, unknown>>;
5394
+ readonly clear: EventEmitter<void>;
5395
+ private readonly searchSubject$;
5396
+ readonly currentActiveId: i0.WritableSignal<string | null>;
5397
+ readonly currentSearchText: i0.WritableSignal<string>;
5398
+ readonly effectiveItems: i0.Signal<PraxisScopeBarItem[]>;
5399
+ readonly resolvedActiveId: i0.Signal<string | null>;
5400
+ readonly hasMainRow: i0.Signal<boolean>;
5401
+ readonly activeFilterBadges: i0.Signal<PraxisScopeBarActiveBadge[]>;
5402
+ readonly activeFilterCount: i0.Signal<number>;
5403
+ ngOnInit(): void;
5404
+ isItemActive(item: PraxisScopeBarItem): boolean;
5405
+ selectScope(item: PraxisScopeBarItem): void;
5406
+ onSearchInput(event: Event): void;
5407
+ clearSearch(): void;
5408
+ removeFilterCriterion(key: string): void;
5409
+ resetFilters(): void;
5410
+ canClear(): boolean;
5411
+ onTrackKeydown(event: KeyboardEvent): void;
5412
+ private resolveTargetWidgetIds;
5413
+ private dispatchFilters;
5414
+ private applyCriteriaToTarget;
5415
+ private bindTargetFilterCriteria;
5416
+ private getScopeManagedKeys;
5417
+ private discoverItemsFromTarget;
5418
+ private humanizeKey;
5419
+ private formatCriterionValue;
5420
+ private normalizeFilter;
5421
+ static ɵfac: i0.ɵɵFactoryDeclaration<PraxisScopeBarComponent, never>;
5422
+ static ɵcmp: i0.ɵɵComponentDeclaration<PraxisScopeBarComponent, "praxis-scope-bar", never, { "config": { "alias": "config"; "required": false; }; "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; }; "showActiveFilterSummary": { "alias": "showActiveFilterSummary"; "required": false; }; "activeFilters": { "alias": "activeFilters"; "required": false; }; "filterLabels": { "alias": "filterLabels"; "required": false; }; "target": { "alias": "target"; "required": false; }; "targetWidgetId": { "alias": "targetWidgetId"; "required": false; }; "targetWidgetIds": { "alias": "targetWidgetIds"; "required": false; }; "scopeBarId": { "alias": "scopeBarId"; "required": false; }; "searchField": { "alias": "searchField"; "required": false; }; }, { "activeIdChange": "activeIdChange"; "omniboxValueChange": "omniboxValueChange"; "activeFiltersChange": "activeFiltersChange"; "scopeChange": "scopeChange"; "searchChange": "searchChange"; "filterCriteriaChange": "filterCriteriaChange"; "clear": "clear"; }, never, ["[scope-bar-filters], praxis-filter-outlet"], true, never>;
5423
+ static ngAcceptInputType_showOmnibox: unknown;
5424
+ static ngAcceptInputType_omniboxDebounceMs: unknown;
5425
+ static ngAcceptInputType_showClearButton: unknown;
5426
+ static ngAcceptInputType_showActiveFilterSummary: unknown;
5427
+ }
5428
+
4649
5429
  declare class DataFormatterComponent implements OnInit, OnChanges {
4650
5430
  private cdr;
4651
5431
  private formattingService;
@@ -4720,6 +5500,7 @@ interface AnalyticsTableConfigAdapterOptions {
4720
5500
  }
4721
5501
  declare class AnalyticsTableConfigAdapterService {
4722
5502
  private readonly i18n?;
5503
+ private readonly statsBuilder;
4723
5504
  constructor(i18n?: PraxisI18nService | undefined);
4724
5505
  toTableConfig(projection: PraxisAnalyticsProjection, options?: AnalyticsTableConfigAdapterOptions): TableConfig;
4725
5506
  private buildColumns;
@@ -4786,6 +5567,7 @@ declare const PRAXIS_FILTER_AUTHORING_MANIFEST: ComponentAuthoringManifest;
4786
5567
  declare class PraxisTableInlineAuthoringEditorComponent implements OnChanges {
4787
5568
  private readonly i18n;
4788
5569
  config: TableConfig;
5570
+ fieldMetadata: FieldMetadata[];
4789
5571
  readonly: boolean;
4790
5572
  configChange: EventEmitter<_praxisui_core.TableConfigModern>;
4791
5573
  workingConfig: TableConfig;
@@ -4805,11 +5587,11 @@ declare class PraxisTableInlineAuthoringEditorComponent implements OnChanges {
4805
5587
  pageSize: number;
4806
5588
  pageSizeOptionsText: string;
4807
5589
  showFirstLastButtons: boolean;
4808
- paginationStrategy: 'client' | 'server';
5590
+ paginationStrategy: 'client' | 'server' | undefined;
4809
5591
  paginationPosition: 'top' | 'bottom' | 'both';
4810
5592
  paginationStyle: 'default' | 'simple' | 'advanced' | 'compact';
4811
5593
  sortingEnabled: boolean;
4812
- sortingStrategy: 'client' | 'server';
5594
+ sortingStrategy: 'client' | 'server' | undefined;
4813
5595
  allowClearSort: boolean;
4814
5596
  defaultSortField: string;
4815
5597
  defaultSortDirection: 'asc' | 'desc';
@@ -4837,11 +5619,11 @@ declare class PraxisTableInlineAuthoringEditorComponent implements OnChanges {
4837
5619
  setPaginationPageSize(value: number | string): void;
4838
5620
  setPaginationPageSizeOptions(value: string): void;
4839
5621
  setPaginationShowFirstLastButtons(value: boolean): void;
4840
- setPaginationStrategy(value: 'client' | 'server'): void;
5622
+ setPaginationStrategy(value: 'client' | 'server' | undefined): void;
4841
5623
  setPaginationPosition(value: 'top' | 'bottom' | 'both'): void;
4842
5624
  setPaginationStyle(value: 'default' | 'simple' | 'advanced' | 'compact'): void;
4843
5625
  setSortingEnabled(value: boolean): void;
4844
- setSortingStrategy(value: 'client' | 'server'): void;
5626
+ setSortingStrategy(value: 'client' | 'server' | undefined): void;
4845
5627
  setSortingAllowClear(value: boolean): void;
4846
5628
  setSortingDefaultField(value: string): void;
4847
5629
  setSortingDefaultDirection(value: 'asc' | 'desc'): void;
@@ -4871,7 +5653,7 @@ declare class PraxisTableInlineAuthoringEditorComponent implements OnChanges {
4871
5653
  private getDefaultSortField;
4872
5654
  private getDefaultSortDirection;
4873
5655
  static ɵfac: i0.ɵɵFactoryDeclaration<PraxisTableInlineAuthoringEditorComponent, never>;
4874
- static ɵcmp: i0.ɵɵComponentDeclaration<PraxisTableInlineAuthoringEditorComponent, "praxis-table-inline-authoring-editor", never, { "config": { "alias": "config"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; }, { "configChange": "configChange"; }, never, never, true, never>;
5656
+ static ɵcmp: i0.ɵɵComponentDeclaration<PraxisTableInlineAuthoringEditorComponent, "praxis-table-inline-authoring-editor", never, { "config": { "alias": "config"; "required": false; }; "fieldMetadata": { "alias": "fieldMetadata"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; }, { "configChange": "configChange"; }, never, never, true, never>;
4875
5657
  }
4876
5658
 
4877
5659
  interface ValueMappingPair {
@@ -4891,6 +5673,10 @@ declare class ValueMappingEditorComponent implements OnInit, OnChanges {
4891
5673
  keyInputType: 'text' | 'number' | 'boolean';
4892
5674
  labelKey: string;
4893
5675
  labelValue: string;
5676
+ domainOptions: Array<{
5677
+ value: string | number | boolean;
5678
+ label: string;
5679
+ }>;
4894
5680
  mappingChange: EventEmitter<{
4895
5681
  [key: string]: string;
4896
5682
  [key: number]: string;
@@ -4901,6 +5687,8 @@ declare class ValueMappingEditorComponent implements OnInit, OnChanges {
4901
5687
  showImportDialog: boolean;
4902
5688
  importJsonText: string;
4903
5689
  importError: string;
5690
+ private readonly i18n;
5691
+ tx(key: string, fallback: string): string;
4904
5692
  constructor(cdr: ChangeDetectorRef, dialog: MatDialog, snackBar: MatSnackBar);
4905
5693
  ngOnInit(): void;
4906
5694
  ngOnChanges(changes: SimpleChanges): void;
@@ -4910,6 +5698,7 @@ declare class ValueMappingEditorComponent implements OnInit, OnChanges {
4910
5698
  isKeyTruthy(pair: ValueMappingPair): boolean;
4911
5699
  getKeyPlaceholder(): string;
4912
5700
  addNewPair(): void;
5701
+ generateFromDomainOptions(): void;
4913
5702
  removePair(index: number): void;
4914
5703
  onKeyChange(index: number, value: string): void;
4915
5704
  onBooleanKeyChange(index: number, change: MatCheckboxChange): void;
@@ -4919,7 +5708,7 @@ declare class ValueMappingEditorComponent implements OnInit, OnChanges {
4919
5708
  importFromJson(): void;
4920
5709
  cancelImport(): void;
4921
5710
  static ɵfac: i0.ɵɵFactoryDeclaration<ValueMappingEditorComponent, never>;
4922
- 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>;
5711
+ 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; }; "domainOptions": { "alias": "domainOptions"; "required": false; }; }, { "mappingChange": "mappingChange"; }, never, never, true, never>;
4923
5712
  }
4924
5713
 
4925
5714
  declare class FormulaGeneratorService {
@@ -5012,6 +5801,12 @@ declare class VisualFormulaBuilderComponent implements OnInit, OnChanges {
5012
5801
  private generateAndEmitExpression;
5013
5802
  get generatedExpression(): string;
5014
5803
  isMultiSelectField(paramKey: string): boolean;
5804
+ onFieldSelectionChange(paramKey: string, nextValue: unknown): void;
5805
+ getOrderedSelectedFields(paramKey: string): string[];
5806
+ moveSelectedField(paramKey: string, index: number, delta: -1 | 1): void;
5807
+ getShortFieldDisplayLabel(fieldName: string): string;
5808
+ formatSelectedFieldLabel(selection: unknown): string;
5809
+ private resolveFieldDisplayLabel;
5015
5810
  getFieldTypeIcon(fieldType: string): string;
5016
5811
  testFormula(): void;
5017
5812
  formatTestResult(result: any): string;
@@ -5465,5 +6260,176 @@ declare function coerceTableComponentEditPlan(value: unknown): TableComponentEdi
5465
6260
  declare function compileTableComponentEditPlans(plans: TableComponentEditPlan[], currentConfig: TableConfig): TableComponentEditPlanCompileResult;
5466
6261
  declare function compileTableComponentEditPlan(plan: TableComponentEditPlan, currentConfig: TableConfig): TableComponentEditPlanCompileResult;
5467
6262
 
5468
- 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 };
5469
- 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 };
6263
+ declare function isAnalyticalDrawerSchema(schema: unknown): schema is PraxisAnalyticalDrawerSchema;
6264
+ declare function interpolateRelationEndpoint(endpoint: string, row: Record<string, unknown> | null | undefined): {
6265
+ url: string;
6266
+ hasMissingTokens: boolean;
6267
+ };
6268
+ declare class PraxisAnalyticalDrawerComponent implements OnInit, OnChanges, OnDestroy {
6269
+ private _isOpen;
6270
+ private previousActiveElement;
6271
+ handleDocumentEscape(event?: Event): void;
6272
+ set isOpen(value: boolean);
6273
+ get isOpen(): boolean;
6274
+ private _resourcePath?;
6275
+ set resourcePath(value: string | undefined);
6276
+ get resourcePath(): string | undefined;
6277
+ private _drawerConfig;
6278
+ set drawerConfig(value: TableDrawerConfig | null);
6279
+ get drawerConfig(): TableDrawerConfig | null;
6280
+ private _row;
6281
+ set row(value: any | null);
6282
+ get row(): any | null;
6283
+ private _relations;
6284
+ set relations(value: Record<string, unknown>);
6285
+ get relations(): Record<string, unknown>;
6286
+ loadingRelations: boolean;
6287
+ closeDrawer: EventEmitter<void>;
6288
+ tabChange: EventEmitter<string>;
6289
+ relationFetch: EventEmitter<{
6290
+ key: string;
6291
+ endpoint: string;
6292
+ }>;
6293
+ protected readonly drawerConfigSignal: i0.WritableSignal<TableDrawerConfig | null>;
6294
+ protected readonly rowSignal: i0.WritableSignal<any>;
6295
+ protected readonly relationsSignal: i0.WritableSignal<Record<string, unknown>>;
6296
+ protected readonly activeTabId: i0.WritableSignal<string>;
6297
+ protected readonly customRelations: i0.WritableSignal<Record<string, unknown>>;
6298
+ protected readonly isFetchingRelations: i0.WritableSignal<boolean>;
6299
+ protected readonly resolvedRemoteConfig: i0.WritableSignal<TableDrawerConfig | null>;
6300
+ protected readonly isResolvingSchema: i0.WritableSignal<boolean>;
6301
+ private readonly evaluator;
6302
+ private readonly http;
6303
+ private readonly injector;
6304
+ private readonly drawerRegistry;
6305
+ private readonly apiUrl;
6306
+ private readonly runtimeContext;
6307
+ private readonly sanitizer;
6308
+ private readonly formattingService;
6309
+ private relationSubs;
6310
+ private schemaSub?;
6311
+ private contextSub?;
6312
+ private static readonly relationCaches;
6313
+ private readonly relationCache;
6314
+ private relationEpoch;
6315
+ constructor();
6316
+ private lastFetchedKey;
6317
+ private lastResolvingKey;
6318
+ private schemaResolutionEpoch;
6319
+ private destroyed;
6320
+ static clearCache(): void;
6321
+ private getContextScopePrefix;
6322
+ private resolveUrl;
6323
+ ngOnInit(): void;
6324
+ ngOnChanges(changes: SimpleChanges): void;
6325
+ ngOnDestroy(): void;
6326
+ getEffectiveDrawerConfig(): TableDrawerConfig | null;
6327
+ private mergeTabs;
6328
+ private resolveRemoteDrawerMetadata;
6329
+ protected onClose(): void;
6330
+ protected onBackdropClick(event: MouseEvent): void;
6331
+ protected selectTab(tabId: string): void;
6332
+ private getAnalyticalSchema;
6333
+ protected resolvedTabs: i0.Signal<PraxisAnalyticalDrawerTab[]>;
6334
+ private generateAutoOverviewProperties;
6335
+ private formatPropertyLabel;
6336
+ protected resolvedTitle: i0.Signal<string>;
6337
+ protected resolvedSubtitle: i0.Signal<string>;
6338
+ protected resolvedClassificationPill: i0.Signal<string>;
6339
+ protected resolvedWidth: i0.Signal<string>;
6340
+ protected getDrawerIcon(): string;
6341
+ protected getEvaluationContext(): Record<string, unknown>;
6342
+ protected isCardGridContent(content: unknown): boolean;
6343
+ protected asCardGrid(content: unknown): {
6344
+ columns?: number;
6345
+ cards?: any[];
6346
+ };
6347
+ protected getGridColumnsStyle(columns?: number): string;
6348
+ protected isRichContentDocument(content: unknown): boolean;
6349
+ protected asRichContentDocument(content: unknown): RichContentDocument;
6350
+ protected isPropertyGrid(content: unknown): boolean;
6351
+ protected asPropertyGrid(content: unknown): any[];
6352
+ protected isArray(val: unknown): boolean;
6353
+ protected evaluateAndFormatMetric(item: any): string;
6354
+ protected evaluatePropertyValue(item: any): string;
6355
+ private readonly microVizSafeHtmlCache;
6356
+ protected renderMicroViz(viz: PraxisPresentationVisualizationConfig | undefined, item: any): SafeHtml;
6357
+ private syncActiveTab;
6358
+ private fetchConfiguredRelations;
6359
+ private invalidateRelations;
6360
+ private cancelRelationRequests;
6361
+ static ɵfac: i0.ɵɵFactoryDeclaration<PraxisAnalyticalDrawerComponent, never>;
6362
+ static ɵcmp: i0.ɵɵComponentDeclaration<PraxisAnalyticalDrawerComponent, "praxis-analytical-drawer", never, { "isOpen": { "alias": "isOpen"; "required": false; }; "resourcePath": { "alias": "resourcePath"; "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>;
6363
+ }
6364
+
6365
+ type AnalyticalDrawerSchemaOrConfig = PraxisAnalyticalDrawerSchema | TableDrawerConfig;
6366
+ declare const PRAXIS_ANALYTICAL_DRAWER_SCHEMAS: InjectionToken<Record<string, AnalyticalDrawerSchemaOrConfig> | Record<string, AnalyticalDrawerSchemaOrConfig>[]>;
6367
+ /**
6368
+ * Registra esquemas de gavetas analíticas por coordenada de recurso (ex.: 'operations/incidentes').
6369
+ * Pode ser chamado no app.config.ts ou em providers de rotas/módulos.
6370
+ */
6371
+ declare function providePraxisAnalyticalDrawerSchemas(schemas: Record<string, AnalyticalDrawerSchemaOrConfig>): Provider;
6372
+ declare class AnalyticalDrawerRegistryService {
6373
+ private readonly registry;
6374
+ constructor();
6375
+ register(resourcePath: string, schema: AnalyticalDrawerSchemaOrConfig): void;
6376
+ registerAll(schemas: Record<string, AnalyticalDrawerSchemaOrConfig>): void;
6377
+ get(resourcePath: string): AnalyticalDrawerSchemaOrConfig | undefined;
6378
+ has(resourcePath: string): boolean;
6379
+ clear(): void;
6380
+ normalizeKey(path: string | undefined | null): string;
6381
+ static ɵfac: i0.ɵɵFactoryDeclaration<AnalyticalDrawerRegistryService, never>;
6382
+ static ɵprov: i0.ɵɵInjectableDeclaration<AnalyticalDrawerRegistryService>;
6383
+ }
6384
+
6385
+ interface ComputedFieldsEvaluationOptions {
6386
+ evaluator?: SafeExpressionEvaluator;
6387
+ formattingService?: {
6388
+ formatValue: (value: any, columnType: any, formatString: string) => any;
6389
+ } | null;
6390
+ }
6391
+ /**
6392
+ * Normaliza a definição de um campo computado (aceita string simples ou objeto estruturado).
6393
+ */
6394
+ declare function normalizeComputedFieldDefinition(raw: PraxisComputedFieldDefinition | string): PraxisComputedFieldDefinition;
6395
+ /**
6396
+ * Formata um valor calculado com suporte a moedas, porcentagens, números e formato compacto corporativo (ex: R$ 3,1M).
6397
+ */
6398
+ declare function formatComputedFieldValue(value: unknown, format?: string, type?: string, formattingService?: ComputedFieldsEvaluationOptions['formattingService']): unknown;
6399
+ /**
6400
+ * Enriquece uma coleção de linhas com as propriedades calculadas declaradas em `computedFieldsConfig`.
6401
+ * Executado durante o pipeline de ingestão de dados, tornando as propriedades computadas
6402
+ * nativamente visíveis para colunas, sorting, filtros, gavetas analíticas e exportação.
6403
+ */
6404
+ declare function applyComputedFieldsToRows<T extends Record<string, any> = Record<string, any>>(rows: T[], computedFieldsConfig?: PraxisComputedFieldsConfig | null, options?: ComputedFieldsEvaluationOptions): T[];
6405
+
6406
+ /** Raw compact schema authorship only; native normalization remains an editor/runtime projection. */
6407
+ declare function decodeTablePageInputs(value: unknown): {
6408
+ document: TableAuthoringDocument | null;
6409
+ diagnostics: EditorDiagnostic[];
6410
+ };
6411
+ /** Core prefixes these widget-relative JSON Pointers; this callback never resolves a source/latest. */
6412
+ declare function validateTablePageWidget(widget: WidgetInstance): readonly {
6413
+ code: string;
6414
+ path: string;
6415
+ }[];
6416
+ declare function encodeTablePageInputs(value: unknown): {
6417
+ inputs: Record<string, unknown> | null;
6418
+ diagnostics: EditorDiagnostic[];
6419
+ };
6420
+ /** No-change values in a materialized native editor cannot author defaults or erase absent keys. */
6421
+ declare function projectTablePageEditorChanges(authoredInputs: unknown, editorBaseline: unknown, editorValue: unknown): {
6422
+ inputs: Record<string, unknown> | null;
6423
+ diagnostics: EditorDiagnostic[];
6424
+ };
6425
+ /** Derive execution-only identity and disable independent preferences. Never persist this projection. */
6426
+ declare function materializeTablePageRuntimeInputs(value: unknown, pageId: string, widgetKey: string, options?: {
6427
+ preview?: boolean;
6428
+ }): {
6429
+ inputs: Record<string, unknown> | null;
6430
+ diagnostics: EditorDiagnostic[];
6431
+ };
6432
+ declare const TABLE_GOVERNED_PAGE_PREVIEW_ADAPTER: GovernedPagePreviewWidgetAdapter;
6433
+
6434
+ 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, TABLE_GOVERNED_PAGE_PREVIEW_ADAPTER, TASK_PRESETS, TableDefaultsProvider, TableRulesEditorComponent, ToolbarActionsEditorComponent, ValueMappingEditorComponent, VisualFormulaBuilderComponent, analyticsComparisonMetricField, applyComputedFieldsToRows, buildTableApplyPlan, coerceTableComponentEditPlan, coerceTableComponentEditPlans, compileTableComponentEditPlan, compileTableComponentEditPlans, createTableAuthoringDocument, decodeTablePageInputs, encodeTablePageInputs, formatComputedFieldValue, getActionId, getEnum, getTableCapabilities, getTableComponentEditPlanCapabilities, interpolateRelationEndpoint, isAnalyticalDrawerSchema, isTableRendererSupportedByRichContentP0, mapTableRendererToRichContentP0, materializeTablePageRuntimeInputs, normalizeComputedFieldDefinition, normalizeTableAuthoringDocument, parseLegacyOrTableDocument, projectTablePageEditorChanges, providePraxisAnalyticalDrawerSchemas, providePraxisFilterMetadata, providePraxisTableMetadata, providePraxisTableToolbarAppearance, serializeTableAuthoringDocument, toCanonicalTableConfig, validateTableAuthoringDocument, validateTablePageWidget };
6435
+ 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, PraxisScopeBarActiveBadge, 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 };