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

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;
@@ -910,10 +984,13 @@ declare class PraxisFilter implements OnInit, OnChanges, AfterViewInit, OnDestro
910
984
  */
911
985
  private restartSchemaLoadForCurrentContext;
912
986
  retrySchemaLoad(): void;
987
+ private shouldAutoPopulateStandaloneFilterFields;
988
+ private pickDefaultStandaloneFilterMetas;
913
989
  private applySchemaMetas;
914
990
  private applySchemaMetasNow;
915
991
  private withFilterMaterialDesignPolicy;
916
992
  private withAdvancedDatePickerTouchPolicy;
993
+ private withAdvancedEntityLookupPresentationPolicy;
917
994
  private isAdvancedDatePickerControl;
918
995
  private buildAdvancedFilterColumn;
919
996
  private isLongTextFilterField;
@@ -1062,7 +1139,9 @@ declare class PraxisFilter implements OnInit, OnChanges, AfterViewInit, OnDestro
1062
1139
  private normalizeFilterFieldValue;
1063
1140
  private getFilterFieldMetaByName;
1064
1141
  private isEntityLookupFilterField;
1142
+ private isIncompleteInlineDateRangeValue;
1065
1143
  private isEffectivelyEmptyFilterValue;
1144
+ private projectQueryPayload;
1066
1145
  private syncFormsToDto;
1067
1146
  private updateDisplayedTags;
1068
1147
  private normalizeMode;
@@ -1120,6 +1199,8 @@ declare class AnalyticsTableStatsApiService {
1120
1199
  constructor(http: HttpClient, apiUrl: ApiUrlConfig);
1121
1200
  execute(projection: PraxisAnalyticsProjection, queryContext?: PraxisDataQueryContext | null): Observable<AnalyticsTableRow[]>;
1122
1201
  private toTableRows;
1202
+ private projectDimensionValues;
1203
+ private resolveDimensionBucketLabel;
1123
1204
  private resolveTimeSeriesCategory;
1124
1205
  private resolveBucketCategory;
1125
1206
  private resolveBucketKey;
@@ -1134,6 +1215,43 @@ declare class AnalyticsTableStatsApiService {
1134
1215
  static ɵprov: i0.ɵɵInjectableDeclaration<AnalyticsTableStatsApiService>;
1135
1216
  }
1136
1217
 
1218
+ /**
1219
+ * Canonical row click event interface emitted by PraxisTable and PraxisCrud.
1220
+ * Provides typed access to the underlying record, row index, original DOM mouse event,
1221
+ * resource identity, and selection/expansion state.
1222
+ */
1223
+ interface RowClickEvent<T = DynamicDataRecord> {
1224
+ row: T;
1225
+ index: number;
1226
+ originalEvent?: MouseEvent;
1227
+ resourceIdentity?: MaterializedResourceIdentity | string | null;
1228
+ selectionState?: {
1229
+ isSelected: boolean;
1230
+ isExpanded: boolean;
1231
+ };
1232
+ }
1233
+ /**
1234
+ * Event payload emitted when a table row is double clicked.
1235
+ */
1236
+ interface RowDoubleClickEvent<T = DynamicDataRecord> {
1237
+ action?: string;
1238
+ row: T;
1239
+ }
1240
+ /**
1241
+ * Event payload emitted when an analytical drawer is opened from a table row.
1242
+ */
1243
+ interface DrawerOpenEvent<T = DynamicDataRecord> {
1244
+ row: T;
1245
+ tabId?: string;
1246
+ }
1247
+ /**
1248
+ * Event payload emitted when row selections change in the table.
1249
+ */
1250
+ interface RowSelectionChangeEvent<T = DynamicDataRecord> {
1251
+ selected: T[];
1252
+ source?: 'row' | 'header' | 'programmatic';
1253
+ }
1254
+
1137
1255
  interface TableAiNavigationDestinationContext {
1138
1256
  id?: string;
1139
1257
  path: string;
@@ -1261,7 +1379,7 @@ type RuntimeRowAction = {
1261
1379
  __praxisDiscoveryPending?: boolean;
1262
1380
  };
1263
1381
  type ExpansionDetailRuntimeStatus = 'idle' | 'loading' | 'ready' | 'error' | 'blocked';
1264
- type ExpansionDetailResolvedSource = 'inline' | 'resource' | 'resourcePath' | 'hypermedia' | 'fallback';
1382
+ type ExpansionDetailResolvedSource = 'inline' | 'resource' | 'resourcePath' | 'hypermedia' | 'fallback' | 'schema';
1265
1383
  type ExpansionDetailViewState = {
1266
1384
  status: ExpansionDetailRuntimeStatus;
1267
1385
  schema: Record<string, unknown> | null;
@@ -1296,6 +1414,9 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1296
1414
  private analyticsStatsApi?;
1297
1415
  activeRowOverflowMenuTrigger?: MatMenuTrigger;
1298
1416
  private activeRowOverflowMenuTriggerElement?;
1417
+ private activeRowOverflowMenuRow?;
1418
+ private activeRowOverflowMenuSignature?;
1419
+ private reattachingRowOverflowMenuTrigger?;
1299
1420
  private openingRowActions;
1300
1421
  private static readonly CELL_ANIMATION_CHANGE_CACHE_LIMIT;
1301
1422
  private static readonly AI_SELECTION_ROW_LIMIT;
@@ -1312,18 +1433,26 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1312
1433
  private _crudOperationResolver?;
1313
1434
  private readonly runtimeObservationRegistry;
1314
1435
  private readonly detailInlineRenderers;
1436
+ private readonly drawerRegistry;
1437
+ private readonly quickViewService;
1315
1438
  private collectionLinks;
1316
1439
  private collectionCapabilities;
1317
1440
  private collectionCapabilitiesRequestHref;
1318
1441
  private collectionCapabilitiesResolvedHref;
1319
1442
  private collectionCapabilitiesRequestSeq;
1443
+ bulkSyncHandle: TableBulkSyncHandle | null;
1444
+ private readonly bulkClient;
1445
+ private readonly bulkSessions;
1320
1446
  private readonly detailInlineNodeResolvers;
1321
1447
  private readonly detailResourceResolver;
1322
1448
  private runtimeObservationRegistration;
1323
1449
  readonly paginatorSelectConfig: MatPaginatorSelectConfig;
1324
1450
  private static readonly ROW_ANIMATION_PRESETS;
1325
1451
  private static readonly ROW_ANIMATION_PRESET_ALIASES;
1452
+ static ngAcceptInputType_config: TableConfigInput;
1326
1453
  config: TableConfig;
1454
+ private hostInputConfig?;
1455
+ private persistedUserConfig?;
1327
1456
  resourcePath: string;
1328
1457
  data: any[] | null;
1329
1458
  tableId: string;
@@ -1338,7 +1467,21 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1338
1467
  autoOpenSettingsOnOutdated: boolean;
1339
1468
  crudContext: any;
1340
1469
  filterCriteria: Record<string, any>;
1470
+ readonly filterCriteriaChange: EventEmitter<Record<string, any>>;
1471
+ private _filterTeleport;
1472
+ set filterTeleport(value: boolean);
1473
+ get filterTeleport(): boolean;
1474
+ widgetId?: string;
1475
+ readonly filterTemplateSignal: i0.WritableSignal<TemplateRef<unknown> | undefined>;
1476
+ private _filterBarTemplate?;
1477
+ set filterBarTemplate(tpl: TemplateRef<unknown> | undefined);
1478
+ get filterBarTemplate(): TemplateRef<unknown> | undefined;
1479
+ get filterTemplate(): TemplateRef<unknown> | undefined;
1480
+ private readonly widgetEventBus;
1341
1481
  queryContext: PraxisDataQueryContextBridge | null;
1482
+ readonly queryContextClear: EventEmitter<PraxisTableQueryContextClearEvent>;
1483
+ readonly queryContextChange: EventEmitter<PraxisDataQueryContextBridge | null>;
1484
+ activeCrossFilters: PraxisTableCrossFilterItem[];
1342
1485
  aiContext: TableAiContext | null;
1343
1486
  aiAssistantVoiceInputMode: PraxisAssistantVoiceInputMode;
1344
1487
  aiAssistantVoiceLanguage: string;
@@ -1352,10 +1495,10 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1352
1495
  private advancedFilterMetadataOverridesCacheKey;
1353
1496
  private advancedFilterMetadataOverridesCacheSource?;
1354
1497
  private advancedFilterMetadataOverridesCache?;
1355
- rowClick: EventEmitter<any>;
1498
+ rowClick: EventEmitter<RowClickEvent<DynamicDataRecord>>;
1356
1499
  widgetEvent: EventEmitter<any>;
1357
1500
  resourceEvent: EventEmitter<PraxisResourceEvent<unknown>>;
1358
- rowDoubleClick: EventEmitter<any>;
1501
+ rowDoubleClick: EventEmitter<RowDoubleClickEvent<DynamicDataRecord>>;
1359
1502
  rowExpansionChange: EventEmitter<RowExpansionChangeEvent>;
1360
1503
  rowAction: EventEmitter<any>;
1361
1504
  toolbarAction: EventEmitter<ToolbarActionEvent<any>>;
@@ -1376,6 +1519,12 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1376
1519
  loadingStateChange: EventEmitter<LoadingState>;
1377
1520
  collectionLinksChange: EventEmitter<RestApiLinks | null>;
1378
1521
  selectionChange: EventEmitter<any>;
1522
+ drawerOpen: EventEmitter<DrawerOpenEvent<DynamicDataRecord>>;
1523
+ drawerClose: EventEmitter<void>;
1524
+ drawerTabChange: EventEmitter<string>;
1525
+ isAnalyticalDrawerOpen: boolean;
1526
+ analyticalDrawerRow: any | null;
1527
+ activeAnalyticalDrawerTabId?: string;
1379
1528
  private latestLoadingState;
1380
1529
  private loadingIndicatorVisible;
1381
1530
  private loadingIndicatorDelayHandle;
@@ -1392,6 +1541,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1392
1541
  selection: SelectionModel<any>;
1393
1542
  dataSubject: BehaviorSubject<any[]>;
1394
1543
  subscriptions: Subscription[];
1544
+ private surfaceOutcomeOwnerDestroyed;
1395
1545
  showToolbar: boolean;
1396
1546
  hasInitialized: boolean;
1397
1547
  pageIndex: number;
@@ -1421,6 +1571,10 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1421
1571
  private columnReorderUndoSubscription;
1422
1572
  private columnRuntimeMutationOperationCounter;
1423
1573
  private latestColumnRuntimeMutationOperationId;
1574
+ private persistenceContextEpoch;
1575
+ private persistenceContextDestroyed;
1576
+ /** Fence delayed work; requests already sent are not retroactively canceled. */
1577
+ private persistenceGuard;
1424
1578
  private columnRuntimePersistenceInFlight;
1425
1579
  private columnRuntimePersistencePending;
1426
1580
  private columnResizeTransientWidths;
@@ -1441,6 +1595,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1441
1595
  private localFilterFieldMetadataCacheKey;
1442
1596
  private remoteSchemaLoadSequence;
1443
1597
  private enterpriseContextIdentity;
1598
+ private enterpriseContextReady;
1444
1599
  private staleEnterpriseLocalData;
1445
1600
  private remoteDataLoadSequence;
1446
1601
  private analyticsLoadSequence;
@@ -1476,8 +1631,10 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1476
1631
  private rowContextRuntimeByRef;
1477
1632
  private rowDiscoveryQueue;
1478
1633
  private rowDiscoveryActiveRequests;
1634
+ private rowDiscoveryActivePrefetchRequests;
1479
1635
  private rowDiscoveryEpoch;
1480
1636
  private rowDiscoveryMarkForCheckScheduled;
1637
+ private pendingMarkForCheckRows;
1481
1638
  private lastRowDiscoveryScopeKey;
1482
1639
  private readonly i18n;
1483
1640
  private readonly sanitizer;
@@ -1494,6 +1651,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1494
1651
  idField: string;
1495
1652
  horizontalScroll: 'auto' | 'wrap' | 'none';
1496
1653
  private horizontalScrollOverrideSource;
1654
+ private hostHorizontalScrollInput?;
1497
1655
  getToolbarPosition(): 'top' | 'bottom' | 'both';
1498
1656
  shouldShowToolbarTopPlacement(): boolean;
1499
1657
  shouldShowToolbarBottomPlacement(): boolean;
@@ -1578,6 +1736,9 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1578
1736
  getLoadingSurfaceMessage(): string;
1579
1737
  getLoadingSkeletonRows(): number[];
1580
1738
  isLoadingSkeletonAnimated(): boolean;
1739
+ getSetupEmptyStateTitle(): string;
1740
+ getSetupEmptyStateDescription(): string;
1741
+ getSetupEmptyStatePrimaryAction(): EmptyAction | undefined;
1581
1742
  getNoDataStateTitle(): string;
1582
1743
  getNoDataStateDescription(): string | undefined;
1583
1744
  getTableSettingsLabel(): string;
@@ -1611,11 +1772,14 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1611
1772
  getNoDataStateIconContainer(): 'none' | 'circle' | 'soft';
1612
1773
  getNoDataStatePrimaryAction(): any | null;
1613
1774
  getNoDataStateSecondaryActions(): any[];
1775
+ private isAdvancedFiltersEffectivelyEnabled;
1614
1776
  shouldRenderAdvancedFilter(): boolean;
1615
1777
  getAdvancedFilterResourcePath(): string;
1616
1778
  getAdvancedFilterPersistenceKey(): string;
1617
1779
  getAdvancedFilterFormId(): string;
1618
1780
  getAdvancedFilterOpenMode(): 'modal' | 'drawer';
1781
+ shouldShowAdvancedFilterAddButton(): boolean;
1782
+ shouldShowAdvancedFilterSettings(): boolean;
1619
1783
  getAdvancedFilterAlwaysVisibleFields(): string[] | undefined;
1620
1784
  getAdvancedFilterAlwaysVisibleFieldMetadataOverrides(): Record<string, Record<string, any>>;
1621
1785
  getAdvancedFilterFieldMetadata(): FieldMetadata[] | null | undefined;
@@ -1715,6 +1879,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1715
1879
  private syncLocalPageSizeFromConfig;
1716
1880
  private recomputeLocalView;
1717
1881
  private resolveLocalSortField;
1882
+ private resolveColumnSemanticSourceField;
1718
1883
  private setSchemaFieldsSnapshot;
1719
1884
  private setFilterSchemaFieldsSnapshot;
1720
1885
  private inferFilterSchemaSourceFields;
@@ -1730,13 +1895,17 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1730
1895
  private tableConfigKey;
1731
1896
  private filterConfigKey;
1732
1897
  private ensureConfigDefaults;
1898
+ private recomposeEffectiveTableConfig;
1733
1899
  private hasDeclaredAppearanceDensity;
1734
1900
  private hasDeclaredAppearanceSection;
1735
1901
  private shouldApplyAppearanceDefaultValue;
1736
1902
  private mergePersistedTableConfigWithInput;
1903
+ private reconcileTableConfigInputChange;
1737
1904
  private reconcileHostDeclaredTableContract;
1738
1905
  private reconcileHostDeclaredColumns;
1739
1906
  private reconcileHostDeclaredRowActions;
1907
+ private reconcileHostDeclaredBulkActions;
1908
+ private reconcileHostDeclaredFiltering;
1740
1909
  private reconcileHostDeclaredExport;
1741
1910
  private normalizePersistedExportFormats;
1742
1911
  private normalizePersistedRowActionIds;
@@ -1750,6 +1919,13 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1750
1919
  private resolveCollectionCapabilitiesHref;
1751
1920
  private materializeCollectionCreateToolbarAction;
1752
1921
  private materializeCollectionWorkflowToolbarActions;
1922
+ private materializeCollectionBulkSyncToolbarAction;
1923
+ private hasBulkSyncSelection;
1924
+ private tryHandleBulkSyncToolbarAction;
1925
+ private isBulkSyncPending;
1926
+ canShowBulkSyncHandle(): boolean;
1927
+ closeBulkSync(): void;
1928
+ private bulkSyncOperationalIdentity;
1753
1929
  private isCollectionActionDiscoveryEnabled;
1754
1930
  private ensureToolbarConfigForRuntime;
1755
1931
  private buildCollectionCreateToolbarAction;
@@ -1851,6 +2027,10 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1851
2027
  private hasActiveEmptyStateFilters;
1852
2028
  private hasMeaningfulFilterCriteria;
1853
2029
  private hasMeaningfulFilterValue;
2030
+ isStructuralQueryContextField(field: string): boolean;
2031
+ computeActiveCrossFilters(): PraxisTableCrossFilterItem[];
2032
+ onClearCrossFilter(item: PraxisTableCrossFilterItem): void;
2033
+ onClearAllCrossFilters(): void;
1854
2034
  private resolveNoDataStateConfig;
1855
2035
  private isEmptyStateTone;
1856
2036
  private isEmptyStateVariant;
@@ -1872,6 +2052,14 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1872
2052
  * race with the configured request.
1873
2053
  */
1874
2054
  private shouldFetchRemoteDataForQueryChanges;
2055
+ /**
2056
+ * Evaluates whether an external TableConfig change actually modifies remote query parameters
2057
+ * (e.g. resourcePath, page size, sorting criteria or data mode).
2058
+ *
2059
+ * Non-query-affecting updates (such as toolbar actions, capabilities resolution, appearance,
2060
+ * density or empty state) MUST NOT trigger a redundant remote data load or cancel in-flight requests.
2061
+ */
2062
+ private shouldRefetchOnConfigChange;
1875
2063
  private isDebug;
1876
2064
  private connectionKey;
1877
2065
  private saveConnection;
@@ -1955,6 +2143,15 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
1955
2143
  private resolveExpansionDetailTimelineExpressionValue;
1956
2144
  private getExpansionDetailTimelineObjectValue;
1957
2145
  private normalizeExpansionDetailCardGridCardContent;
2146
+ /** `visibleWhen` is canonical Json Logic (object or boolean); string DSL is not a valid rule. */
2147
+ private normalizeExpansionDetailVisibleWhen;
2148
+ /**
2149
+ * Visibility gate for every detail node, including host-mediated ones (cardGrid, list, detailList,
2150
+ * timeline) that are not rendered by PraxisRichContent. Mirrors `PraxisRichContent.evaluateRule`:
2151
+ * same context (`row`, `computed`, `detail`), truthiness of the Json Logic result, fail-closed on error.
2152
+ */
2153
+ isExpansionDetailNodeVisible(node: any, row: any, index: number): boolean;
2154
+ private withExpansionDetailParentVisibleWhen;
1958
2155
  private normalizeExpansionDetailMediaBlockAvatar;
1959
2156
  private normalizeExpansionDetailMediaBlockText;
1960
2157
  private normalizeExpansionDetailMediaBlockMeta;
@@ -2010,7 +2207,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2010
2207
  private isExpansionDetailRichListItemActionVisible;
2011
2208
  private evaluateExpansionDetailRichListItemCondition;
2012
2209
  getExpansionDetailRichText(node: any): string;
2013
- getExpansionDetailRichContentContext(row: any, index: number): JsonLogicDataRecord;
2210
+ getExpansionDetailRichContentContext(row: any, index: number, node?: any): JsonLogicDataRecord;
2014
2211
  getExpansionDetailRichContentDocument(node: any): RichContentDocument;
2015
2212
  getExpansionDetailRichContentLayout(node: any): 'block' | 'inline';
2016
2213
  getExpansionDetailRichContentHostCapabilities(row: any): RichBlockHostCapabilities;
@@ -2020,6 +2217,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2020
2217
  private mapExpansionDetailNodeToRichContent;
2021
2218
  private mapExpansionDetailMediaBlockNodeToRichContent;
2022
2219
  private mapExpansionDetailCardNodeToRichContent;
2220
+ private expansionDetailVisibleWhenPatch;
2023
2221
  private mapExpansionDetailStackNodeToRichContent;
2024
2222
  private mapExpansionDetailValueNodeToRichContent;
2025
2223
  private mapExpansionDetailTimelineNodeToRichContent;
@@ -2037,9 +2235,12 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2037
2235
  private resolveExpansionDetailSchemaForRow;
2038
2236
  private resolveExpansionDetailByMode;
2039
2237
  private resolveExpansionDetailInlineSchema;
2238
+ private resolveExpansionDetailFromSchema;
2239
+ private humanizeFieldName;
2040
2240
  private resolveExpansionDetailFromResource;
2041
2241
  private resolveExpansionDetailFromResourcePath;
2042
2242
  private resolveExpansionDetailFromHypermedia;
2243
+ private isDirectRichContentDocument;
2043
2244
  private normalizeExpansionDetailSchemaCandidate;
2044
2245
  private sanitizeExpansionDetailSchema;
2045
2246
  private sanitizeExpansionDetailNodes;
@@ -2093,6 +2294,11 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2093
2294
  private areStringSetsEqual;
2094
2295
  private shouldToggleExpansionOnRowClick;
2095
2296
  private shouldSelectRowOnRowClick;
2297
+ isAnalyticalDrawerEnabled(): boolean;
2298
+ private shouldOpenAnalyticalDrawerOnRowClick;
2299
+ openAnalyticalDrawer(row: any, tabId?: string): void;
2300
+ closeAnalyticalDrawer(): void;
2301
+ onAnalyticalDrawerTabChange(tabId: string): void;
2096
2302
  private getExpansionMotionPreset;
2097
2303
  private getExpansionMotionDurationMs;
2098
2304
  private getExpansionMotionEasingCurve;
@@ -2125,7 +2331,9 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2125
2331
  private showActionFeedbackMessage;
2126
2332
  private emitEventWithActionFeedback;
2127
2333
  private executeConfiguredGlobalAction;
2334
+ private isWritableConfiguredSurfaceOpen;
2128
2335
  private withTableRuntimeContext;
2336
+ private resolveTableSurfaceRuntime;
2129
2337
  private executeSurfaceOpen;
2130
2338
  private resolveConfiguredGlobalActionRef;
2131
2339
  private resolveActionGlobalActionRef;
@@ -2151,6 +2359,8 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2151
2359
  private unwrapCollectionWorkflowResult;
2152
2360
  private showCollectionWorkflowContractError;
2153
2361
  private tryHandleCollectionCreateToolbarAction;
2362
+ private bindDiscoveredSurfaceOutcome;
2363
+ private applySurfaceActionRefresh;
2154
2364
  private resolveBulkExportFormat;
2155
2365
  private isBulkExportActionKey;
2156
2366
  private normalizeExportFormat;
@@ -2185,14 +2395,27 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2185
2395
  onAdvancedFilterSubmit(criteria: Record<string, any>): void;
2186
2396
  onAdvancedFilterChange(criteria: Record<string, any>): void;
2187
2397
  onAdvancedFilterClear(): void;
2398
+ clearAdvancedFilter(): void;
2188
2399
  onQuickFilterChange(event: {
2189
2400
  id: string;
2190
2401
  filter: Record<string, unknown>;
2191
2402
  active: boolean;
2192
2403
  }): void;
2404
+ getConfiguredQuickFilters(): Array<{
2405
+ id: string;
2406
+ label: string;
2407
+ filter: Record<string, unknown>;
2408
+ icon?: string;
2409
+ }>;
2410
+ getQuickFilterManagedFields(): string[];
2411
+ private parseQuickFilterDefinition;
2412
+ getEffectiveEditableFilterCriteria(): Record<string, any>;
2413
+ private reconcileEditableQueryContextFilters;
2414
+ private syncQuickFilterStateFromEffectiveCriteria;
2193
2415
  private clearQuickFilterRuntimeState;
2194
2416
  private hasEquivalentFilterCriteria;
2195
- private applyAdvancedFilterCriteria;
2417
+ private lastAppliedFilterCriteria;
2418
+ applyAdvancedFilterCriteria(criteria: Record<string, any> | null | undefined, reason?: string): void;
2196
2419
  private setAdvancedFilterCriteria;
2197
2420
  private syncAdvancedFilterValueFromCriteria;
2198
2421
  private deriveRuntimeVisibleAdvancedFilterFields;
@@ -2217,6 +2440,9 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2217
2440
  private emitWidgetInputPatch;
2218
2441
  private cloneInputPatch;
2219
2442
  private executeTableEditorApplyPlan;
2443
+ private normalizeResourcePathIdentity;
2444
+ private areColumnsDerivedFromPreviousResource;
2445
+ private stripResourceBoundTableConfigState;
2220
2446
  private attachRuntimeMetadataToEditorConfig;
2221
2447
  private syncInternalFilterSettings;
2222
2448
  private resetPreferencesToDefaults;
@@ -2349,6 +2575,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2349
2575
  private toPortableColumnDefinition;
2350
2576
  private arePortableValuesEqual;
2351
2577
  private applySchemaFieldPresentationsToExistingColumns;
2578
+ private applySchemaComposeItemsQuickView;
2352
2579
  private applySchemaFieldPresentation;
2353
2580
  private applySchemaSemanticCellPresentation;
2354
2581
  private resolveSemanticPresentationColor;
@@ -2377,6 +2604,9 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2377
2604
  private buildRowDiscoveryScopeKey;
2378
2605
  private resetRowContextRuntimeState;
2379
2606
  private enqueueRowDiscoveryRequest;
2607
+ private promoteQueuedRowDiscoveryRequest;
2608
+ private prioritizeQueuedPrefetchRowDiscovery;
2609
+ private canDispatchNextRowDiscoveryTask;
2380
2610
  private drainRowDiscoveryQueue;
2381
2611
  private buildRowDiscoveryOptions;
2382
2612
  private getRowLinks;
@@ -2444,6 +2674,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2444
2674
  * 3. format (data formatting like dates, numbers, currency)
2445
2675
  */
2446
2676
  getCellValue(rowData: any, column: ColumnDefinition): any;
2677
+ private shouldSuppressIntegerThousandsGrouping;
2447
2678
  private applyImplicitRuntimeCellPresentation;
2448
2679
  private shouldHumanizeRuntimeEnumCell;
2449
2680
  private resolveCellFormattingType;
@@ -2537,6 +2768,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2537
2768
  * Safely access nested properties using dot notation
2538
2769
  */
2539
2770
  private getNestedPropertyValue;
2771
+ private hasNestedProperty;
2540
2772
  /**
2541
2773
  * Verifica se a ordenação está habilitada
2542
2774
  */
@@ -2575,6 +2807,16 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2575
2807
  private isColumnFiltersSupported;
2576
2808
  private isRowDraggingSupported;
2577
2809
  private isRowExpansionSupported;
2810
+ private isSchemaExpansionModeActive;
2811
+ private getVisibleTableFieldNamesSet;
2812
+ private hasCompanionDenormalizedFieldInSchema;
2813
+ private isComplementarySchemaExpansionField;
2814
+ private isPopulatedExpansionRow;
2815
+ private hasNonEmptyExpansionFieldValue;
2816
+ private getComplementarySchemaExpansionFieldsForRow;
2817
+ private getLoadedTableRowsForExpansionCheck;
2818
+ private reconcileExpansionColumnsAfterDataChange;
2819
+ private hasComplementarySchemaExpansionFields;
2578
2820
  private enforceAppearanceSchemaGuards;
2579
2821
  private enforceUnsupportedFeatureGuards;
2580
2822
  getToolbarEvaluationContext(): Record<string, any>;
@@ -2585,6 +2827,11 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2585
2827
  getIconText(row: any, column: ColumnDefinition): string | null;
2586
2828
  getIconRichContentNodes(row: any, column: ColumnDefinition): RichBlockNode[];
2587
2829
  private getIconRawText;
2830
+ /**
2831
+ * Enriquece as linhas com propriedades calculadas declaradas em `computedFields`.
2832
+ * Torna as propriedades virtuais fisicamente acessíveis no objeto da linha (Issue #34).
2833
+ */
2834
+ private enrichRowsWithComputedFields;
2588
2835
  /**
2589
2836
  * Lightweight, controlled evaluator for string/number expressions using row context.
2590
2837
  * Accepts values like '= row.status === "OK" ? "primary" : "warn"'.
@@ -2626,8 +2873,12 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2626
2873
  getBadgeRichContentNodes(row: any, column: ColumnDefinition): RichBlockNode[];
2627
2874
  shouldRenderBadge(row: any, column: ColumnDefinition): boolean;
2628
2875
  getEffectiveRendererType(row: any, column: ColumnDefinition): 'icon' | 'image' | 'badge' | 'link' | 'button' | 'chip' | 'progress' | 'avatar' | 'toggle' | 'menu' | 'html' | 'compose' | 'rating' | 'microVisualization' | null;
2876
+ private readonly microVisualizationSafeHtmlCache;
2877
+ private readonly microVisualizationPageBoundsCache;
2629
2878
  getMicroVisualizationHtml(row: any, column: ColumnDefinition): SafeHtml;
2879
+ private createMicroVisualizationValueFormatter;
2630
2880
  private resolveMicroVisualizationForRow;
2881
+ private resolvePageMicroVisualizationBounds;
2631
2882
  private applyMicroVisualizationExpression;
2632
2883
  private evaluateMicroVisualizationExpression;
2633
2884
  getComposeItems(row: any, column: ColumnDefinition): any[];
@@ -2640,6 +2891,12 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2640
2891
  private asComposeValueItemColumn;
2641
2892
  asItemColumn(base: ColumnDefinition, item: any): any;
2642
2893
  getItemEffectiveType(row: any, column: ColumnDefinition, item: any): any;
2894
+ private hasRowQuickViewSourceIdentity;
2895
+ getEffectiveQuickViewBinding(row: any, column: ColumnDefinition): ResourceQuickViewBinding | null;
2896
+ getComposeValueQuickViewBinding(row: any, column: ColumnDefinition, item: any): ResourceQuickViewBinding | null;
2897
+ getQuickViewEndpointKey(): ApiEndpoint | string | null;
2898
+ getRowActionQuickViewBinding(action: any): ResourceQuickViewBinding | null;
2899
+ getQuickViewTriggerAriaLabel(label: string | null | undefined, column?: ColumnDefinition): string;
2643
2900
  private mergeRenderer;
2644
2901
  private hasRenderableColumnOverride;
2645
2902
  private resolveColumnRuleAnimationCandidate;
@@ -2746,7 +3003,10 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2746
3003
  private emitMetadataChange;
2747
3004
  private emitSchemaStatus;
2748
3005
  getRowId(row: any): any;
3006
+ private preserveSelectionOnNextDataLoad;
2749
3007
  private reconcileSelectionAfterDataChange;
3008
+ private areSelectedRowSnapshotsEquivalent;
3009
+ private serializeSelectedRowSnapshot;
2750
3010
  private getComparableRowIdentity;
2751
3011
  getIdField(): string;
2752
3012
  private getSchemaIdFieldOverride;
@@ -2782,6 +3042,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2782
3042
  getRowSelectionAriaLabel(row: any, index?: number): string;
2783
3043
  getMasterSelectionAriaLabel(): string;
2784
3044
  private selectRowFromUserInteraction;
3045
+ clearSelection(emitEvent?: boolean): void;
2785
3046
  private emitSelectionChange;
2786
3047
  private publishSelectionStatus;
2787
3048
  private getAccessibleRowLabel;
@@ -2822,7 +3083,11 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2822
3083
  getInlineRowActions(row: any): any[];
2823
3084
  getOverflowRowActions(row: any): any[];
2824
3085
  hasOverflowRowActions(row: any): boolean;
3086
+ onRowOverflowMenuTriggerHover(row: any): void;
2825
3087
  onRowOverflowMenuOpened(row: any): void;
3088
+ onRowOverflowMenuClosed(trigger?: MatMenuTrigger): void;
3089
+ private buildRowOverflowMenuSignature;
3090
+ private getCanonicalCrudActionOrderIndex;
2826
3091
  private prepareRowDiscoveryRetry;
2827
3092
  private getVisibleRowActions;
2828
3093
  private getResolvedRowActions;
@@ -2836,6 +3101,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2836
3101
  private getDiscoveredRowCrudActionsFromSnapshot;
2837
3102
  private buildDiscoveredRowCrudAction;
2838
3103
  private getDiscoveredRowSurfaceActionsFromSnapshot;
3104
+ private resolveBaselineCrudActionForRowSurface;
2839
3105
  private getDiscoveredRowWorkflowActionsFromCatalog;
2840
3106
  private getDiscoveredRowWorkflowActionsFromItems;
2841
3107
  private resolveRowCrudCapabilityOperation;
@@ -2876,7 +3142,8 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterView
2876
3142
  private scheduleRowDiscoveryMarkForCheck;
2877
3143
  ngOnDestroy(): void;
2878
3144
  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>;
3145
+ 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>;
3146
+ static ngAcceptInputType_filterTeleport: unknown;
2880
3147
  static ngAcceptInputType_enableCustomization: unknown;
2881
3148
  }
2882
3149
 
@@ -3076,10 +3343,11 @@ interface RendererFieldOption {
3076
3343
  isVisible: boolean;
3077
3344
  isHidden?: boolean;
3078
3345
  }
3079
- type ComposePresetId = 'personAvatar' | 'contactTwoLines' | 'documentEmail' | 'statusChip';
3346
+ type ComposePresetId = 'personAvatar' | 'roleDepartment' | 'contactTwoLines' | 'documentEmail' | 'statusChip';
3080
3347
  declare class ColumnsConfigEditorComponent implements OnInit, OnChanges, OnDestroy {
3081
3348
  private cdr;
3082
3349
  private readonly i18n;
3350
+ private readonly jsonLogic;
3083
3351
  tx(key: string, fallback: string): string;
3084
3352
  readonly ratingAriaLabelPlaceholder: string;
3085
3353
  readonly ratingRendererHint: string;
@@ -3092,6 +3360,13 @@ declare class ColumnsConfigEditorComponent implements OnInit, OnChanges, OnDestr
3092
3360
  type?: string;
3093
3361
  tableHidden?: boolean;
3094
3362
  hidden?: boolean;
3363
+ options?: Array<{
3364
+ value?: any;
3365
+ key?: any;
3366
+ label?: string;
3367
+ text?: string;
3368
+ }>;
3369
+ enumValues?: Array<string | number>;
3095
3370
  xUi?: Record<string, any>;
3096
3371
  ui?: Record<string, any>;
3097
3372
  }>;
@@ -3122,7 +3397,22 @@ declare class ColumnsConfigEditorComponent implements OnInit, OnChanges, OnDestr
3122
3397
  condOverridesSelectedIndex: number;
3123
3398
  getConditionalOverrides(): any[];
3124
3399
  ensureConditionalOverrides(): any[];
3400
+ getColumnActiveRendererIcon(column: ColumnDefinition | null | undefined): string | null;
3401
+ getColumnActiveRendererTooltip(column: ColumnDefinition | null | undefined): string;
3402
+ getFieldDomainOptions(fieldName: string | undefined): Array<{
3403
+ value: string | number | boolean;
3404
+ label: string;
3405
+ }>;
3406
+ getSelectedColumnDomainOptions(): Array<{
3407
+ value: string | number | boolean;
3408
+ label: string;
3409
+ }>;
3410
+ getFilteredOverrideConditionValueOptions(condition: any): Array<{
3411
+ value: string;
3412
+ label: string;
3413
+ }>;
3125
3414
  addConditionalOverride(): void;
3415
+ generateDomainConditionalBadges(): void;
3126
3416
  removeConditionalOverride(index: number): void;
3127
3417
  duplicateConditionalOverride(index: number): void;
3128
3418
  onConditionalOverrideReorder(event: any): void;
@@ -3131,6 +3421,18 @@ declare class ColumnsConfigEditorComponent implements OnInit, OnChanges, OnDestr
3131
3421
  getJsonLogicSummary(value: JsonLogicExpression | null | undefined): string;
3132
3422
  private parseJsonLogicText;
3133
3423
  setConditionalOverrideCondition(index: number, raw: string): void;
3424
+ readonly overrideConditionOperators: readonly ["===", "==", "!==", "!=", ">", ">=", "<", "<=", "truthy", "falsy"];
3425
+ private normalizeConditionFieldName;
3426
+ getOverrideConditionField(condition: any): string;
3427
+ getOverrideConditionOperator(condition: any): string;
3428
+ getOverrideConditionValue(condition: any): string;
3429
+ setOverrideGuidedCondition(index: number, patch: {
3430
+ field?: string;
3431
+ operator?: string;
3432
+ value?: string;
3433
+ }): void;
3434
+ private extractGuidedJsonLogicCondition;
3435
+ private coerceGuidedScalar;
3134
3436
  getOverrideField(path: string): any;
3135
3437
  setOverrideField(path: string, value: any): void;
3136
3438
  setOverrideJsonLogicField(path: string, raw: string): void;
@@ -3139,13 +3441,19 @@ declare class ColumnsConfigEditorComponent implements OnInit, OnChanges, OnDestr
3139
3441
  item: any;
3140
3442
  index: number;
3141
3443
  }>;
3444
+ addOverrideComposeItem(type: 'value' | 'badge' | 'icon' | 'chip' | 'progress' | 'avatar' | 'link' | 'button' | 'rating' | 'html'): void;
3142
3445
  addOverrideComposeValueItem(): void;
3446
+ moveOverrideComposeItem(index: number, delta: -1 | 1): void;
3447
+ duplicateOverrideComposeItem(index: number): void;
3448
+ removeOverrideComposeItem(index: number): void;
3449
+ setOverrideComposeItemProp(index: number, path: string, value: any): void;
3143
3450
  setOverrideComposeValueItemField(index: number, field: string): void;
3144
3451
  setOverrideComposeValueItemEmphasis(index: number, emphasis: string): void;
3145
3452
  getOverrideComposeLayoutProp(key: string): any;
3146
3453
  setOverrideComposeLayoutProp(key: string, value: any): void;
3147
3454
  onOverrideTypeChange(ov: any, val: string): void;
3148
3455
  getOverrideMicroVisualizationProp(path: string): any;
3456
+ private ensureOverrideMicroVisualizationObject;
3149
3457
  setOverrideMicroVisualizationProp(path: string, value: any): void;
3150
3458
  getOverrideMicroVisualizationKind(): PraxisPresentationVisualizationKind;
3151
3459
  getOverrideMicroVisualizationGuidance(): 'recommended' | 'conditional';
@@ -3155,15 +3463,30 @@ declare class ColumnsConfigEditorComponent implements OnInit, OnChanges, OnDestr
3155
3463
  isOverrideMicroVisualizationSegmentsKind(): boolean;
3156
3464
  isOverrideMicroVisualizationItemsKind(): boolean;
3157
3465
  isOverrideMicroVisualizationTotalKind(): boolean;
3466
+ isOverrideMicroVisualizationTargetKind(): boolean;
3467
+ isOverrideMicroVisualizationBaselineKind(): boolean;
3468
+ isOverrideMicroVisualizationSuffixKind(): boolean;
3469
+ isOverrideMicroVisualizationScaleBoundsKind(): boolean;
3470
+ isOverrideMicroVisualizationScaleScopeKind(): boolean;
3471
+ isOverrideMicroVisualizationThresholdsSupported(): boolean;
3472
+ getOverrideMicroVisualizationThresholds(): PraxisPresentationVisualizationThreshold[];
3473
+ addOverrideMicroVisualizationThreshold(): void;
3474
+ applyDefaultOverrideMicroVisualizationThresholds(): void;
3475
+ setOverrideMicroVisualizationThresholdNumber(index: number, bound: 'min' | 'max', raw: string): void;
3476
+ setOverrideMicroVisualizationThresholdTone(index: number, tone: PraxisPresentationVisualizationTone): void;
3477
+ moveOverrideMicroVisualizationThreshold(index: number, delta: -1 | 1): void;
3478
+ removeOverrideMicroVisualizationThreshold(index: number): void;
3158
3479
  getOverrideMicroVisualizationGuidanceText(): string;
3159
3480
  exportOverrideJson(index: number): void;
3160
3481
  importOverrideJson(index: number): void;
3161
3482
  rendererValidationErrors: string[];
3483
+ get validationErrors(): string[];
3162
3484
  rendererImportWarnings: string[];
3163
3485
  rendererIsValid: boolean;
3164
3486
  rendererPreviewEnabled: boolean;
3165
3487
  private rendererAppliedSnapshot;
3166
3488
  previewRows: any[];
3489
+ microVisualizationSampleValuesText: string;
3167
3490
  private refreshRendererFieldOptions;
3168
3491
  getRendererFieldOptions(): RendererFieldOption[];
3169
3492
  formatRendererFieldOption(option: RendererFieldOption): string;
@@ -3196,11 +3519,14 @@ declare class ColumnsConfigEditorComponent implements OnInit, OnChanges, OnDestr
3196
3519
  isExistingColumn(column: ColumnDefinition): boolean;
3197
3520
  isCalculatedColumn(column: ColumnDefinition): boolean;
3198
3521
  hasValueGetterError(column: ColumnDefinition): boolean;
3522
+ private hydrateApiColumnFlags;
3199
3523
  private generateAvailableDataSchema;
3200
3524
  /**
3201
3525
  * Map ColumnDataType to FieldSchema type
3202
3526
  */
3203
3527
  private mapColumnTypeToFieldType;
3528
+ private _cachedFormulaKey;
3529
+ private _cachedFormulaRef;
3204
3530
  getColumnFormula(column: ColumnDefinition | null): FormulaDefinition | undefined;
3205
3531
  onFormulaChange(formula: FormulaDefinition): void;
3206
3532
  onGeneratedExpressionChange(expression: string): void;
@@ -3258,7 +3584,23 @@ declare class ColumnsConfigEditorComponent implements OnInit, OnChanges, OnDestr
3258
3584
  setRendererJsonLogicProp(kind: string, path: string, raw: string): void;
3259
3585
  setRendererProp(kind: string, path: string, value: any): void;
3260
3586
  private createDefaultMicroVisualization;
3587
+ private ensureMicroVisualizationObject;
3261
3588
  setMicroVisualizationProp(path: string, value: any): void;
3589
+ isMicroVisualizationThresholdsSupported(): boolean;
3590
+ getMicroVisualizationThresholds(): PraxisPresentationVisualizationThreshold[];
3591
+ addMicroVisualizationThreshold(): void;
3592
+ applyDefaultMicroVisualizationThresholds(): void;
3593
+ setMicroVisualizationThresholdNumber(index: number, bound: 'min' | 'max', raw: string): void;
3594
+ setMicroVisualizationThresholdTone(index: number, tone: PraxisPresentationVisualizationTone): void;
3595
+ moveMicroVisualizationThreshold(index: number, delta: -1 | 1): void;
3596
+ removeMicroVisualizationThreshold(index: number): void;
3597
+ setMicroVisualizationSampleValuesText(raw: string): void;
3598
+ private readonly sanitizer;
3599
+ private readonly microVisualizationPreviewSafeHtmlCache;
3600
+ private memoizeMicroVisualizationSafeHtml;
3601
+ getMicroVisualizationSampleValues(): number[];
3602
+ getPreviewMicroVisualizationSafeHtmlForValue(sampleValue: number): SafeHtml;
3603
+ getPreviewMicroVisualizationHtmlForValue(sampleValue: number): string;
3262
3604
  private _deepClone;
3263
3605
  hasSelectedRenderer(): boolean;
3264
3606
  onApplyRenderer(): void;
@@ -3278,6 +3620,12 @@ declare class ColumnsConfigEditorComponent implements OnInit, OnChanges, OnDestr
3278
3620
  private stripRowPrefixes;
3279
3621
  private _coerceExpected;
3280
3622
  private getNested;
3623
+ private buildPreviewEvaluationContext;
3624
+ evaluatePreviewOverrideCondition(condition: any, row: any): boolean;
3625
+ private mergePreviewRenderer;
3626
+ private hasRenderablePreviewOverride;
3627
+ getEffectivePreviewRenderer(row: any): any;
3628
+ getPreviewSampleRows(): any[];
3281
3629
  getPreviewRendererType(row: any): 'icon' | 'image' | 'badge' | 'link' | 'button' | 'chip' | 'progress' | 'microVisualization' | 'rating' | 'avatar' | 'toggle' | 'menu' | 'html' | 'compose' | null;
3282
3630
  getPreviewIconName(row: any): string | null;
3283
3631
  getPreviewIconColor(row: any): string | null;
@@ -3289,16 +3637,22 @@ declare class ColumnsConfigEditorComponent implements OnInit, OnChanges, OnDestr
3289
3637
  getPreviewImageShape(): 'square' | 'rounded' | 'circle' | undefined;
3290
3638
  getPreviewImageFit(): 'cover' | 'contain' | undefined;
3291
3639
  getPreviewBadgeText(row: any): string | null;
3292
- getPreviewBadgeIcon(_row: any): string | null;
3293
- getPreviewBadgeClasses(_row: any): string[];
3640
+ getPreviewBadgeIcon(row: any): string | null;
3641
+ getPreviewBadgeClasses(row: any): string[];
3642
+ private buildBadgeClassesFromConfig;
3294
3643
  getPreviewLinkText(row: any): string;
3295
3644
  getPreviewLinkHref(row: any): string | null;
3296
3645
  getPreviewButtonLabel(row: any): string;
3297
- getPreviewButtonIcon(): string | null;
3646
+ getPreviewButtonIcon(row?: any): string | null;
3298
3647
  getPreviewChipText(row: any): string | null;
3299
- getPreviewChipClasses(): string[];
3648
+ getPreviewChipIcon(row?: any): string | null;
3649
+ getPreviewChipClasses(row?: any): string[];
3650
+ getComposePreviewButtonLabel(item: any, row: any): string;
3300
3651
  getPreviewProgressValue(row: any): number;
3652
+ getPreviewMicroVisualizationSafeHtml(row: any): SafeHtml;
3301
3653
  getPreviewMicroVisualizationHtml(row: any): string;
3654
+ private createPreviewMicroVisualizationValueFormatter;
3655
+ private resolvePreviewMicroVisualizationConfig;
3302
3656
  getMicroVisualizationGuidance(): 'recommended' | 'conditional';
3303
3657
  getMicroVisualizationKind(): PraxisPresentationVisualizationKind;
3304
3658
  isMicroVisualizationValueKind(): boolean;
@@ -3306,6 +3660,11 @@ declare class ColumnsConfigEditorComponent implements OnInit, OnChanges, OnDestr
3306
3660
  isMicroVisualizationSegmentsKind(): boolean;
3307
3661
  isMicroVisualizationItemsKind(): boolean;
3308
3662
  isMicroVisualizationTotalKind(): boolean;
3663
+ isMicroVisualizationTargetKind(): boolean;
3664
+ isMicroVisualizationBaselineKind(): boolean;
3665
+ isMicroVisualizationSuffixKind(): boolean;
3666
+ isMicroVisualizationScaleBoundsKind(): boolean;
3667
+ isMicroVisualizationScaleScopeKind(): boolean;
3309
3668
  getMicroVisualizationGuidanceText(): string;
3310
3669
  getMicroVisualizationConstraint(): PraxisTableCellVisualizationConstraint;
3311
3670
  getPreviewRatingValue(row: any): number;
@@ -3314,7 +3673,36 @@ declare class ColumnsConfigEditorComponent implements OnInit, OnChanges, OnDestr
3314
3673
  getPreviewRatingOutlineColor(): string | undefined;
3315
3674
  getPreviewRatingSize(): 'small' | 'medium' | 'large';
3316
3675
  getPreviewRatingAriaLabel(): string | undefined;
3317
- getComposePreviewItems(_row: any): any[];
3676
+ getComposePreviewItems(row: any): any[];
3677
+ isComposePreviewMedia(row: any): boolean;
3678
+ getComposePreviewContainerStyle(row: any): Record<string, string>;
3679
+ getComposePreviewValueText(item: any, row: any): string;
3680
+ getComposePreviewValueClasses(item: any): string[];
3681
+ getComposePreviewBadgeText(item: any, row: any): string;
3682
+ getComposePreviewBadgeClasses(item: any): string[];
3683
+ getComposePreviewChipText(item: any, row: any): string;
3684
+ getComposePreviewChipClasses(item: any): string[];
3685
+ getComposePreviewLinkText(item: any, row: any): string;
3686
+ getComposePreviewLinkHref(item: any, row: any): string | null;
3687
+ getComposePreviewIconName(item: any, row: any): string | null;
3688
+ getComposePreviewIconColor(item: any, _row: any): string | null;
3689
+ getComposePreviewIconStyle(item: any, _row: any): Record<string, string> | null;
3690
+ getComposePreviewAvatarStyle(item: any): Record<string, string>;
3691
+ getComposePreviewAvatarInitials(item: any, row: any): string;
3692
+ getComposePreviewAvatarSrc(item: any, row: any): string | null;
3693
+ getComposePreviewAvatarAlt(item: any, row: any): string;
3694
+ getComposePreviewImageSrc(item: any, row: any): string | null;
3695
+ getComposePreviewImageAlt(item: any, row: any): string;
3696
+ getComposePreviewImageStyle(item: any): Record<string, string>;
3697
+ getComposePreviewProgressColor(item: any): string | null;
3698
+ getComposePreviewHtml(item: any, row: any): string;
3699
+ getComposePreviewToggleState(item: any, row: any): boolean;
3700
+ getComposePreviewMenuCount(item: any, row: any): number;
3701
+ private isValidPreviewMediaUrl;
3702
+ private resolvePreviewSafeSrc;
3703
+ /** Mirrors PraxisTable.getSafeHtml token interpolation: `[[field]]` values are HTML-escaped. */
3704
+ private interpolatePreviewHtml;
3705
+ getComposePreviewProgressValue(item: any, row: any): number;
3318
3706
  getComposePreviewRatingValue(item: any, row: any): number;
3319
3707
  getComposePreviewRatingMax(item: any): number;
3320
3708
  getComposePreviewRatingColor(item: any): string | undefined;
@@ -3330,7 +3718,10 @@ declare class ColumnsConfigEditorComponent implements OnInit, OnChanges, OnDestr
3330
3718
  getPreviewToggleState(row: any): boolean;
3331
3719
  getPreviewMenuCount(row: any): number;
3332
3720
  getPreviewHtml(row: any): string;
3333
- trackByIdx: (_: number, item: any) => number;
3721
+ getPreviewProgressColor(row: any): string | null;
3722
+ /** Preview rows are re-cloned on every read; the sample slot index is their stable identity. */
3723
+ trackByIdx: (index: number, _item: unknown) => number;
3724
+ private validateMicroVisualizationThresholds;
3334
3725
  private validateRenderer;
3335
3726
  private readonly _emptyMappingRef;
3336
3727
  composeSelectedIndex: number;
@@ -3348,10 +3739,13 @@ declare class ColumnsConfigEditorComponent implements OnInit, OnChanges, OnDestr
3348
3739
  onComposeReorder(event: any): void;
3349
3740
  selectComposeItem(index: number): void;
3350
3741
  getComposeLayoutProp(key: string): any;
3742
+ hasComposeMediaLeadingItem(): boolean;
3351
3743
  setComposeLayoutProp(key: string, value: any): void;
3352
3744
  getSelectedComposeItem(): any;
3353
3745
  getSelectedComposeItemProp(path: string): any;
3354
3746
  setSelectedComposeItemProp(path: string, value: any): void;
3747
+ getConsolidatedSecondaryColumn(item: any): ExtendedColumnDefinition | null;
3748
+ hideConsolidatedColumn(field: string): void;
3355
3749
  private findRendererFieldByCandidates;
3356
3750
  private normalizeFieldLookup;
3357
3751
  getColumnKeyInputType(column: ColumnDefinition | null): 'text' | 'number' | 'boolean';
@@ -3360,11 +3754,18 @@ declare class ColumnsConfigEditorComponent implements OnInit, OnChanges, OnDestr
3360
3754
  }): void;
3361
3755
  get selectedColumnDataType(): ColumnDataType$1;
3362
3756
  set selectedColumnDataType(value: ColumnDataType$1);
3757
+ private findColumnFieldMetadata;
3758
+ private inferColumnDataTypeFromMetadata;
3363
3759
  getColumnDataType(column: ColumnDefinition | null): ColumnDataType$1;
3364
3760
  /**
3365
- * Infer column data type from field name patterns (shared logic with PraxisTable)
3761
+ * Infer column data type from field name patterns (shared logic with PraxisTable, supporting pt-BR and en-US)
3366
3762
  */
3367
3763
  private inferFieldTypeFromFieldName;
3764
+ inferRecommendedColumnAlignment(column: ColumnDefinition | null, explicitType?: ColumnDataType$1): 'left' | 'center' | 'right';
3765
+ inferRecommendedColumnFormat(column: ColumnDefinition | null, explicitType?: ColumnDataType$1): string;
3766
+ private applySmartCalibrationToColumn;
3767
+ calibrateSelectedColumnFromMetadata(): void;
3768
+ calibrateAllColumnsFromMetadata(): void;
3368
3769
  onDataTypeChange(dataType: ColumnDataType$1): void;
3369
3770
  showDataFormatter(column: ColumnDefinition | null): boolean;
3370
3771
  getFormatterIcon(column: ColumnDefinition | null): string;
@@ -3729,6 +4130,8 @@ declare class FilterSettingsComponent implements OnChanges, AfterViewInit, OnDes
3729
4130
  presentation: FormControl<FilterConfig['presentation']>;
3730
4131
  alwaysVisibleFields: FormControl<string[]>;
3731
4132
  showAdvanced: FormControl<boolean>;
4133
+ showAddButton: FormControl<boolean>;
4134
+ showFilterSettings: FormControl<boolean>;
3732
4135
  mode: FormControl<'filter'>;
3733
4136
  changeDebounceMs: FormControl<number>;
3734
4137
  allowSaveTags: FormControl<boolean>;
@@ -3834,6 +4237,9 @@ declare class FilterSettingsComponent implements OnChanges, AfterViewInit, OnDes
3834
4237
  isPresetActive(key: string): boolean;
3835
4238
  hasBooleanFieldMetadata(): boolean;
3836
4239
  getFieldLabel(name: string): string;
4240
+ getFieldTypeBadge(meta?: FieldMetadata | null): string;
4241
+ getFieldDescription(meta?: FieldMetadata | null): string;
4242
+ getSelectedAlwaysVisibleTriggerLabel(): string;
3837
4243
  onAlwaysVisibleFieldSearchChange(value: string): void;
3838
4244
  clearAlwaysVisibleFieldSearch(): void;
3839
4245
  filteredAlwaysVisibleMetadata(): FieldMetadata[];
@@ -4183,6 +4589,12 @@ declare class TableRulesEditorComponent implements OnChanges, OnInit, OnDestroy
4183
4589
  value: any;
4184
4590
  label: string;
4185
4591
  }>;
4592
+ getDomainRuleTargetField(): string | null;
4593
+ getDomainRuleCandidateOptions(): Array<{
4594
+ value: any;
4595
+ label: string;
4596
+ }>;
4597
+ generateDomainRules(): void;
4186
4598
  isNoValueOperator(op: string): boolean;
4187
4599
  getValuePlaceholder(): string;
4188
4600
  getI18nValuePlaceholder(): string;
@@ -4237,7 +4649,7 @@ declare class TableDetailTreeDraft {
4237
4649
  depth: number;
4238
4650
  } | undefined;
4239
4651
  move(direction: -1 | 1): void;
4240
- add(node: Node, nested?: boolean): void;
4652
+ add(node: Node, nested?: boolean): Node | null;
4241
4653
  }
4242
4654
 
4243
4655
  declare class TableDetailEditorComponent implements OnChanges, OnDestroy {
@@ -4254,6 +4666,7 @@ declare class TableDetailEditorComponent implements OnChanges, OnDestroy {
4254
4666
  dirty: boolean;
4255
4667
  }>;
4256
4668
  private readonly i18n;
4669
+ private readonly jsonLogic;
4257
4670
  private baseline?;
4258
4671
  private emitted?;
4259
4672
  private readonly coupledBefore;
@@ -4265,26 +4678,49 @@ declare class TableDetailEditorComponent implements OnChanges, OnDestroy {
4265
4678
  jsonTouched: boolean;
4266
4679
  advanced: boolean;
4267
4680
  preset: string;
4681
+ /** True when the last "add inside" was refused because the block cannot live inside a card grid card. */
4682
+ addRejected: boolean;
4268
4683
  readonly presets: string[];
4269
4684
  readonly sourceModes: string[];
4270
4685
  readonly resourceKinds: string[];
4271
4686
  readonly resourcePathMethods: string[];
4687
+ readonly cardGridColumnOptions: Array<'auto' | 1 | 2 | 3 | 4>;
4688
+ readonly cardVariants: Array<'outlined' | 'elevated' | 'filled' | 'plain' | 'transparent'>;
4689
+ readonly cardSizes: Array<'sm' | 'md' | 'lg'>;
4690
+ readonly cardDensities: Array<'compact' | 'comfortable'>;
4691
+ readonly composeLayouts: Array<'flex' | 'grid'>;
4692
+ readonly composeDirections: Array<'row' | 'column'>;
4693
+ readonly composeGaps: Array<'xs' | 'sm' | 'md' | 'lg' | 'xl'>;
4694
+ readonly composeAlignItemsOptions: Array<'' | 'start' | 'center' | 'end' | 'stretch'>;
4695
+ readonly badgePresetOptions: Array<'default' | 'softPill' | 'solidPill' | 'outlinedTag' | 'compactSquare' | 'custom'>;
4696
+ readonly iconSurfacePresetOptions: Array<'none' | 'softTile' | 'circleBadge' | 'outlinedTile' | 'elevatedTile' | 'custom'>;
4697
+ readonly semanticTones: Array<'' | 'neutral' | 'info' | 'primary' | 'secondary' | 'tertiary' | 'success' | 'warning' | 'danger'>;
4698
+ readonly conditionOperators: Array<'===' | '!=' | '>' | '>=' | '<' | '<=' | 'truthy' | 'falsy'>;
4272
4699
  fallbackModes(): string[];
4273
- sample: string;
4700
+ sample: 'A' | 'B' | 'C';
4274
4701
  get previewContext(): {
4275
- row: {
4276
- id: string;
4277
- note: string;
4278
- status: string;
4279
- progress: number;
4280
- };
4702
+ row: Record<string, unknown>;
4281
4703
  };
4704
+ private projectDetailNodeToRichBlockNodes;
4282
4705
  /** Local presenter projection only; never used as an authoring/save source. */
4283
4706
  previewNodes(): RichBlockNode[];
4707
+ /**
4708
+ * Returns structured preview groups so `cardGrid` blocks render with their real
4709
+ * multi-column CSS Grid (`columns` and `minCardWidth`) and headers in the preview canvas.
4710
+ */
4711
+ previewCardGridGroups(): Array<{
4712
+ isCardGrid: boolean;
4713
+ title?: string;
4714
+ subtitle?: string;
4715
+ gridTemplateColumns?: string;
4716
+ cards?: RichBlockNode[];
4717
+ nodes?: RichBlockNode[];
4718
+ }>;
4284
4719
  previewRichContentDocuments(): RichContentDocument[];
4285
4720
  richContentEditorInputs(): PraxisRichContentEditorInputs | null;
4286
4721
  applyRichContentEditor(): void;
4287
- addPreset(preset: 'callout' | 'richCard'): void;
4722
+ addPreset(preset: 'callout' | 'richCard' | 'richDetailGrid'): void;
4723
+ effectiveNodeType(node?: Record<string, any> | undefined): string;
4288
4724
  nodeLabel(node: Record<string, any>): string;
4289
4725
  nodeIcon(node: Record<string, any>): string;
4290
4726
  canMove(direction: -1 | 1): boolean;
@@ -4323,10 +4759,75 @@ declare class TableDetailEditorComponent implements OnChanges, OnDestroy {
4323
4759
  canNest(): boolean;
4324
4760
  move(direction: -1 | 1): void;
4325
4761
  remove(): void;
4762
+ fieldValue(field: string): string;
4326
4763
  edit(field: string, value: string): void;
4327
4764
  fields(): string[];
4328
4765
  isAdvancedNode(): boolean;
4766
+ availableColumns(): Array<{
4767
+ field: string;
4768
+ label: string;
4769
+ }>;
4770
+ supportsFieldBinding(): boolean;
4771
+ boundColumnField(): string;
4772
+ bindColumnField(fieldName: string): void;
4773
+ cardGridColumnsValue(): 'auto' | 1 | 2 | 3 | 4;
4774
+ setCardGridColumns(value: 'auto' | 1 | 2 | 3 | 4): void;
4775
+ cardGridMinWidthValue(): number;
4776
+ setCardGridMinWidth(value: number | string): void;
4777
+ cardVariantValue(): 'outlined' | 'elevated' | 'filled' | 'plain' | 'transparent';
4778
+ setCardVariant(variant: 'outlined' | 'elevated' | 'filled' | 'plain' | 'transparent' | 'soft'): void;
4779
+ cardSizeValue(): 'sm' | 'md' | 'lg';
4780
+ setCardSize(size: 'sm' | 'md' | 'lg'): void;
4781
+ cardDensityValue(): 'compact' | 'comfortable';
4782
+ setCardDensity(density: 'compact' | 'comfortable' | 'spacious'): void;
4783
+ composeLayoutValue(): 'flex' | 'grid';
4784
+ setComposeLayout(layout: 'flex' | 'grid'): void;
4785
+ composeDirectionValue(): 'row' | 'column';
4786
+ setComposeDirection(direction: 'row' | 'column'): void;
4787
+ composeGapValue(): 'xs' | 'sm' | 'md' | 'lg' | 'xl';
4788
+ setComposeGap(gap: 'xs' | 'sm' | 'md' | 'lg' | 'xl'): void;
4789
+ composeAlignItemsValue(): '' | 'start' | 'center' | 'end' | 'stretch';
4790
+ setComposeAlignItems(align: '' | 'start' | 'center' | 'end' | 'stretch' | 'flex-start' | 'flex-end'): void;
4791
+ composeWrapValue(): boolean;
4792
+ setComposeWrap(wrap: boolean): void;
4793
+ supportsTone(): boolean;
4794
+ toneValue(): string;
4795
+ setTone(tone: string): void;
4796
+ supportsStyleControls(): boolean;
4797
+ nodeStyleValue(key: string): string;
4798
+ setNodeStyleValue(key: string, value: string): void;
4799
+ hasNodeAppearanceOverrides(): boolean;
4800
+ resetNodeAppearance(): void;
4801
+ badgeAppearancePreset(): 'default' | 'softPill' | 'solidPill' | 'outlinedTag' | 'compactSquare' | 'custom';
4802
+ applyBadgeAppearancePreset(preset: 'default' | 'softPill' | 'solidPill' | 'outlinedTag' | 'compactSquare' | 'custom'): void;
4803
+ iconSurfacePreset(): 'none' | 'softTile' | 'circleBadge' | 'outlinedTile' | 'elevatedTile' | 'custom';
4804
+ applyIconSurfacePreset(preset: 'none' | 'softTile' | 'circleBadge' | 'outlinedTile' | 'elevatedTile' | 'custom'): void;
4805
+ canConvertSelectedToRichContent(): boolean;
4806
+ private isLosslesslyConvertibleToRichContent;
4807
+ /**
4808
+ * Losslessly converts the selected `cardGrid` or `card` block (or its parent `cardGrid`
4809
+ * when a card inside `cardGrid.cards` is selected) into a canonical `richContent` node
4810
+ * so the user can continue authoring in the full embedded `PraxisRichContentConfigEditor`.
4811
+ */
4812
+ convertSelectedToRichContent(): void;
4813
+ supportsVisibleWhen(): boolean;
4814
+ visibleWhenMode(): 'always' | 'conditional' | 'custom';
4815
+ setVisibleWhenMode(mode: 'always' | 'conditional' | 'custom'): void;
4816
+ visibleWhenField(): string;
4817
+ visibleWhenOperator(): '===' | '!=' | '>' | '>=' | '<' | '<=' | 'truthy' | 'falsy';
4818
+ visibleWhenValue(): string;
4819
+ setVisibleWhenRule(patch: {
4820
+ field?: string;
4821
+ operator?: '===' | '!=' | '>' | '>=' | '<' | '<=' | 'truthy' | 'falsy';
4822
+ value?: string;
4823
+ }): void;
4824
+ private parseConditionScalar;
4825
+ private parseGuidedVisibleWhen;
4826
+ private isPreviewNodeVisible;
4329
4827
  private commitTree;
4828
+ /** Offered next to `cardGridContent`/`composeContent` issues: converts legacy fields into canonical presenters. */
4829
+ canNormalizeRichChildren(): boolean;
4830
+ normalizeRichChildren(): void;
4330
4831
  editJson(value: string): void;
4331
4832
  discard(): void;
4332
4833
  static ɵfac: i0.ɵɵFactoryDeclaration<TableDetailEditorComponent, never>;
@@ -4401,16 +4902,24 @@ declare class PraxisTableConfigEditor implements OnInit, OnDestroy, SettingsValu
4401
4902
  isValid$: BehaviorSubject<boolean>;
4402
4903
  isBusy$: BehaviorSubject<boolean>;
4403
4904
  columnMetas: FieldMetadata[];
4905
+ filterSchemaFields: FieldDefinition[];
4404
4906
  filterDtoMetas: FieldMetadata[];
4405
4907
  filterDtoMetasLoading: boolean;
4406
4908
  filterDtoMetasErrorMsg: string;
4909
+ resourceSchemaFields: FieldDefinition[];
4910
+ resourceSchemaMetas: FieldMetadata[];
4911
+ resourceSchemaLoading: boolean;
4912
+ selectedCatalogResource: DiscoveredResourceOption | null;
4407
4913
  private hasCrudOverridesDirty;
4408
4914
  private hasLocalDataInput;
4409
4915
  private filterDtoLoadSeq;
4916
+ private resourceSchemaLoadSeq;
4917
+ private loadedSchemaResourcePath;
4410
4918
  private lastKnownFilterSettings;
4411
4919
  private globalActionValidationIssues;
4412
4920
  private readonly panelData;
4413
4921
  private readonly crudService;
4922
+ private readonly resourceDiscovery;
4414
4923
  private readonly panelRef;
4415
4924
  constructor(cdr: ChangeDetectorRef, configService: TableConfigService);
4416
4925
  tx(key: string, fallback: string): string;
@@ -4427,10 +4936,65 @@ declare class PraxisTableConfigEditor implements OnInit, OnDestroy, SettingsValu
4427
4936
  onFilterSettingsChange(cfg: FilterConfig): void;
4428
4937
  private cloneFilterSettings;
4429
4938
  private isEffectivelyEmptyFilterSettings;
4939
+ private enrichFieldMetadataList;
4940
+ /**
4941
+ * Converte o resumo de campos publicado em `/schemas/catalog` (`responseFields` ou `filterFields`)
4942
+ * em `FieldMetadata[]` para alimentar imediatamente os seletores de chave primária, colunas e
4943
+ * filtros rápidos enquanto `/schemas/filtered` ainda está em resolução ou indisponível.
4944
+ */
4945
+ private extractCatalogFieldMetas;
4430
4946
  getFilterSettingsMetas(): FieldMetadata[];
4431
4947
  getColumnAuthoringMetas(): FieldMetadata[];
4948
+ getRulesEditorFields(): FieldDefinition[];
4949
+ getFieldTypeBadge(option?: FieldMetadata | null): string;
4950
+ getFieldDescription(option?: FieldMetadata | null): string;
4432
4951
  get filteredIdFieldOptions(): FieldMetadata[];
4952
+ getFilteredQuickFilterFieldOptions(currentValue?: string): FieldMetadata[];
4433
4953
  isUsingFilterDtoMetas(): boolean;
4954
+ get toolbarFiltersEnabled(): boolean;
4955
+ get toolbarShowQuickFilters(): boolean;
4956
+ get toolbarShowAdvancedButton(): boolean;
4957
+ get advancedFilterShowAddButton(): boolean;
4958
+ get advancedFilterShowFilterSettings(): boolean;
4959
+ get toolbarQuickFilters(): Array<{
4960
+ id: string;
4961
+ label: string;
4962
+ icon?: string;
4963
+ filter: any;
4964
+ }>;
4965
+ get duplicatedQuickFilterInlineFields(): string[];
4966
+ private inferDefaultStatusFilterField;
4967
+ getQuickFilterValueOptions(fieldName: string, currentValue?: unknown): Array<{
4968
+ value: string;
4969
+ label: string;
4970
+ }>;
4971
+ private updateToolbarFiltersPatch;
4972
+ onToolbarFiltersEnabledChange(enabled: boolean): void;
4973
+ onToolbarShowQuickFiltersChange(show: boolean): void;
4974
+ onToolbarShowAdvancedButtonChange(show: boolean): void;
4975
+ onAdvancedFilterShowAddButtonChange(show: boolean): void;
4976
+ onAdvancedFilterShowFilterSettingsChange(show: boolean): void;
4977
+ applyBooleanQuickFilterPreset(fieldName?: string): void;
4978
+ addQuickFilterScope(): void;
4979
+ removeQuickFilterScope(index: number): void;
4980
+ updateQuickFilterMeta(index: number, patch: {
4981
+ id?: string;
4982
+ label?: string;
4983
+ icon?: string;
4984
+ }): void;
4985
+ getQuickFilterMode(item: {
4986
+ filter?: any;
4987
+ }): 'all' | 'boolean' | 'equals';
4988
+ getQuickFilterField(item: {
4989
+ filter?: any;
4990
+ }): string;
4991
+ getQuickFilterValue(item: {
4992
+ filter?: any;
4993
+ }): any;
4994
+ onQuickFilterModeChange(index: number, mode: 'all' | 'boolean' | 'equals'): void;
4995
+ onQuickFilterFieldChange(index: number, fieldName: string): void;
4996
+ onQuickFilterValueChange(index: number, rawValue: any): void;
4997
+ consolidateDuplicateInlineFilterFields(): void;
4434
4998
  getEffectiveDataMode(): EffectiveDataMode;
4435
4999
  isEffectiveLocalMode(): boolean;
4436
5000
  private resolveLocalDataModeFeatureEnabled;
@@ -4460,8 +5024,16 @@ declare class PraxisTableConfigEditor implements OnInit, OnDestroy, SettingsValu
4460
5024
  private syncFilterSettingsFromEditor;
4461
5025
  private hasAdvancedSettingsProperty;
4462
5026
  private syncLastKnownFilterSettingsFromEditedConfig;
5027
+ onCatalogResourceSelected(resource: DiscoveredResourceOption | null): void;
5028
+ private normalizeResourcePathIdentity;
5029
+ private resetEditedConfigForResourceSwitch;
4463
5030
  onResourcePathChange(val: string): void;
5031
+ get resourceEndpointKey(): any;
5032
+ get resourceApiUrlEntry(): any;
5033
+ private getResourceDiscoveryOptions;
5034
+ private canUseResourceDiscovery;
4464
5035
  private loadFilterDtoMetas;
5036
+ private loadResourceSchemaMetas;
4465
5037
  onIdFieldChange(val: string): void;
4466
5038
  onIdFieldOptionSelected(value: string): void;
4467
5039
  get mobileCardMode(): boolean;
@@ -4526,6 +5098,8 @@ declare class PraxisTableConfigEditor implements OnInit, OnDestroy, SettingsValu
4526
5098
  interface PraxisTableWidgetEditorInputs {
4527
5099
  config?: TableConfig | null;
4528
5100
  resourcePath?: string | null;
5101
+ endpointKey?: ApiEndpoint;
5102
+ apiUrlEntry?: ApiUrlEntry | null;
4529
5103
  horizontalScroll?: 'auto' | 'wrap' | 'none';
4530
5104
  tableId?: string;
4531
5105
  componentInstanceId?: string;
@@ -4555,6 +5129,9 @@ declare class PraxisTableWidgetConfigEditor implements SettingsValueProvider$1,
4555
5129
  getSettingsValue(): PraxisTableWidgetEditorValue;
4556
5130
  onSave(): PraxisTableWidgetEditorValue;
4557
5131
  reset(): void;
5132
+ private normalizeResourcePathIdentity;
5133
+ private stripResourceBoundTableState;
5134
+ private sanitizeEditedConfigForResourceSwitch;
4558
5135
  private buildValue;
4559
5136
  static ɵfac: i0.ɵɵFactoryDeclaration<PraxisTableWidgetConfigEditor, never>;
4560
5137
  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 +5140,8 @@ declare class PraxisTableWidgetConfigEditor implements SettingsValueProvider$1,
4563
5140
  interface PraxisFilterWidgetEditorInputs {
4564
5141
  presentation?: FilterConfig['presentation'];
4565
5142
  resourcePath?: string | null;
5143
+ endpointKey?: ApiEndpoint;
5144
+ apiUrlEntry?: ApiUrlEntry | null;
4566
5145
  fieldMetadata?: FieldMetadata[] | null;
4567
5146
  filterId?: string;
4568
5147
  formId?: string;
@@ -4584,6 +5163,10 @@ interface PraxisFilterWidgetEditorInputs {
4584
5163
  actionsButtonColor?: 'primary' | 'accent' | 'warn' | 'basic';
4585
5164
  actionsVariant?: 'standard' | 'outlined';
4586
5165
  useInlineSearchableSelectVariant?: boolean;
5166
+ useInlineSelectVariant?: boolean;
5167
+ useInlineMultiSelectVariant?: boolean;
5168
+ useInlineInputVariant?: boolean;
5169
+ useInlineToggleVariant?: boolean;
4587
5170
  useInlineRangeVariant?: boolean;
4588
5171
  useInlineDateVariant?: boolean;
4589
5172
  useInlineDateRangeVariant?: boolean;
@@ -4595,6 +5178,7 @@ interface PraxisFilterWidgetEditorInputs {
4595
5178
  advancedOpenMode?: 'modal' | 'drawer';
4596
5179
  advancedClearButtonsEnabled?: boolean;
4597
5180
  persistenceKey?: string;
5181
+ showAddButton?: boolean;
4598
5182
  showFilterSettings?: boolean;
4599
5183
  enableCustomization?: boolean;
4600
5184
  [key: string]: unknown;
@@ -4606,6 +5190,7 @@ declare class PraxisFilterWidgetConfigEditor implements SettingsValueProvider$1,
4606
5190
  widgetKey?: string;
4607
5191
  resourceEditor?: ResourceQuickConnectComponent;
4608
5192
  private readonly crud;
5193
+ private readonly resourceDiscovery;
4609
5194
  private readonly cdr;
4610
5195
  private readonly i18n;
4611
5196
  resourceError: boolean;
@@ -4614,8 +5199,17 @@ declare class PraxisFilterWidgetConfigEditor implements SettingsValueProvider$1,
4614
5199
  private settingsDirty;
4615
5200
  private loadingResource;
4616
5201
  private fieldRequest;
5202
+ private selectedCatalogResource;
4617
5203
  tx(key: string): string;
4618
5204
  ngAfterViewInit(): void;
5205
+ /**
5206
+ * Hidrata imediatamente os metadados de filtro a partir do resumo de campos publicado
5207
+ * em `/schemas/catalog` (`filterFields` ou `responseFields`) enquanto o schema completo
5208
+ * (`/schemas/filtered`) ainda está carregando ou indisponível no host.
5209
+ */
5210
+ onCatalogResourceSelected(resource: DiscoveredResourceOption | null): void;
5211
+ private extractCatalogFieldMetas;
5212
+ onResourcePathChange(nextPath: string): void;
4619
5213
  loadResourceFields(markDirty?: boolean): Promise<void>;
4620
5214
  private optionalInject;
4621
5215
  set inputs(value: PraxisFilterWidgetEditorInputs | null);
@@ -4646,6 +5240,198 @@ declare class PraxisFilterWidgetConfigEditor implements SettingsValueProvider$1,
4646
5240
  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
5241
  }
4648
5242
 
5243
+ /**
5244
+ * Interface mínima estrutural para qualquer componente que suporte teleporte de filtros
5245
+ * (ex.: PraxisTable ou PraxisCrudComponent).
5246
+ */
5247
+ interface PraxisFilterTeleportHost {
5248
+ filterTeleport?: boolean;
5249
+ filterTemplate?: TemplateRef<unknown>;
5250
+ filterBarTemplate?: TemplateRef<unknown>;
5251
+ filterTemplateSignal?: () => TemplateRef<unknown> | undefined;
5252
+ internalTable?: PraxisFilterTeleportHost;
5253
+ }
5254
+ type PraxisFilterOutletTarget = PraxisFilterTeleportHost | TemplateRef<unknown> | null | undefined;
5255
+ /**
5256
+ * Praxis UI Platform — Canonical Filter Outlet Component (Issue #11)
5257
+ *
5258
+ * Renderiza a barra de filtros avançados desacoplada da tabela de dados ou do CRUD,
5259
+ * permitindo acomodá-la em qualquer card, drawer ou cabeçalho superior tático.
5260
+ *
5261
+ * @example
5262
+ * ```html
5263
+ * <div class="filters-card">
5264
+ * <praxis-filter-outlet [target]="heroesCrud" />
5265
+ * </div>
5266
+ *
5267
+ * <praxis-crud #heroesCrud ... />
5268
+ * ```
5269
+ */
5270
+ declare class PraxisFilterOutletComponent implements OnChanges, AfterViewInit, OnDestroy {
5271
+ target: PraxisFilterOutletTarget;
5272
+ private readonly cdr;
5273
+ private readonly targetSignal;
5274
+ private previousHost?;
5275
+ constructor();
5276
+ get resolvedTemplate(): TemplateRef<unknown> | null;
5277
+ ngOnChanges(changes: SimpleChanges): void;
5278
+ ngAfterViewInit(): void;
5279
+ ngOnDestroy(): void;
5280
+ private detachPreviousHost;
5281
+ private attachTeleportTarget;
5282
+ static ɵfac: i0.ɵɵFactoryDeclaration<PraxisFilterOutletComponent, never>;
5283
+ static ɵcmp: i0.ɵɵComponentDeclaration<PraxisFilterOutletComponent, "praxis-filter-outlet", never, { "target": { "alias": "target"; "required": false; }; }, {}, never, never, true, never>;
5284
+ }
5285
+ /**
5286
+ * Praxis UI Platform — Canonical Filter Outlet Directive (Issue #11)
5287
+ *
5288
+ * Diretiva estrutural alternativa para teleporte reativo da barra de filtros.
5289
+ *
5290
+ * @example
5291
+ * ```html
5292
+ * <div class="filters-card">
5293
+ * <ng-container *praxisFilterOutlet="heroesCrud"></ng-container>
5294
+ * </div>
5295
+ * ```
5296
+ */
5297
+ declare class PraxisFilterOutletDirective implements OnChanges, AfterViewInit, OnDestroy {
5298
+ target: PraxisFilterOutletTarget;
5299
+ private readonly viewContainer;
5300
+ private readonly cdr;
5301
+ private readonly targetSignal;
5302
+ private previousHost?;
5303
+ private renderedTemplate;
5304
+ constructor();
5305
+ ngOnChanges(changes: SimpleChanges): void;
5306
+ ngAfterViewInit(): void;
5307
+ ngOnDestroy(): void;
5308
+ private detachPreviousHost;
5309
+ private updateView;
5310
+ static ɵfac: i0.ɵɵFactoryDeclaration<PraxisFilterOutletDirective, never>;
5311
+ static ɵdir: i0.ɵɵDirectiveDeclaration<PraxisFilterOutletDirective, "[praxisFilterOutlet]", never, { "target": { "alias": "praxisFilterOutlet"; "required": false; }; }, {}, never, never, true, never>;
5312
+ }
5313
+
5314
+ interface PraxisScopeBarItem {
5315
+ id: string;
5316
+ label: string;
5317
+ filter?: Record<string, unknown> | string;
5318
+ count?: number | null;
5319
+ icon?: string;
5320
+ tone?: 'default' | 'primary' | 'success' | 'warning' | 'danger' | 'info' | 'ready';
5321
+ isDefault?: boolean;
5322
+ tooltip?: string;
5323
+ }
5324
+ interface PraxisScopeBarActiveBadge {
5325
+ key: string;
5326
+ label: string;
5327
+ valueText: string;
5328
+ source: 'scope' | 'search' | 'external';
5329
+ }
5330
+ interface PraxisScopeBarConfig {
5331
+ items?: PraxisScopeBarItem[];
5332
+ activeId?: string;
5333
+ showOmnibox?: boolean;
5334
+ omniboxPlaceholder?: string;
5335
+ leadIcon?: string;
5336
+ leadLabel?: string;
5337
+ showClearButton?: boolean;
5338
+ clearLabel?: string;
5339
+ searchField?: string;
5340
+ targetWidgetId?: string;
5341
+ targetWidgetIds?: string[];
5342
+ showActiveFilterSummary?: boolean;
5343
+ filterLabels?: Record<string, string>;
5344
+ }
5345
+ declare class PraxisScopeBarComponent implements OnInit {
5346
+ private readonly eventBus;
5347
+ private readonly i18n;
5348
+ private readonly destroyRef;
5349
+ private targetFilterSubscription?;
5350
+ private isApplyingCriteriaToTarget;
5351
+ protected scopeNavigationLabel(): string;
5352
+ protected scopeSearchAriaLabel(): string;
5353
+ protected scopeClearSearchTitle(): string;
5354
+ protected scopeClearSearchAriaLabel(): string;
5355
+ protected scopeFiltersAriaLabel(): string;
5356
+ protected scopeActiveSummaryAriaLabel(): string;
5357
+ protected scopeActiveSummaryLabel(): string;
5358
+ protected scopeRemoveCriterionAriaLabel(label: string): string;
5359
+ protected scopeActiveFilterCountAriaLabel(count: number): string;
5360
+ chipsTrack?: ElementRef<HTMLElement>;
5361
+ set config(val: PraxisScopeBarConfig | undefined | null);
5362
+ private readonly itemsSignal;
5363
+ set items(val: PraxisScopeBarItem[] | undefined);
5364
+ get items(): PraxisScopeBarItem[] | undefined;
5365
+ set activeId(val: string | undefined);
5366
+ get activeId(): string | undefined;
5367
+ readonly activeIdChange: EventEmitter<string>;
5368
+ private readonly showOmniboxSignal;
5369
+ set showOmnibox(val: boolean);
5370
+ get showOmnibox(): boolean;
5371
+ omniboxPlaceholder: string;
5372
+ set omniboxValue(val: string | undefined);
5373
+ get omniboxValue(): string | undefined;
5374
+ readonly omniboxValueChange: EventEmitter<string>;
5375
+ omniboxDebounceMs: number;
5376
+ leadIcon: string;
5377
+ leadLabel?: string;
5378
+ showClearButton: boolean;
5379
+ clearLabel: string;
5380
+ private readonly showActiveFilterSummarySignal;
5381
+ set showActiveFilterSummary(val: boolean);
5382
+ get showActiveFilterSummary(): boolean;
5383
+ private readonly activeFiltersSignal;
5384
+ set activeFilters(val: Record<string, unknown> | undefined | null);
5385
+ get activeFilters(): Record<string, unknown>;
5386
+ readonly activeFiltersChange: EventEmitter<Record<string, unknown>>;
5387
+ private readonly filterLabelsSignal;
5388
+ set filterLabels(val: Record<string, string> | undefined | null);
5389
+ get filterLabels(): Record<string, string>;
5390
+ private readonly targetSignal;
5391
+ set target(val: any);
5392
+ get target(): any;
5393
+ targetWidgetId?: string;
5394
+ targetWidgetIds?: string[];
5395
+ scopeBarId: string;
5396
+ searchField: string;
5397
+ readonly scopeChange: EventEmitter<PraxisScopeBarItem>;
5398
+ readonly searchChange: EventEmitter<string>;
5399
+ readonly filterCriteriaChange: EventEmitter<Record<string, unknown>>;
5400
+ readonly clear: EventEmitter<void>;
5401
+ private readonly searchSubject$;
5402
+ readonly currentActiveId: i0.WritableSignal<string | null>;
5403
+ readonly currentSearchText: i0.WritableSignal<string>;
5404
+ readonly effectiveItems: i0.Signal<PraxisScopeBarItem[]>;
5405
+ readonly resolvedActiveId: i0.Signal<string | null>;
5406
+ readonly hasMainRow: i0.Signal<boolean>;
5407
+ readonly activeFilterBadges: i0.Signal<PraxisScopeBarActiveBadge[]>;
5408
+ readonly activeFilterCount: i0.Signal<number>;
5409
+ ngOnInit(): void;
5410
+ isItemActive(item: PraxisScopeBarItem): boolean;
5411
+ selectScope(item: PraxisScopeBarItem): void;
5412
+ onSearchInput(event: Event): void;
5413
+ clearSearch(): void;
5414
+ removeFilterCriterion(key: string): void;
5415
+ resetFilters(): void;
5416
+ canClear(): boolean;
5417
+ onTrackKeydown(event: KeyboardEvent): void;
5418
+ private resolveTargetWidgetIds;
5419
+ private dispatchFilters;
5420
+ private applyCriteriaToTarget;
5421
+ private bindTargetFilterCriteria;
5422
+ private getScopeManagedKeys;
5423
+ private discoverItemsFromTarget;
5424
+ private humanizeKey;
5425
+ private formatCriterionValue;
5426
+ private normalizeFilter;
5427
+ static ɵfac: i0.ɵɵFactoryDeclaration<PraxisScopeBarComponent, never>;
5428
+ 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>;
5429
+ static ngAcceptInputType_showOmnibox: unknown;
5430
+ static ngAcceptInputType_omniboxDebounceMs: unknown;
5431
+ static ngAcceptInputType_showClearButton: unknown;
5432
+ static ngAcceptInputType_showActiveFilterSummary: unknown;
5433
+ }
5434
+
4649
5435
  declare class DataFormatterComponent implements OnInit, OnChanges {
4650
5436
  private cdr;
4651
5437
  private formattingService;
@@ -4720,6 +5506,7 @@ interface AnalyticsTableConfigAdapterOptions {
4720
5506
  }
4721
5507
  declare class AnalyticsTableConfigAdapterService {
4722
5508
  private readonly i18n?;
5509
+ private readonly statsBuilder;
4723
5510
  constructor(i18n?: PraxisI18nService | undefined);
4724
5511
  toTableConfig(projection: PraxisAnalyticsProjection, options?: AnalyticsTableConfigAdapterOptions): TableConfig;
4725
5512
  private buildColumns;
@@ -4786,6 +5573,7 @@ declare const PRAXIS_FILTER_AUTHORING_MANIFEST: ComponentAuthoringManifest;
4786
5573
  declare class PraxisTableInlineAuthoringEditorComponent implements OnChanges {
4787
5574
  private readonly i18n;
4788
5575
  config: TableConfig;
5576
+ fieldMetadata: FieldMetadata[];
4789
5577
  readonly: boolean;
4790
5578
  configChange: EventEmitter<_praxisui_core.TableConfigModern>;
4791
5579
  workingConfig: TableConfig;
@@ -4805,11 +5593,11 @@ declare class PraxisTableInlineAuthoringEditorComponent implements OnChanges {
4805
5593
  pageSize: number;
4806
5594
  pageSizeOptionsText: string;
4807
5595
  showFirstLastButtons: boolean;
4808
- paginationStrategy: 'client' | 'server';
5596
+ paginationStrategy: 'client' | 'server' | undefined;
4809
5597
  paginationPosition: 'top' | 'bottom' | 'both';
4810
5598
  paginationStyle: 'default' | 'simple' | 'advanced' | 'compact';
4811
5599
  sortingEnabled: boolean;
4812
- sortingStrategy: 'client' | 'server';
5600
+ sortingStrategy: 'client' | 'server' | undefined;
4813
5601
  allowClearSort: boolean;
4814
5602
  defaultSortField: string;
4815
5603
  defaultSortDirection: 'asc' | 'desc';
@@ -4837,11 +5625,11 @@ declare class PraxisTableInlineAuthoringEditorComponent implements OnChanges {
4837
5625
  setPaginationPageSize(value: number | string): void;
4838
5626
  setPaginationPageSizeOptions(value: string): void;
4839
5627
  setPaginationShowFirstLastButtons(value: boolean): void;
4840
- setPaginationStrategy(value: 'client' | 'server'): void;
5628
+ setPaginationStrategy(value: 'client' | 'server' | undefined): void;
4841
5629
  setPaginationPosition(value: 'top' | 'bottom' | 'both'): void;
4842
5630
  setPaginationStyle(value: 'default' | 'simple' | 'advanced' | 'compact'): void;
4843
5631
  setSortingEnabled(value: boolean): void;
4844
- setSortingStrategy(value: 'client' | 'server'): void;
5632
+ setSortingStrategy(value: 'client' | 'server' | undefined): void;
4845
5633
  setSortingAllowClear(value: boolean): void;
4846
5634
  setSortingDefaultField(value: string): void;
4847
5635
  setSortingDefaultDirection(value: 'asc' | 'desc'): void;
@@ -4871,7 +5659,7 @@ declare class PraxisTableInlineAuthoringEditorComponent implements OnChanges {
4871
5659
  private getDefaultSortField;
4872
5660
  private getDefaultSortDirection;
4873
5661
  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>;
5662
+ 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
5663
  }
4876
5664
 
4877
5665
  interface ValueMappingPair {
@@ -4891,6 +5679,10 @@ declare class ValueMappingEditorComponent implements OnInit, OnChanges {
4891
5679
  keyInputType: 'text' | 'number' | 'boolean';
4892
5680
  labelKey: string;
4893
5681
  labelValue: string;
5682
+ domainOptions: Array<{
5683
+ value: string | number | boolean;
5684
+ label: string;
5685
+ }>;
4894
5686
  mappingChange: EventEmitter<{
4895
5687
  [key: string]: string;
4896
5688
  [key: number]: string;
@@ -4901,6 +5693,8 @@ declare class ValueMappingEditorComponent implements OnInit, OnChanges {
4901
5693
  showImportDialog: boolean;
4902
5694
  importJsonText: string;
4903
5695
  importError: string;
5696
+ private readonly i18n;
5697
+ tx(key: string, fallback: string): string;
4904
5698
  constructor(cdr: ChangeDetectorRef, dialog: MatDialog, snackBar: MatSnackBar);
4905
5699
  ngOnInit(): void;
4906
5700
  ngOnChanges(changes: SimpleChanges): void;
@@ -4910,6 +5704,7 @@ declare class ValueMappingEditorComponent implements OnInit, OnChanges {
4910
5704
  isKeyTruthy(pair: ValueMappingPair): boolean;
4911
5705
  getKeyPlaceholder(): string;
4912
5706
  addNewPair(): void;
5707
+ generateFromDomainOptions(): void;
4913
5708
  removePair(index: number): void;
4914
5709
  onKeyChange(index: number, value: string): void;
4915
5710
  onBooleanKeyChange(index: number, change: MatCheckboxChange): void;
@@ -4919,7 +5714,7 @@ declare class ValueMappingEditorComponent implements OnInit, OnChanges {
4919
5714
  importFromJson(): void;
4920
5715
  cancelImport(): void;
4921
5716
  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>;
5717
+ 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
5718
  }
4924
5719
 
4925
5720
  declare class FormulaGeneratorService {
@@ -5012,6 +5807,12 @@ declare class VisualFormulaBuilderComponent implements OnInit, OnChanges {
5012
5807
  private generateAndEmitExpression;
5013
5808
  get generatedExpression(): string;
5014
5809
  isMultiSelectField(paramKey: string): boolean;
5810
+ onFieldSelectionChange(paramKey: string, nextValue: unknown): void;
5811
+ getOrderedSelectedFields(paramKey: string): string[];
5812
+ moveSelectedField(paramKey: string, index: number, delta: -1 | 1): void;
5813
+ getShortFieldDisplayLabel(fieldName: string): string;
5814
+ formatSelectedFieldLabel(selection: unknown): string;
5815
+ private resolveFieldDisplayLabel;
5015
5816
  getFieldTypeIcon(fieldType: string): string;
5016
5817
  testFormula(): void;
5017
5818
  formatTestResult(result: any): string;
@@ -5465,5 +6266,176 @@ declare function coerceTableComponentEditPlan(value: unknown): TableComponentEdi
5465
6266
  declare function compileTableComponentEditPlans(plans: TableComponentEditPlan[], currentConfig: TableConfig): TableComponentEditPlanCompileResult;
5466
6267
  declare function compileTableComponentEditPlan(plan: TableComponentEditPlan, currentConfig: TableConfig): TableComponentEditPlanCompileResult;
5467
6268
 
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 };
6269
+ declare function isAnalyticalDrawerSchema(schema: unknown): schema is PraxisAnalyticalDrawerSchema;
6270
+ declare function interpolateRelationEndpoint(endpoint: string, row: Record<string, unknown> | null | undefined): {
6271
+ url: string;
6272
+ hasMissingTokens: boolean;
6273
+ };
6274
+ declare class PraxisAnalyticalDrawerComponent implements OnInit, OnChanges, OnDestroy {
6275
+ private _isOpen;
6276
+ private previousActiveElement;
6277
+ handleDocumentEscape(event?: Event): void;
6278
+ set isOpen(value: boolean);
6279
+ get isOpen(): boolean;
6280
+ private _resourcePath?;
6281
+ set resourcePath(value: string | undefined);
6282
+ get resourcePath(): string | undefined;
6283
+ private _drawerConfig;
6284
+ set drawerConfig(value: TableDrawerConfig | null);
6285
+ get drawerConfig(): TableDrawerConfig | null;
6286
+ private _row;
6287
+ set row(value: any | null);
6288
+ get row(): any | null;
6289
+ private _relations;
6290
+ set relations(value: Record<string, unknown>);
6291
+ get relations(): Record<string, unknown>;
6292
+ loadingRelations: boolean;
6293
+ closeDrawer: EventEmitter<void>;
6294
+ tabChange: EventEmitter<string>;
6295
+ relationFetch: EventEmitter<{
6296
+ key: string;
6297
+ endpoint: string;
6298
+ }>;
6299
+ protected readonly drawerConfigSignal: i0.WritableSignal<TableDrawerConfig | null>;
6300
+ protected readonly rowSignal: i0.WritableSignal<any>;
6301
+ protected readonly relationsSignal: i0.WritableSignal<Record<string, unknown>>;
6302
+ protected readonly activeTabId: i0.WritableSignal<string>;
6303
+ protected readonly customRelations: i0.WritableSignal<Record<string, unknown>>;
6304
+ protected readonly isFetchingRelations: i0.WritableSignal<boolean>;
6305
+ protected readonly resolvedRemoteConfig: i0.WritableSignal<TableDrawerConfig | null>;
6306
+ protected readonly isResolvingSchema: i0.WritableSignal<boolean>;
6307
+ private readonly evaluator;
6308
+ private readonly http;
6309
+ private readonly injector;
6310
+ private readonly drawerRegistry;
6311
+ private readonly apiUrl;
6312
+ private readonly runtimeContext;
6313
+ private readonly sanitizer;
6314
+ private readonly formattingService;
6315
+ private relationSubs;
6316
+ private schemaSub?;
6317
+ private contextSub?;
6318
+ private static readonly relationCaches;
6319
+ private readonly relationCache;
6320
+ private relationEpoch;
6321
+ constructor();
6322
+ private lastFetchedKey;
6323
+ private lastResolvingKey;
6324
+ private schemaResolutionEpoch;
6325
+ private destroyed;
6326
+ static clearCache(): void;
6327
+ private getContextScopePrefix;
6328
+ private resolveUrl;
6329
+ ngOnInit(): void;
6330
+ ngOnChanges(changes: SimpleChanges): void;
6331
+ ngOnDestroy(): void;
6332
+ getEffectiveDrawerConfig(): TableDrawerConfig | null;
6333
+ private mergeTabs;
6334
+ private resolveRemoteDrawerMetadata;
6335
+ protected onClose(): void;
6336
+ protected onBackdropClick(event: MouseEvent): void;
6337
+ protected selectTab(tabId: string): void;
6338
+ private getAnalyticalSchema;
6339
+ protected resolvedTabs: i0.Signal<PraxisAnalyticalDrawerTab[]>;
6340
+ private generateAutoOverviewProperties;
6341
+ private formatPropertyLabel;
6342
+ protected resolvedTitle: i0.Signal<string>;
6343
+ protected resolvedSubtitle: i0.Signal<string>;
6344
+ protected resolvedClassificationPill: i0.Signal<string>;
6345
+ protected resolvedWidth: i0.Signal<string>;
6346
+ protected getDrawerIcon(): string;
6347
+ protected getEvaluationContext(): Record<string, unknown>;
6348
+ protected isCardGridContent(content: unknown): boolean;
6349
+ protected asCardGrid(content: unknown): {
6350
+ columns?: number;
6351
+ cards?: any[];
6352
+ };
6353
+ protected getGridColumnsStyle(columns?: number): string;
6354
+ protected isRichContentDocument(content: unknown): boolean;
6355
+ protected asRichContentDocument(content: unknown): RichContentDocument;
6356
+ protected isPropertyGrid(content: unknown): boolean;
6357
+ protected asPropertyGrid(content: unknown): any[];
6358
+ protected isArray(val: unknown): boolean;
6359
+ protected evaluateAndFormatMetric(item: any): string;
6360
+ protected evaluatePropertyValue(item: any): string;
6361
+ private readonly microVizSafeHtmlCache;
6362
+ protected renderMicroViz(viz: PraxisPresentationVisualizationConfig | undefined, item: any): SafeHtml;
6363
+ private syncActiveTab;
6364
+ private fetchConfiguredRelations;
6365
+ private invalidateRelations;
6366
+ private cancelRelationRequests;
6367
+ static ɵfac: i0.ɵɵFactoryDeclaration<PraxisAnalyticalDrawerComponent, never>;
6368
+ 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>;
6369
+ }
6370
+
6371
+ type AnalyticalDrawerSchemaOrConfig = PraxisAnalyticalDrawerSchema | TableDrawerConfig;
6372
+ declare const PRAXIS_ANALYTICAL_DRAWER_SCHEMAS: InjectionToken<Record<string, AnalyticalDrawerSchemaOrConfig> | Record<string, AnalyticalDrawerSchemaOrConfig>[]>;
6373
+ /**
6374
+ * Registra esquemas de gavetas analíticas por coordenada de recurso (ex.: 'operations/incidentes').
6375
+ * Pode ser chamado no app.config.ts ou em providers de rotas/módulos.
6376
+ */
6377
+ declare function providePraxisAnalyticalDrawerSchemas(schemas: Record<string, AnalyticalDrawerSchemaOrConfig>): Provider;
6378
+ declare class AnalyticalDrawerRegistryService {
6379
+ private readonly registry;
6380
+ constructor();
6381
+ register(resourcePath: string, schema: AnalyticalDrawerSchemaOrConfig): void;
6382
+ registerAll(schemas: Record<string, AnalyticalDrawerSchemaOrConfig>): void;
6383
+ get(resourcePath: string): AnalyticalDrawerSchemaOrConfig | undefined;
6384
+ has(resourcePath: string): boolean;
6385
+ clear(): void;
6386
+ normalizeKey(path: string | undefined | null): string;
6387
+ static ɵfac: i0.ɵɵFactoryDeclaration<AnalyticalDrawerRegistryService, never>;
6388
+ static ɵprov: i0.ɵɵInjectableDeclaration<AnalyticalDrawerRegistryService>;
6389
+ }
6390
+
6391
+ interface ComputedFieldsEvaluationOptions {
6392
+ evaluator?: SafeExpressionEvaluator;
6393
+ formattingService?: {
6394
+ formatValue: (value: any, columnType: any, formatString: string) => any;
6395
+ } | null;
6396
+ }
6397
+ /**
6398
+ * Normaliza a definição de um campo computado (aceita string simples ou objeto estruturado).
6399
+ */
6400
+ declare function normalizeComputedFieldDefinition(raw: PraxisComputedFieldDefinition | string): PraxisComputedFieldDefinition;
6401
+ /**
6402
+ * Formata um valor calculado com suporte a moedas, porcentagens, números e formato compacto corporativo (ex: R$ 3,1M).
6403
+ */
6404
+ declare function formatComputedFieldValue(value: unknown, format?: string, type?: string, formattingService?: ComputedFieldsEvaluationOptions['formattingService']): unknown;
6405
+ /**
6406
+ * Enriquece uma coleção de linhas com as propriedades calculadas declaradas em `computedFieldsConfig`.
6407
+ * Executado durante o pipeline de ingestão de dados, tornando as propriedades computadas
6408
+ * nativamente visíveis para colunas, sorting, filtros, gavetas analíticas e exportação.
6409
+ */
6410
+ declare function applyComputedFieldsToRows<T extends Record<string, any> = Record<string, any>>(rows: T[], computedFieldsConfig?: PraxisComputedFieldsConfig | null, options?: ComputedFieldsEvaluationOptions): T[];
6411
+
6412
+ /** Raw compact schema authorship only; native normalization remains an editor/runtime projection. */
6413
+ declare function decodeTablePageInputs(value: unknown): {
6414
+ document: TableAuthoringDocument | null;
6415
+ diagnostics: EditorDiagnostic[];
6416
+ };
6417
+ /** Core prefixes these widget-relative JSON Pointers; this callback never resolves a source/latest. */
6418
+ declare function validateTablePageWidget(widget: WidgetInstance): readonly {
6419
+ code: string;
6420
+ path: string;
6421
+ }[];
6422
+ declare function encodeTablePageInputs(value: unknown): {
6423
+ inputs: Record<string, unknown> | null;
6424
+ diagnostics: EditorDiagnostic[];
6425
+ };
6426
+ /** No-change values in a materialized native editor cannot author defaults or erase absent keys. */
6427
+ declare function projectTablePageEditorChanges(authoredInputs: unknown, editorBaseline: unknown, editorValue: unknown): {
6428
+ inputs: Record<string, unknown> | null;
6429
+ diagnostics: EditorDiagnostic[];
6430
+ };
6431
+ /** Derive execution-only identity and disable independent preferences. Never persist this projection. */
6432
+ declare function materializeTablePageRuntimeInputs(value: unknown, pageId: string, widgetKey: string, options?: {
6433
+ preview?: boolean;
6434
+ }): {
6435
+ inputs: Record<string, unknown> | null;
6436
+ diagnostics: EditorDiagnostic[];
6437
+ };
6438
+ declare const TABLE_GOVERNED_PAGE_PREVIEW_ADAPTER: GovernedPagePreviewWidgetAdapter;
6439
+
6440
+ 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 };
6441
+ 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 };