@praxisui/table 1.0.0-beta.4 → 1.0.0-beta.40

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.d.ts CHANGED
@@ -1,27 +1,128 @@
1
1
  import * as i0 from '@angular/core';
2
- import { OnInit, OnChanges, AfterViewInit, OnDestroy, DoCheck, TemplateRef, EventEmitter, ElementRef, DestroyRef, ChangeDetectorRef, SimpleChanges, AfterContentInit, InjectionToken, Provider } from '@angular/core';
2
+ import { OnChanges, OnDestroy, EventEmitter, ElementRef, SimpleChanges, OnInit, AfterViewInit, DoCheck, DestroyRef, ChangeDetectorRef, NgZone, AfterContentInit, InjectionToken, Provider } from '@angular/core';
3
+ import { ActivatedRoute } from '@angular/router';
3
4
  import { MatTableDataSource } from '@angular/material/table';
4
5
  import { MatPaginator, PageEvent } from '@angular/material/paginator';
5
6
  import { MatSort, Sort } from '@angular/material/sort';
6
7
  import { MatSnackBar } from '@angular/material/snack-bar';
7
8
  import { SelectionModel } from '@angular/cdk/collections';
8
- import { SettingsPanelService, SettingsValueProvider, SettingsPanelRef } from '@praxisui/settings-panel';
9
+ import { CdkDragDrop, CdkDragEnd, CdkDrag, CdkDropList } from '@angular/cdk/drag-drop';
10
+ import { BehaviorSubject, Subscription, Observable } from 'rxjs';
11
+ import { SettingsPanelService, SettingsValueProvider } from '@praxisui/settings-panel';
9
12
  import * as _praxisui_core from '@praxisui/core';
10
- import { GlobalConfigService, TableConfig, ConfigStorage, SchemaIdParams, FieldMetadata, FormConfig, GenericCrudService, DynamicFormService, SchemaNormalizerService, ColumnDefinition, ConnectionStorage, IconPickerService, TableConfigService, ComponentDocMeta } from '@praxisui/core';
13
+ import { TableConfig, LoggerService, GlobalConfigService, AsyncConfigStorage, FieldMetadata, SchemaIdParams, FormConfig, GenericCrudService, DynamicFormService, SchemaNormalizerService, ComponentKeyService, LoadingState, ColumnDefinition, ConnectionStorage, LoadingOrchestrator, PraxisLoadingRenderer, GlobalActionSpec, IconPickerService, GlobalActionField, TableConfigService, FieldDefinition, ComponentDocMeta, AiCapabilityCategory, AiValueKind, AiCapability, AiCapabilityCatalog } from '@praxisui/core';
14
+ import { FunctionRegistry, DslParser } from '@praxisui/specification';
11
15
  import { DatePipe, DecimalPipe, CurrencyPipe, PercentPipe, UpperCasePipe, LowerCasePipe, TitleCasePipe } from '@angular/common';
12
- import { FormControl, FormGroup, AbstractControl, FormBuilder } from '@angular/forms';
16
+ import { FormGroup, FormControl, FormBuilder } from '@angular/forms';
13
17
  import { MatDialog } from '@angular/material/dialog';
14
18
  import { CdkOverlayOrigin, ConnectedPosition } from '@angular/cdk/overlay';
15
- import { SpecificationBridgeService, RuleBuilderConfig, RuleBuilderState } from '@praxisui/visual-builder';
16
19
  import { PraxisDialog } from '@praxisui/dialog';
17
- import { BehaviorSubject, Observable } from 'rxjs';
18
- import { CdkDragDrop } from '@angular/cdk/drag-drop';
20
+ import { MatTabChangeEvent } from '@angular/material/tabs';
19
21
  import * as _angular_material_paginator_d_Zo1cMMo4 from '@angular/material/paginator.d-Zo1cMMo4';
20
22
  import { MatCheckboxChange } from '@angular/material/checkbox';
23
+ import * as _praxisui_table_rule_builder from '@praxisui/table-rule-builder';
24
+ import { RuleEffectDefinition } from '@praxisui/table-rule-builder';
21
25
 
22
- type ColumnDataType = 'date' | 'number' | 'currency' | 'percentage' | 'string' | 'boolean' | 'custom';
26
+ interface ActionLike {
27
+ action?: string;
28
+ id?: string;
29
+ code?: string;
30
+ key?: string;
31
+ name?: string;
32
+ type?: string;
33
+ icon?: string;
34
+ label?: string;
35
+ }
36
+ declare function getActionId(action: ActionLike): string;
37
+
38
+ declare class PraxisTableToolbar implements OnChanges, OnDestroy {
39
+ private hostRef;
40
+ private logger?;
41
+ private static dslRuntimeInstanceCounter;
42
+ config?: TableConfig;
43
+ backgroundColor: string | null;
44
+ placement: 'header' | 'footer';
45
+ showMain: boolean;
46
+ showActionsGroup: boolean;
47
+ showEndActions: boolean;
48
+ showMobileActions: boolean;
49
+ showReset: boolean;
50
+ dslContext: Record<string, any> | null;
51
+ dslFunctionRegistry: FunctionRegistry<any> | null;
52
+ toolbarAction: EventEmitter<{
53
+ action: string;
54
+ actionConfig?: any;
55
+ }>;
56
+ reset: EventEmitter<void>;
57
+ readonly getActionId: typeof getActionId;
58
+ private dslParser;
59
+ private dslRuntimeRegistry;
60
+ private readonly dslRuntimeContextKey;
61
+ private readonly visibleWhenSpecCache;
62
+ private readonly validToolbarActionTypes;
63
+ private readonly warnedInvalidToolbarActionTypes;
64
+ private readonly warnedMenuWithoutChildren;
65
+ private readonly warnedVisibleWhenFallback;
66
+ private readonly warnedInvalidShortcuts;
67
+ private readonly warnedInvalidShortcutScopes;
68
+ private readonly warnedShortcutConflicts;
69
+ private fallbackLogger?;
70
+ private fallbackLoggerEnvironment;
71
+ constructor(hostRef?: ElementRef<HTMLElement> | null, logger?: LoggerService | undefined);
72
+ ngOnChanges(changes: SimpleChanges): void;
73
+ ngOnDestroy(): void;
74
+ private configureDslRuntime;
75
+ private getNestedPropertyValue;
76
+ private cloneForEmit;
77
+ private getLogger;
78
+ private warnLog;
79
+ emitToolbarAction(event: Event, action: string, actionConfig?: any): void;
80
+ getStartActions(): any[];
81
+ getNonStartActions(): any[];
82
+ getOverflowActions(): any[];
83
+ getActionType(action: any): 'button' | 'icon' | 'fab' | 'menu';
84
+ getActionChildren(action: any): any[];
85
+ getVisibleActionChildren(action: any): any[];
86
+ isMenuWithoutChildren(action: any): boolean;
87
+ getActionColor(action: any): any;
88
+ getActionAriaLabel(action: any): string;
89
+ isActionDisabled(action: any): boolean;
90
+ onDocumentKeydown(event: KeyboardEvent): void;
91
+ getBulkActionsPosition(): 'toolbar' | 'floating' | 'both';
92
+ shouldRenderToolbarBulkActions(): boolean;
93
+ getBulkToolbarActions(): any[];
94
+ private getVisibleToolbarActions;
95
+ private resolveVisibleToolbarAction;
96
+ private isActionVisible;
97
+ private evaluateVisibleWhen;
98
+ private resolveVisibleWhenFallback;
99
+ private resolveVisibleWhenFallbackPolicy;
100
+ private resolveRuntimeEnvironment;
101
+ private isDiagnosticsEnvironment;
102
+ private buildDslContext;
103
+ private getKnownDslFields;
104
+ private warnVisibleWhenFallback;
105
+ private collectShortcutBindings;
106
+ private resolveShortcutScope;
107
+ private normalizeShortcutCombo;
108
+ private getShortcutComboFromEvent;
109
+ private normalizeShortcutKey;
110
+ private isEditableElement;
111
+ private isEventInsideToolbar;
112
+ private wasShortcutAlreadyHandled;
113
+ private markShortcutHandled;
114
+ private warnInvalidShortcut;
115
+ private warnInvalidShortcutScope;
116
+ private warnShortcutConflict;
117
+ private sortActions;
118
+ getExportIcon(format: string): string;
119
+ static ɵfac: i0.ɵɵFactoryDeclaration<PraxisTableToolbar, [null, { optional: true; }]>;
120
+ static ɵcmp: i0.ɵɵComponentDeclaration<PraxisTableToolbar, "praxis-table-toolbar", never, { "config": { "alias": "config"; "required": false; }; "backgroundColor": { "alias": "backgroundColor"; "required": false; }; "placement": { "alias": "placement"; "required": false; }; "showMain": { "alias": "showMain"; "required": false; }; "showActionsGroup": { "alias": "showActionsGroup"; "required": false; }; "showEndActions": { "alias": "showEndActions"; "required": false; }; "showMobileActions": { "alias": "showMobileActions"; "required": false; }; "showReset": { "alias": "showReset"; "required": false; }; "dslContext": { "alias": "dslContext"; "required": false; }; "dslFunctionRegistry": { "alias": "dslFunctionRegistry"; "required": false; }; }, { "toolbarAction": "toolbarAction"; "reset": "reset"; }, never, ["[advancedFilter]", "[toolbar]", "[end-actions]"], true, never>;
121
+ }
122
+
123
+ type ColumnDataType$1 = 'date' | 'number' | 'currency' | 'percentage' | 'string' | 'boolean' | 'custom';
23
124
  interface FormatterConfig {
24
- type: ColumnDataType;
125
+ type: ColumnDataType$1;
25
126
  options: any;
26
127
  }
27
128
  interface DateFormatterOptions {
@@ -88,7 +189,7 @@ declare class DataFormattingService {
88
189
  /**
89
190
  * Apply formatting to a value based on column type and format string
90
191
  */
91
- formatValue(value: any, columnType: ColumnDataType, formatString: string): any;
192
+ formatValue(value: any, columnType: ColumnDataType$1, formatString: string): any;
92
193
  /**
93
194
  * Coerce value to the expected type for formatting
94
195
  */
@@ -118,6 +219,8 @@ declare class DataFormattingService {
118
219
  * Apply string transformations
119
220
  */
120
221
  private applyStringTransform;
222
+ private isMaskFormat;
223
+ private applyMask;
121
224
  /**
122
225
  * Format boolean values
123
226
  */
@@ -125,7 +228,7 @@ declare class DataFormattingService {
125
228
  /**
126
229
  * Check if formatting is needed for a column
127
230
  */
128
- needsFormatting(columnType: ColumnDataType, formatString: string): boolean;
231
+ needsFormatting(columnType: ColumnDataType$1, formatString: string | null | undefined): boolean;
129
232
  static ɵfac: i0.ɵɵFactoryDeclaration<DataFormattingService, never>;
130
233
  static ɵprov: i0.ɵɵInjectableDeclaration<DataFormattingService>;
131
234
  }
@@ -141,17 +244,23 @@ declare class TableDefaultsProvider {
141
244
  * Returns default configuration for a given table identifier.
142
245
  * @param tableId Table identifier
143
246
  */
144
- getDefaults(tableId: string): TableConfig;
247
+ getDefaults(_tableId: string): TableConfig;
145
248
  static ɵfac: i0.ɵɵFactoryDeclaration<TableDefaultsProvider, never>;
146
249
  static ɵprov: i0.ɵɵInjectableDeclaration<TableDefaultsProvider>;
147
250
  }
148
251
 
149
252
  type FilterConfig = {
150
- quickField?: string;
151
253
  alwaysVisibleFields?: string[];
152
- placeholder?: string;
254
+ /**
255
+ * Deep metadata overrides for always-visible fields.
256
+ * Source of truth remains the filter DTO; this map applies controlled
257
+ * overrides per field after DTO normalization.
258
+ */
259
+ alwaysVisibleFieldMetadataOverrides?: Record<string, Record<string, any>>;
260
+ /** User-selected extra field ids to show before pinned always-visible */
261
+ selectedFieldIds?: string[];
153
262
  showAdvanced?: boolean;
154
- mode?: 'auto' | 'filter' | 'card';
263
+ mode?: 'filter';
155
264
  changeDebounceMs?: number;
156
265
  allowSaveTags?: boolean;
157
266
  placeBooleansInActions?: boolean;
@@ -159,26 +268,45 @@ type FilterConfig = {
159
268
  alwaysMinWidth?: number;
160
269
  alwaysColsMd?: number;
161
270
  alwaysColsLg?: number;
162
- autoSummary?: boolean;
163
271
  confirmTagDelete?: boolean;
164
- debugLayout?: boolean;
165
272
  tagColor?: 'primary' | 'accent' | 'warn' | 'basic';
166
273
  tagVariant?: 'filled' | 'outlined';
167
274
  tagButtonColor?: 'primary' | 'accent' | 'warn' | 'basic';
168
275
  actionsButtonColor?: 'primary' | 'accent' | 'warn' | 'basic';
169
276
  actionsVariant?: 'standard' | 'outlined';
277
+ /**
278
+ * Opt-in para mapear searchable-select na variante compacta inline.
279
+ * Padrão recomendado: false em cenários corporativos com catálogos grandes/remotos.
280
+ */
281
+ useInlineSearchableSelectVariant?: boolean;
282
+ /** Opt-in para mapear rangeSlider na variante compacta inline (single/range). */
283
+ useInlineRangeVariant?: boolean;
284
+ /** Opt-in para mapear date/dateInput/datepicker na variante compacta inline. */
285
+ useInlineDateVariant?: boolean;
286
+ /** Opt-in para mapear dateRange/daterange na variante compacta inline. */
287
+ useInlineDateRangeVariant?: boolean;
288
+ /** Opt-in para mapear time/timePicker na variante compacta inline. */
289
+ useInlineTimeVariant?: boolean;
290
+ /** Opt-in para mapear timeRange/timerange na variante compacta inline. */
291
+ useInlineTimeRangeVariant?: boolean;
292
+ /** Opt-in para mapear treeSelect/multiSelectTree na variante compacta inline. */
293
+ useInlineTreeSelectVariant?: boolean;
170
294
  overlayVariant?: 'card' | 'frosted';
171
295
  overlayBackdrop?: boolean;
172
296
  advancedOpenMode?: 'overlay' | 'modal' | 'drawer';
297
+ /** Habilita botão de limpar nos campos do formulário avançado. */
298
+ advancedClearButtonsEnabled?: boolean;
299
+ logLevel?: 'none' | 'error' | 'warn' | 'info' | 'debug';
300
+ enablePerformanceMetrics?: boolean;
173
301
  };
174
302
  declare class FilterConfigService {
175
303
  private storage;
176
304
  private readonly PREFIX;
177
- constructor(storage: ConfigStorage);
305
+ constructor(storage: AsyncConfigStorage);
178
306
  /**
179
307
  * Load a persisted filter configuration for the given key.
180
308
  */
181
- load(key: string): FilterConfig | undefined;
309
+ load(key: string): Promise<FilterConfig | undefined>;
182
310
  /**
183
311
  * Persist a filter configuration for the given key.
184
312
  */
@@ -195,8 +323,17 @@ type FilterTag = {
195
323
  type I18n = {
196
324
  searchPlaceholder: string;
197
325
  advanced: string;
326
+ advancedTitle?: string;
198
327
  clear: string;
199
328
  apply: string;
329
+ add?: string;
330
+ filtersAdd?: string;
331
+ filtersSearch?: string;
332
+ addCount?: string;
333
+ pendingCount?: string;
334
+ activeFiltersCount?: string;
335
+ selectAll?: string;
336
+ selectAllPartial?: string;
200
337
  edit: string;
201
338
  noData: string;
202
339
  quickFieldNotFound: string;
@@ -209,6 +346,11 @@ type I18n = {
209
346
  settings: string;
210
347
  save: string;
211
348
  cancel: string;
349
+ shortcutsLabel?: string;
350
+ shortcutSaved: string;
351
+ readonlyShortcut: string;
352
+ shortcutRemoved: string;
353
+ undo: string;
212
354
  };
213
355
  declare class PraxisFilter implements OnInit, OnChanges, AfterViewInit, OnDestroy, DoCheck {
214
356
  private crud;
@@ -219,11 +361,21 @@ declare class PraxisFilter implements OnInit, OnChanges, AfterViewInit, OnDestro
219
361
  private snackBar;
220
362
  private dialog;
221
363
  private cdr;
364
+ private ngZone;
222
365
  private dynamicForm;
223
366
  private schemaNormalizer;
367
+ private componentKeys;
368
+ private route?;
224
369
  resourcePath: string;
225
- formId: string;
226
- mode: 'auto' | 'filter' | 'card';
370
+ /**
371
+ * Optional static metadata for offline/showcase usage.
372
+ * When this input is provided (including an empty array), server schema loading is bypassed.
373
+ */
374
+ fieldMetadata?: FieldMetadata[] | null;
375
+ filterId?: string;
376
+ formId?: string;
377
+ componentInstanceId?: string;
378
+ mode: 'filter';
227
379
  /** Controls outdated schema notifications visibility and channel (only effective in edit mode) */
228
380
  notifyIfOutdated: 'inline' | 'snackbar' | 'both' | 'none';
229
381
  /** Snooze duration for schema outdated notifications (ms), only in edit mode */
@@ -233,36 +385,49 @@ declare class PraxisFilter implements OnInit, OnChanges, AfterViewInit, OnDestro
233
385
  /** Enable edit mode (gates notifications) */
234
386
  editModeEnabled: boolean;
235
387
  value?: Record<string, any>;
236
- quickField?: string;
237
388
  alwaysVisibleFields?: string[];
389
+ /**
390
+ * Optional metadata overrides for always-visible fields.
391
+ * Keys are field names from the filter DTO schema.
392
+ */
393
+ alwaysVisibleFieldMetadataOverrides: Record<string, Record<string, any>> | undefined;
394
+ /** Additional selected field ids to render before pinned always-visible */
395
+ selectedFieldIds: string[];
238
396
  tags?: FilterTag[];
239
397
  allowSaveTags?: boolean;
240
398
  persistenceKey?: string;
241
399
  i18n?: Partial<I18n>;
242
400
  changeDebounceMs: number;
243
- /** Controla a exibição do botão de configurações dentro do filtro */
401
+ /** Controla a exibição do botão de preferências dentro do filtro */
244
402
  showFilterSettings: boolean;
245
- /** Data used to render the summary card when mode resolves to 'card'. */
246
- summary?: any;
247
- /** Custom template to render the summary card; receives the summary as $implicit. */
248
- summaryTemplate?: TemplateRef<any>;
249
- /** Mapping functions to build the native summary card. */
250
- summaryMap?: {
251
- avatar?: (s: any) => string;
252
- title: (s: any) => string;
253
- subtitle?: (s: any) => string;
254
- badges?: Array<(s: any) => string>;
255
- };
256
- /** When true and mode='auto', generates a summary from active filters if no summary is provided. */
257
- autoSummary: boolean;
258
403
  /** Exibir confirmação ao excluir atalho (tag) */
259
404
  confirmTagDelete: boolean;
260
- /** Debug visual de layout/alinhamento */
261
- debugLayout: boolean;
262
405
  /** Move toggles/booleans simples para a área de ações */
263
406
  placeBooleansInActions: boolean;
264
407
  /** Mostrar rótulos dos toggles na área de ações */
265
408
  showToggleLabels: boolean;
409
+ /** Usa variante compacta de select no modo inline para ganhar espaço */
410
+ useInlineSelectVariant: boolean;
411
+ /** Habilita variante inline para searchable-select, async-select e autocomplete. */
412
+ useInlineSearchableSelectVariant: boolean;
413
+ /** Usa variante compacta de multi-select no modo inline para ganhar espaço */
414
+ useInlineMultiSelectVariant: boolean;
415
+ /** Usa variante compacta de input/search no modo inline para ganhar espaço */
416
+ useInlineInputVariant: boolean;
417
+ /** Usa variante compacta de toggle no modo inline para ganhar espaço */
418
+ useInlineToggleVariant: boolean;
419
+ /** Usa variante compacta de range slider (modo simples) para ganhar espaço */
420
+ useInlineRangeVariant: boolean;
421
+ /** Usa variante compacta de date/dateInput/datepicker no modo inline para ganhar espaço */
422
+ useInlineDateVariant: boolean;
423
+ /** Usa variante compacta de dateRange/daterange no modo inline para ganhar espaço */
424
+ useInlineDateRangeVariant: boolean;
425
+ /** Usa variante compacta de time/timePicker no modo inline para ganhar espaço */
426
+ useInlineTimeVariant: boolean;
427
+ /** Usa variante compacta de timeRange/timerange no modo inline para ganhar espaço */
428
+ useInlineTimeRangeVariant: boolean;
429
+ /** Usa variante compacta de treeSelect no modo inline para ganhar espaço */
430
+ useInlineTreeSelectVariant: boolean;
266
431
  /** Config da grade dos alwaysVisible */
267
432
  alwaysMinWidth: number;
268
433
  alwaysColsMd: number;
@@ -278,13 +443,17 @@ declare class PraxisFilter implements OnInit, OnChanges, AfterViewInit, OnDestro
278
443
  overlayVariant: 'card' | 'frosted';
279
444
  overlayBackdrop: boolean;
280
445
  /** Advanced panel open mode */
281
- advancedOpenMode: 'overlay' | 'modal' | 'drawer';
446
+ advancedOpenMode: 'modal' | 'drawer';
447
+ /** Habilita botão de limpar nos campos do formulário avançado */
448
+ advancedClearButtonsEnabled?: boolean;
282
449
  submit: EventEmitter<Record<string, any>>;
283
450
  change: EventEmitter<Record<string, any>>;
284
451
  clear: EventEmitter<void>;
285
- modeChange: EventEmitter<"filter" | "card">;
452
+ modeChange: EventEmitter<"filter">;
286
453
  requestSearch: EventEmitter<Record<string, any>>;
287
454
  tagsChange: EventEmitter<FilterTag[]>;
455
+ /** Emits when user-selected field ids change */
456
+ selectedFieldIdsChange: EventEmitter<string[]>;
288
457
  metaChanged: EventEmitter<{
289
458
  schemaId: string;
290
459
  serverHash?: string;
@@ -297,12 +466,14 @@ declare class PraxisFilter implements OnInit, OnChanges, AfterViewInit, OnDestro
297
466
  lastVerifiedAt?: string;
298
467
  formId?: string;
299
468
  }>;
300
- quickControl: FormControl<any>;
301
- quickForm: FormGroup<Record<string, AbstractControl<any, any, any>>>;
302
469
  alwaysForm: FormGroup<Record<string, FormControl<unknown>>>;
303
- quickFieldMeta?: FieldMetadata;
304
- quickFieldMetaArray: FieldMetadata[];
305
470
  alwaysVisibleMetas: FieldMetadata[];
471
+ /** User-selected field metadata rendered before pinned (always) */
472
+ selectedMetas: FieldMetadata[];
473
+ compactSelectedMetas: FieldMetadata[];
474
+ compactAlwaysVisibleMetas: FieldMetadata[];
475
+ gridSelectedMetas: FieldMetadata[];
476
+ gridAlwaysVisibleMetas: FieldMetadata[];
306
477
  toggleMetas: FieldMetadata[];
307
478
  advancedConfig?: FormConfig;
308
479
  displayedTags: FilterTag[];
@@ -315,33 +486,32 @@ declare class PraxisFilter implements OnInit, OnChanges, AfterViewInit, OnDestro
315
486
  private advancedChange$;
316
487
  private alwaysFormReset$;
317
488
  private dto;
318
- modeState: 'filter' | 'card';
319
489
  advancedOpen: boolean;
320
490
  advancedValid: boolean;
321
491
  activeFiltersCount: number;
322
492
  saving: boolean;
323
493
  i18nLabels: I18n;
324
- placeholder?: string;
325
494
  private configKey;
326
- private pendingQuickValue?;
327
- private autoSummaryData?;
328
495
  private lastSchemaMeta?;
329
496
  schemaOutdated: boolean;
330
497
  anchorRef?: CdkOverlayOrigin;
331
- quickHostRef?: ElementRef<HTMLElement>;
498
+ addAnchor?: CdkOverlayOrigin;
499
+ advancedButton?: ElementRef<HTMLElement>;
332
500
  overlayOrigin?: CdkOverlayOrigin;
333
501
  overlayWidth: number | string;
334
502
  isMobile: boolean;
335
503
  advancedTitleId: string;
336
504
  advancedPanelId: string;
337
- quickFieldMode: 'dynamic' | 'fallback';
505
+ addQuery: string;
506
+ addItems: Array<{
507
+ id: string;
508
+ label: string;
509
+ }>;
510
+ private addItemsUpdateQueued;
511
+ private applySchemaQueued;
338
512
  private isViewInitialized;
339
- private pendingQuickFieldSetup;
340
- private isQuickFieldSetupInProgress;
341
- private _dbgPrevQuickArrayRef;
342
513
  private _dbgPrevAlwaysArrayRef;
343
514
  private _dbgPrevToggleArrayRef;
344
- private _dbgPrevQuickFormRef;
345
515
  private _dbgPrevAlwaysFormRef;
346
516
  private _dbgDoCheckCount;
347
517
  private _dbgLastApplyMetasAt;
@@ -349,19 +519,34 @@ declare class PraxisFilter implements OnInit, OnChanges, AfterViewInit, OnDestro
349
519
  private _dbgLastAlwaysComponentsAt;
350
520
  private _dbgLastToggleComponentsAt;
351
521
  overlayPositions: ConnectedPosition[];
352
- private quickSub?;
353
522
  private advancedDebouncedSub?;
523
+ private lastActiveElement?;
354
524
  private lastSubmitAt;
355
525
  private resizeObs?;
356
526
  private mutationObs?;
357
- private ignoreOutsideUntil;
358
527
  private _resolvedPrefs;
359
528
  private resolveSchemaPrefs;
360
- constructor(crud: GenericCrudService<any>, configStorage: ConfigStorage, destroyRef: DestroyRef, filterConfig: FilterConfigService, settingsPanel: SettingsPanelService, snackBar: MatSnackBar, dialog: MatDialog, cdr: ChangeDetectorRef, dynamicForm: DynamicFormService, schemaNormalizer: SchemaNormalizerService);
529
+ private domIdSeed;
530
+ private componentKeyId;
531
+ private resolveConfigKey;
532
+ getComponentKeyId(): string | null;
533
+ private filterTagsKey;
534
+ private filterDtoKey;
535
+ private filterSchemaMetaKey;
536
+ private filterSchemaIgnoreKey;
537
+ private filterSchemaSnoozeKey;
538
+ private filterSchemaNotifiedKey;
539
+ constructor(crud: GenericCrudService<any>, configStorage: AsyncConfigStorage, destroyRef: DestroyRef, filterConfig: FilterConfigService, settingsPanel: SettingsPanelService, snackBar: MatSnackBar, dialog: MatDialog, cdr: ChangeDetectorRef, ngZone: NgZone, dynamicForm: DynamicFormService, schemaNormalizer: SchemaNormalizerService, componentKeys: ComponentKeyService, route?: ActivatedRoute | undefined);
361
540
  private readonly global;
541
+ private isFilterDebugEnabled;
542
+ private logFilterDebug;
543
+ private logFilterWarn;
362
544
  private readonly filterDrawerAdapter;
545
+ private lastSavedConfigJson;
546
+ private setSchemaLoading;
547
+ private setActiveFiltersCount;
363
548
  private loadSavedTagsFromStorage;
364
- ngOnInit(): void;
549
+ ngOnInit(): Promise<void>;
365
550
  ngAfterViewInit(): void;
366
551
  onWindowResize(): void;
367
552
  private initDynamicObservers;
@@ -369,23 +554,38 @@ declare class PraxisFilter implements OnInit, OnChanges, AfterViewInit, OnDestro
369
554
  private updateOverlayWidth;
370
555
  private computeIsMobile;
371
556
  ngOnChanges(changes: SimpleChanges): void;
557
+ private areStringArraysEqual;
558
+ private areMetadataOverrideMapsEqual;
559
+ /** Force-sync settings coming from parent table config updates. */
560
+ applyExternalSettings(cfg?: Partial<FilterConfig>): void;
372
561
  openSettings(): void;
373
- switchToFilter(): void;
374
562
  createTag(label?: string): void;
375
563
  renameTag(tag: FilterTag, label?: string): void;
376
564
  deleteTag(tag: FilterTag): void;
565
+ removeFilter(tag: FilterTag): void;
377
566
  startEditTag(tag: FilterTag, $event?: Event): void;
378
567
  commitEditTag(tag: FilterTag, $event?: Event): void;
379
568
  cancelEditTag($event?: Event): void;
380
569
  advancedForm?: FormGroup<Record<string, any>>;
570
+ isActiveTag(tag: FilterTag): boolean;
571
+ private equalsDto;
572
+ private normalizeForCompare;
381
573
  private buildFilteredSchemaContext;
382
574
  private loadSchemaViaClient;
383
575
  loadSchema(): void;
384
576
  private applySchemaMetas;
577
+ private applySchemaMetasNow;
578
+ private pickMetasByOrder;
579
+ private withInferredFilterControlType;
580
+ private isAllowedFilterControlType;
581
+ private inferFilterControlType;
582
+ private cloneAlwaysVisibleMetadataOverrides;
583
+ private sanitizeAlwaysVisibleMetadataOverrides;
584
+ private sanitizeMetadataOverrideValue;
585
+ private mergeAlwaysVisibleMetadata;
385
586
  ngDoCheck(): void;
386
- onQuickComponents(map: Map<string, any>): void;
387
- onQuickFieldCreated(ev: any): void;
388
587
  onAlwaysComponents(map: Map<string, any>): void;
588
+ onSelectedComponents(map: Map<string, any>): void;
389
589
  onToggleComponents(map: Map<string, any>): void;
390
590
  onAdvancedReady(event: {
391
591
  formGroup: FormGroup<Record<string, any>>;
@@ -394,20 +594,28 @@ declare class PraxisFilter implements OnInit, OnChanges, AfterViewInit, OnDestro
394
594
  formData: Record<string, any>;
395
595
  }): void;
396
596
  onAdvancedValidityChange(valid: boolean): void;
597
+ onAddOpened(opened: boolean): void;
598
+ onAddQuery(q: string): void;
599
+ private updateAddItems;
600
+ trackById(_idx: number, it: {
601
+ id: string;
602
+ }): string;
603
+ onAddSelectionChange(values: string[] | null | undefined): void;
604
+ private formatWithCount;
605
+ getAddAriaLabel(): string;
606
+ getAddTriggerLabel(): string;
607
+ getActiveFiltersLabel(): string;
608
+ isAllSelected(): boolean;
609
+ isSomeSelected(): boolean;
610
+ toggleSelectAll(): void;
397
611
  onAdvancedSubmit(event: {
398
612
  formData: Record<string, any>;
399
613
  }): void;
400
614
  private closeAdvanced;
401
- get currentSummary(): any;
402
- get currentSummaryMap(): {
403
- avatar?: (s: any) => string;
404
- title: (s: any) => string;
405
- subtitle?: (s: any) => string;
406
- badges?: Array<(s: any) => string>;
407
- } | undefined;
408
- private updateAutoSummary;
409
- private defaultSummaryMap;
410
- private formatValueForBadge;
615
+ /** Salva o estado atual dos filtros como um atalho (tag) do usuário */
616
+ saveCurrentAsTag(): void;
617
+ /** Persistência centralizada de atalho a partir de um DTO explícito */
618
+ private saveAsShortcutFromDto;
411
619
  getAdvancedAriaLabel(): string;
412
620
  private getSchemaMetaKey;
413
621
  private getOutdatedIgnoreKey;
@@ -421,287 +629,359 @@ declare class PraxisFilter implements OnInit, OnChanges, AfterViewInit, OnDestro
421
629
  private wasOutdatedNotified;
422
630
  private verifyServerSchemaVersion;
423
631
  private maybeShowOutdatedSnack;
424
- /**
425
- * Sets up Quick Field creating a control from metadata and wiring it to quickForm.
426
- * Falls back to generic input if creation fails.
427
- */
428
- private setupQuickField;
429
- /**
430
- * Ensures fallback setup happens only once, preventing multiple executions.
431
- */
432
- private ensureFallbackSetup;
433
- /**
434
- * Fallback method - maintains current behavior with generic string input.
435
- * This ensures the system continues working even if dynamic creation fails.
436
- */
437
- private setupQuickFieldFallback;
438
- /**
439
- * Applies pending quick value to typed control with proper conversion.
440
- */
441
- private applyPendingQuickValue;
442
- getQuickFieldIcon(): string;
443
- getQuickInputType(): string;
444
- getQuickInputMode(): string | null;
445
632
  ngOnDestroy(): void;
446
633
  isUserTag(tag: FilterTag): boolean;
447
634
  applyTag(tag: FilterTag): void;
448
- onQuickNumericKeypress(event: KeyboardEvent): void;
449
- onQuickBlurFormat(): void;
450
- private bindQuickControlChanges;
451
635
  private bindAdvancedDebounce;
452
636
  onSubmit(): void;
453
637
  onClear(): void;
454
- quickHasValue(): boolean;
455
638
  private isEventFromNestedOverlay;
456
- onOverlayDetach(): void;
457
- onOverlayOutsideClick(_event: MouseEvent): void;
639
+ private ensureAdvancedConfigReady;
458
640
  private openAdvancedModal;
459
641
  private openAdvancedDrawer;
460
642
  toggleAdvanced(): void;
643
+ private usesProvidedFieldMetadata;
644
+ private applyProvidedFieldMetadata;
461
645
  private saveConfig;
646
+ private captureLastActiveElement;
647
+ private restoreFocusAfterAdvanced;
462
648
  private mergeI18n;
463
649
  private persist;
464
650
  private clearPersisted;
465
651
  private persistTags;
652
+ private cleanFilterPayload;
653
+ private upsertDtoValue;
654
+ private isEffectivelyEmptyFilterValue;
466
655
  private syncFormsToDto;
467
- onQuickClear(): void;
468
656
  private updateDisplayedTags;
469
- private evaluateMode;
657
+ private normalizeMode;
658
+ private normalizeAdvancedOpenMode;
470
659
  onGlobalKeydown(event: KeyboardEvent): void;
471
660
  private isEditableElement;
472
661
  private focusQuick;
473
- static ɵfac: i0.ɵɵFactoryDeclaration<PraxisFilter, never>;
474
- static ɵcmp: i0.ɵɵComponentDeclaration<PraxisFilter, "praxis-filter", never, { "resourcePath": { "alias": "resourcePath"; "required": true; }; "formId": { "alias": "formId"; "required": true; }; "mode": { "alias": "mode"; "required": false; }; "notifyIfOutdated": { "alias": "notifyIfOutdated"; "required": false; }; "snoozeMs": { "alias": "snoozeMs"; "required": false; }; "autoOpenSettingsOnOutdated": { "alias": "autoOpenSettingsOnOutdated"; "required": false; }; "editModeEnabled": { "alias": "editModeEnabled"; "required": false; }; "value": { "alias": "value"; "required": false; }; "quickField": { "alias": "quickField"; "required": false; }; "alwaysVisibleFields": { "alias": "alwaysVisibleFields"; "required": false; }; "tags": { "alias": "tags"; "required": false; }; "allowSaveTags": { "alias": "allowSaveTags"; "required": false; }; "persistenceKey": { "alias": "persistenceKey"; "required": false; }; "i18n": { "alias": "i18n"; "required": false; }; "changeDebounceMs": { "alias": "changeDebounceMs"; "required": false; }; "showFilterSettings": { "alias": "showFilterSettings"; "required": false; }; "summary": { "alias": "summary"; "required": false; }; "summaryTemplate": { "alias": "summaryTemplate"; "required": false; }; "summaryMap": { "alias": "summaryMap"; "required": false; }; "autoSummary": { "alias": "autoSummary"; "required": false; }; "confirmTagDelete": { "alias": "confirmTagDelete"; "required": false; }; "debugLayout": { "alias": "debugLayout"; "required": false; }; "placeBooleansInActions": { "alias": "placeBooleansInActions"; "required": false; }; "showToggleLabels": { "alias": "showToggleLabels"; "required": false; }; "alwaysMinWidth": { "alias": "alwaysMinWidth"; "required": false; }; "alwaysColsMd": { "alias": "alwaysColsMd"; "required": false; }; "alwaysColsLg": { "alias": "alwaysColsLg"; "required": false; }; "tagColor": { "alias": "tagColor"; "required": false; }; "tagVariant": { "alias": "tagVariant"; "required": false; }; "tagButtonColor": { "alias": "tagButtonColor"; "required": false; }; "actionsButtonColor": { "alias": "actionsButtonColor"; "required": false; }; "actionsVariant": { "alias": "actionsVariant"; "required": false; }; "overlayVariant": { "alias": "overlayVariant"; "required": false; }; "overlayBackdrop": { "alias": "overlayBackdrop"; "required": false; }; "advancedOpenMode": { "alias": "advancedOpenMode"; "required": false; }; }, { "submit": "submit"; "change": "change"; "clear": "clear"; "modeChange": "modeChange"; "requestSearch": "requestSearch"; "tagsChange": "tagsChange"; "metaChanged": "metaChanged"; "schemaStatusChange": "schemaStatusChange"; }, never, never, true, never>;
662
+ static ɵfac: i0.ɵɵFactoryDeclaration<PraxisFilter, [null, null, null, null, null, null, null, null, null, null, null, null, { optional: true; }]>;
663
+ static ɵcmp: i0.ɵɵComponentDeclaration<PraxisFilter, "praxis-filter", never, { "resourcePath": { "alias": "resourcePath"; "required": true; }; "fieldMetadata": { "alias": "fieldMetadata"; "required": false; }; "filterId": { "alias": "filterId"; "required": false; }; "formId": { "alias": "formId"; "required": false; }; "componentInstanceId": { "alias": "componentInstanceId"; "required": false; }; "mode": { "alias": "mode"; "required": false; }; "notifyIfOutdated": { "alias": "notifyIfOutdated"; "required": false; }; "snoozeMs": { "alias": "snoozeMs"; "required": false; }; "autoOpenSettingsOnOutdated": { "alias": "autoOpenSettingsOnOutdated"; "required": false; }; "editModeEnabled": { "alias": "editModeEnabled"; "required": false; }; "value": { "alias": "value"; "required": false; }; "alwaysVisibleFields": { "alias": "alwaysVisibleFields"; "required": false; }; "alwaysVisibleFieldMetadataOverrides": { "alias": "alwaysVisibleFieldMetadataOverrides"; "required": false; }; "selectedFieldIds": { "alias": "selectedFieldIds"; "required": false; }; "tags": { "alias": "tags"; "required": false; }; "allowSaveTags": { "alias": "allowSaveTags"; "required": false; }; "persistenceKey": { "alias": "persistenceKey"; "required": false; }; "i18n": { "alias": "i18n"; "required": false; }; "changeDebounceMs": { "alias": "changeDebounceMs"; "required": false; }; "showFilterSettings": { "alias": "showFilterSettings"; "required": false; }; "confirmTagDelete": { "alias": "confirmTagDelete"; "required": false; }; "placeBooleansInActions": { "alias": "placeBooleansInActions"; "required": false; }; "showToggleLabels": { "alias": "showToggleLabels"; "required": false; }; "useInlineSelectVariant": { "alias": "useInlineSelectVariant"; "required": false; }; "useInlineSearchableSelectVariant": { "alias": "useInlineSearchableSelectVariant"; "required": false; }; "useInlineMultiSelectVariant": { "alias": "useInlineMultiSelectVariant"; "required": false; }; "useInlineInputVariant": { "alias": "useInlineInputVariant"; "required": false; }; "useInlineToggleVariant": { "alias": "useInlineToggleVariant"; "required": false; }; "useInlineRangeVariant": { "alias": "useInlineRangeVariant"; "required": false; }; "useInlineDateVariant": { "alias": "useInlineDateVariant"; "required": false; }; "useInlineDateRangeVariant": { "alias": "useInlineDateRangeVariant"; "required": false; }; "useInlineTimeVariant": { "alias": "useInlineTimeVariant"; "required": false; }; "useInlineTimeRangeVariant": { "alias": "useInlineTimeRangeVariant"; "required": false; }; "useInlineTreeSelectVariant": { "alias": "useInlineTreeSelectVariant"; "required": false; }; "alwaysMinWidth": { "alias": "alwaysMinWidth"; "required": false; }; "alwaysColsMd": { "alias": "alwaysColsMd"; "required": false; }; "alwaysColsLg": { "alias": "alwaysColsLg"; "required": false; }; "tagColor": { "alias": "tagColor"; "required": false; }; "tagVariant": { "alias": "tagVariant"; "required": false; }; "tagButtonColor": { "alias": "tagButtonColor"; "required": false; }; "actionsButtonColor": { "alias": "actionsButtonColor"; "required": false; }; "actionsVariant": { "alias": "actionsVariant"; "required": false; }; "overlayVariant": { "alias": "overlayVariant"; "required": false; }; "overlayBackdrop": { "alias": "overlayBackdrop"; "required": false; }; "advancedOpenMode": { "alias": "advancedOpenMode"; "required": false; }; "advancedClearButtonsEnabled": { "alias": "advancedClearButtonsEnabled"; "required": false; }; }, { "submit": "submit"; "change": "change"; "clear": "clear"; "modeChange": "modeChange"; "requestSearch": "requestSearch"; "tagsChange": "tagsChange"; "selectedFieldIdsChange": "selectedFieldIdsChange"; "metaChanged": "metaChanged"; "schemaStatusChange": "schemaStatusChange"; }, never, never, true, never>;
475
664
  }
476
665
 
477
- interface ActionLike {
478
- action?: string;
479
- id?: string;
480
- code?: string;
481
- key?: string;
482
- name?: string;
483
- type?: string;
484
- icon?: string;
485
- label?: string;
486
- }
487
- declare function getActionId(action: ActionLike): string;
488
-
489
- interface RowActionConfig extends ActionLike {
490
- /**
491
- * Identifier of the action. Historically this property was named `id`
492
- * in some configurations, so both `action` and `id` are supported.
493
- */
494
- icon: string;
666
+ type SchemaFieldHint = {
667
+ name: string;
495
668
  label?: string;
496
- priority?: number;
497
- alwaysInline?: boolean;
498
- visible?: (row: any) => boolean;
499
- disabled?: (row: any) => boolean;
500
- autoDelete?: boolean;
501
- requiresConfirmation?: boolean;
502
- }
503
- interface RowActionsBehavior {
504
- enabled: boolean;
505
- maxInline: number | {
506
- xs: number;
507
- sm: number;
508
- md: number;
509
- lg: number;
510
- } | 'auto';
511
- autoStrategy?: 'measure' | 'breakpoint';
512
- }
669
+ type?: string;
670
+ controlType?: string;
671
+ numericFormat?: string;
672
+ options?: Array<Record<string, unknown> | string | number | boolean>;
673
+ optionLabelKey?: string;
674
+ optionValueKey?: string;
675
+ enumValues?: string[];
676
+ };
677
+ type DataMode = 'remote' | 'local' | 'empty';
678
+ type RowActionRuntimeOptions = {
679
+ payload?: any;
680
+ actionConfig?: any;
681
+ };
513
682
  declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterContentInit, OnDestroy {
514
- private crudService;
515
683
  private cdr;
516
684
  private settingsPanel;
517
- private formattingService;
518
- private specBridge;
519
- private configStorage;
520
- private connectionStorage;
685
+ private crudService;
521
686
  private tableDefaultsProvider;
522
- private snackBar;
523
- private filterConfig;
687
+ filterConfig: FilterConfigService;
688
+ private formattingService;
524
689
  private pxDialog;
690
+ private snackBar;
691
+ private asyncConfigStorage;
692
+ private connectionStorage;
525
693
  private hostRef;
526
694
  private global;
695
+ private componentKeys;
696
+ private loadingOrchestrator;
697
+ private loadingRenderer?;
698
+ private route?;
699
+ private logger?;
700
+ private static dslRuntimeInstanceCounter;
527
701
  config: TableConfig;
528
- resourcePath?: string;
529
- filterCriteria: any;
530
- /** Controls outdated schema notifications visibility and channel (only effective in edit mode) */
531
- notifyIfOutdated: 'inline' | 'snackbar' | 'both' | 'none';
532
- /** Snooze duration for schema outdated notifications (ms), only in edit mode */
702
+ resourcePath: string;
703
+ data: any[] | null;
704
+ tableId: string;
705
+ componentInstanceId?: string;
706
+ title: string;
707
+ subtitle: string;
708
+ icon: string;
709
+ autoDelete: boolean;
710
+ notifyIfOutdated: boolean;
533
711
  snoozeMs: number;
534
- /** Auto open settings when schema is detected as outdated (only in edit mode) */
535
712
  autoOpenSettingsOnOutdated: boolean;
536
- /** Controls toolbar visibility */
537
- showToolbar: boolean;
538
- /** Enables new toolbar layout */
539
- toolbarV2: boolean;
540
- /** Habilita exclusão automática */
541
- autoDelete: boolean;
542
- /** Enable edit mode */
543
- editModeEnabled: boolean;
544
- /** Dense mode reduces cell padding */
545
- dense: boolean;
546
- /** Identifier used for settings storage */
547
- tableId: string;
548
- /** Habilita visual de debug para alinhamento/layouot */
549
- debugLayout: boolean;
550
- /** Contexto opcional quando tabela está dentro do componente CRUD */
551
- crudContext?: {
552
- tableId: string;
553
- resourcePath?: string;
554
- defaults?: {
555
- openMode?: 'modal' | 'route';
556
- modal?: Record<string, any>;
557
- back?: Record<string, any>;
558
- };
559
- actions?: Array<{
560
- action: string;
561
- label?: string;
562
- formId?: string;
563
- route?: string;
564
- openMode?: 'modal' | 'route';
565
- }>;
566
- /** Nome do campo usado como identificador primário (default: 'id') */
567
- idField?: string;
568
- };
569
- /** Nome do campo usado como identificador primário (default: 'id'). Tem precedência sobre crudContext.idField. */
570
- idField?: string;
571
- rowClick: EventEmitter<{
572
- row: any;
573
- index: number;
574
- }>;
575
- rowAction: EventEmitter<{
576
- action: string;
577
- row: any;
578
- }>;
579
- toolbarAction: EventEmitter<{
580
- action: string;
581
- }>;
582
- bulkAction: EventEmitter<{
583
- action: string;
584
- rows: any[];
585
- }>;
586
- /** Emits on row double click according to behavior config */
587
- rowDoubleClick: EventEmitter<{
588
- action: string;
589
- row: any;
590
- }>;
591
- /** Emits whenever schema outdated state changes (can be used by host) */
592
- schemaStatusChange: EventEmitter<{
593
- outdated: boolean;
594
- serverHash?: string;
595
- lastVerifiedAt?: string;
596
- resourcePath?: string;
597
- }>;
713
+ crudContext: any;
714
+ dslFunctionRegistry: FunctionRegistry<any> | null;
715
+ rowClick: EventEmitter<any>;
716
+ rowDoubleClick: EventEmitter<any>;
717
+ rowAction: EventEmitter<any>;
718
+ toolbarAction: EventEmitter<any>;
719
+ bulkAction: EventEmitter<any>;
720
+ columnReorder: EventEmitter<any>;
721
+ columnReorderAttempt: EventEmitter<any>;
598
722
  beforeDelete: EventEmitter<any>;
599
723
  afterDelete: EventEmitter<any>;
600
- deleteError: EventEmitter<{
601
- row: any;
602
- error: unknown;
603
- }>;
604
- beforeBulkDelete: EventEmitter<any[]>;
605
- afterBulkDelete: EventEmitter<any[]>;
606
- bulkDeleteError: EventEmitter<{
607
- rows: any[];
608
- error: unknown;
609
- }>;
610
- paginator?: MatPaginator;
611
- sort?: MatSort;
612
- actionsHeaderCell?: ElementRef<HTMLElement>;
613
- projectedFilter?: PraxisFilter;
724
+ deleteError: EventEmitter<any>;
725
+ beforeBulkDelete: EventEmitter<any>;
726
+ afterBulkDelete: EventEmitter<any>;
727
+ bulkDeleteError: EventEmitter<any>;
728
+ schemaStatusChange: EventEmitter<any>;
729
+ metadataChange: EventEmitter<any>;
730
+ loadingStateChange: EventEmitter<LoadingState>;
731
+ paginator: MatPaginator;
732
+ sort: MatSort;
733
+ internalFilter?: PraxisFilter;
734
+ toolbar: PraxisTableToolbar;
735
+ projectedFilter: any;
736
+ toolbarV2: boolean;
614
737
  dataSource: MatTableDataSource<any, MatPaginator>;
615
- displayedColumns: string[];
616
- visibleColumns: ColumnDefinition[];
617
- private dataSubject;
618
738
  selection: SelectionModel<any>;
619
- private pageIndex;
620
- private pageSize;
621
- private sortState;
622
- private hasInitialized;
623
- private breakpoints;
624
- private measuredInline;
625
- private resizeObserver?;
626
- readonly getActionId: typeof getActionId;
627
- getRowMenuIcon(): string;
628
- getRowMenuButtonColor(): string | undefined;
629
- getActionsHeaderAlign(): 'start' | 'center' | 'end';
630
- getActionsHeaderLabel(): string | undefined;
631
- getActionsHeaderIcon(): string | undefined;
632
- getActionsHeaderTooltip(): string | undefined;
633
- private styleSpecCache;
739
+ dataSubject: BehaviorSubject<any[]>;
740
+ subscriptions: Subscription[];
741
+ showToolbar: boolean;
742
+ hasInitialized: boolean;
743
+ pageIndex: number;
744
+ pageSize: number;
745
+ sortState: Sort;
746
+ filterCriteria: any;
747
+ visibleColumns: ColumnDefinition[];
748
+ visibleDataColumnsForDrag: ColumnDefinition[];
749
+ displayedColumns: string[];
750
+ columnReorderStatusMessage: string;
751
+ columnReorderVisualStatusMessage: string;
752
+ private columnReorderStatusTimer;
753
+ private columnReorderVisualStatusTimer;
754
+ private columnReorderUndoSubscription;
755
+ private columnReorderOperationCounter;
756
+ private latestColumnReorderOperationId;
757
+ localSource: any[];
758
+ localView: any[];
759
+ localTotal: number;
760
+ private localPageSizeRuntimeOverride;
761
+ private lastResolvedDataMode;
762
+ private localFilterFieldMetadataCache;
763
+ private localFilterFieldMetadataCacheKey;
764
+ private schemaFieldsSnapshot;
634
765
  schemaError: boolean;
635
766
  dataError: boolean;
636
767
  errorMessage: string | null;
768
+ idField: string;
769
+ horizontalScroll: 'auto' | 'wrap' | 'none';
770
+ private horizontalScrollOverrideSource;
771
+ getToolbarPosition(): 'top' | 'bottom' | 'both';
772
+ shouldShowToolbarTopPlacement(): boolean;
773
+ shouldShowToolbarBottomPlacement(): boolean;
774
+ shouldRenderFooterToolbar(): boolean;
775
+ shouldShowFooterToolbarMain(): boolean;
776
+ shouldShowFooterToolbarEndActions(): boolean;
777
+ shouldShowFooterToolbarReset(): boolean;
778
+ getToolbarActionsPosition(): 'top' | 'bottom' | 'both';
779
+ getBulkActionsPosition(): 'toolbar' | 'floating' | 'both';
780
+ shouldRenderFloatingBulkActions(): boolean;
781
+ getFloatingBulkActions(): any[];
782
+ shouldHideFloatingBulkActions(): boolean;
783
+ getFloatingBulkPositionClass(): string;
784
+ isFloatingBulkActionDisabled(action: any): boolean;
785
+ shouldShowToolbarActionsTop(): boolean;
786
+ shouldShowToolbarActionsBottom(): boolean;
787
+ getToolbarActionsBackgroundColor(): string | null;
788
+ getToolbarLayoutHeightPx(): number | null;
789
+ getToolbarLayoutHeightCssVar(): string | null;
790
+ getToolbarLayoutHeightHostStyle(): string | null;
791
+ getRowActionsWidthStyle(): string | null;
792
+ getColumnTextAlignStyle(column: ColumnDefinition): string | null;
793
+ getColumnWidthStyle(column: ColumnDefinition): string | null;
794
+ getColumnHeaderAttrStyle(column: ColumnDefinition): string | null;
795
+ getColumnCellAttrStyle(column: ColumnDefinition): string | null;
796
+ getTableElevationClassName(): string;
797
+ private normalizeTableElevationLevel;
798
+ private resolveRuntimeTableElevationLevel;
799
+ private resolveTableShadowColor;
800
+ private buildTableElevationShadow;
801
+ private syncHorizontalScrollFromAppearanceConfig;
802
+ private resolveResponsiveMobileBreakpoint;
803
+ private shouldApplyResponsiveHorizontalScrollGlobally;
804
+ private isWithinResponsiveMobileBreakpoint;
805
+ private refreshResponsiveHorizontalScroll;
806
+ hasBottomPaginator(): boolean;
807
+ hasExplicitResourcePath(): boolean;
808
+ hasLocalDataInput(): boolean;
809
+ getDataMode(): DataMode;
810
+ isRemoteMode(): boolean;
811
+ isLocalMode(): boolean;
812
+ isEmptyMode(): boolean;
813
+ isLocalDataModeFeatureEnabled(): boolean;
814
+ isLocalDataModeActive(): boolean;
815
+ shouldRenderDataSurface(): boolean;
816
+ shouldShowEmptyState(): boolean;
817
+ shouldRenderAdvancedFilter(): boolean;
818
+ getAdvancedFilterResourcePath(): string;
819
+ getAdvancedFilterPersistenceKey(): string;
820
+ getAdvancedFilterFieldMetadata(): FieldMetadata[] | null | undefined;
821
+ private buildLocalFilterMetadata;
822
+ private buildLocalFilterMetadataCacheKey;
823
+ private resolveLocalFilterDataType;
824
+ private resolveLocalFilterControlType;
825
+ private schemaState;
637
826
  schemaOutdated: boolean;
827
+ editModeEnabled: boolean;
638
828
  private _resolvedPrefs;
639
- private resolveSchemaPrefs;
640
- private getOutdatedIgnoreKey;
641
- private getOutdatedSnoozeKey;
642
- private getOutdatedNotifiedKey;
643
- private isOutdatedIgnored;
644
- private getOutdatedSnoozeUntil;
645
- private setOutdatedSnooze;
646
- private setOutdatedIgnore;
647
- private setOutdatedNotified;
648
- private wasOutdatedNotified;
649
- shouldShowOutdatedInline(): boolean;
650
- private maybeShowOutdatedSnack;
651
- onReconcileRequested(): void;
652
- onIgnoreOutdated(): void;
653
- onSnoozeOutdated(): void;
654
- toggleRow(row: any): void;
655
- masterToggle(): void;
656
- isAllSelected(): boolean;
657
- private isOverflowEnabled;
658
- private getMaxInline;
659
- private getBreakpointMaxInline;
660
- private sortByPriority;
661
- isActionVisible(a: any, row: any): boolean;
662
- isActionDisabled(a: any, row: any): boolean;
663
- trackAction: (_: number, a: RowActionConfig) => string;
664
- getInlineRowActions(row: any): any[];
665
- getOverflowRowActions(row: any): any[];
666
- hasOverflowRowActions(row: any): boolean;
667
- private updateMeasuredInline;
668
- private setupResizeObserver;
669
- private subscriptions;
670
- private getIdField;
671
- isVirtualized(): boolean;
672
- getVirtItemHeight(): number;
673
- getVirtBufferSize(): number;
674
- getVirtMinHeight(): number | string | undefined;
675
- getVirtMinHeightStyle(): string | null;
676
- trackByRow: (index: number, row: any) => string | number;
677
- private getRowId;
678
- constructor(crudService: GenericCrudService<any>, cdr: ChangeDetectorRef, settingsPanel: SettingsPanelService, formattingService: DataFormattingService, specBridge: SpecificationBridgeService, configStorage: ConfigStorage, connectionStorage: ConnectionStorage, tableDefaultsProvider: TableDefaultsProvider, snackBar: MatSnackBar, filterConfig: FilterConfigService, pxDialog: PraxisDialog, hostRef: ElementRef<HTMLElement>, global: GlobalConfigService);
829
+ set resolvedPrefs(val: any);
830
+ get resolvedPrefs(): any;
831
+ dense: boolean;
832
+ private resolveAppearanceDensity;
833
+ get hostDensityCompactClass(): boolean;
834
+ get hostDensityComfortableClass(): boolean;
835
+ get hostDensitySpaciousClass(): boolean;
836
+ get hostRowBordersClass(): boolean;
837
+ get hostColumnBordersClass(): boolean;
838
+ trackByRow(index: number, item: any): any;
839
+ getSchemaFieldsSnapshot(): SchemaFieldHint[];
840
+ aiAdapter: any;
841
+ private aiAdapterLoadStarted;
842
+ styleSpecCache: Map<string, any>;
843
+ actionSpecCache: Map<string, any>;
844
+ private computedContextCache;
845
+ private computedFieldNames;
846
+ dslParser: DslParser<any>;
847
+ private dslRuntimeRegistry;
848
+ private readonly dslRuntimeContextKey;
849
+ private computedExpressionEvaluator;
850
+ private resizeObserver;
851
+ private removeViewportChangeListeners;
852
+ private warnedMissingId;
853
+ private readonly warnedUnsupportedFeatures;
854
+ private warnedStrictCspStyleMode;
855
+ private fallbackLogger?;
856
+ private fallbackLoggerEnvironment;
857
+ private lastColumnDropHandledAt;
858
+ private activeColumnDragField;
859
+ private getLogger;
860
+ private buildLogOptions;
861
+ private debugLog;
862
+ private debugLogWithMeta;
863
+ private warnLog;
864
+ private warnOnceLog;
865
+ private errorLog;
866
+ private logResolvedDataMode;
867
+ private clearModeErrors;
868
+ private resetRuntimeStateForModeTransition;
869
+ private clearRenderedRowsForModeTransition;
870
+ private applyDataModeTransition;
871
+ private reconcileDataModeTransition;
872
+ private clearLocalScaffolding;
873
+ private syncPaginationTotal;
874
+ private refreshLocalScaffolding;
875
+ private syncLocalPageSizeFromConfig;
876
+ private recomputeLocalView;
877
+ private resolveLocalSortField;
878
+ private setSchemaFieldsSnapshot;
879
+ private normalizeSchemaOptions;
880
+ private normalizeEnumValues;
881
+ private normalizeSchemaKey;
882
+ private clearSchemaFieldsSnapshot;
883
+ private componentKeyId;
884
+ private storageKey;
885
+ private tableConfigKey;
886
+ private filterConfigKey;
887
+ private warnMissingId;
888
+ private ensureConfigDefaults;
889
+ private setShowToolbar;
890
+ private configureDslRuntime;
891
+ constructor(cdr: ChangeDetectorRef, settingsPanel: SettingsPanelService, crudService: GenericCrudService<any, any>, tableDefaultsProvider: TableDefaultsProvider, filterConfig: FilterConfigService, formattingService: DataFormattingService, pxDialog: PraxisDialog, snackBar: MatSnackBar, asyncConfigStorage: AsyncConfigStorage, connectionStorage: ConnectionStorage, hostRef: ElementRef<HTMLElement>, global: GlobalConfigService, componentKeys: ComponentKeyService, loadingOrchestrator: LoadingOrchestrator, loadingRenderer?: PraxisLoadingRenderer | undefined, route?: ActivatedRoute | undefined, logger?: LoggerService | undefined);
892
+ private ensureAiAdapterLoaded;
893
+ private emitLoadingState;
894
+ private buildLoadingContext;
895
+ private beginLoading;
896
+ private endLoading;
679
897
  openQuickConnect(): void;
680
- ngOnInit(): void;
898
+ ngOnInit(): Promise<void>;
681
899
  ngAfterContentInit(): void;
682
900
  ngOnChanges(changes: SimpleChanges): void;
683
901
  private isDebug;
684
902
  private connectionKey;
685
903
  private saveConnection;
904
+ private inputsKey;
905
+ private normalizeResourcePathIntent;
906
+ private resolveResourcePathIntentFromEditor;
907
+ private applyResourcePathIntentFromEditor;
686
908
  disconnect(): void;
687
909
  ngAfterViewInit(): void;
688
910
  onPageChange(event: PageEvent): void;
689
911
  onSortChange(event: Sort): void;
690
912
  onRowClicked(row: any, index: number): void;
691
913
  onRowDoubleClicked(row: any, index: number): void;
692
- onRowAction(action: string, row: any, event: Event): void;
914
+ onRowAction(action: string, row: any, event: Event, runtimeOptions?: RowActionRuntimeOptions): void;
915
+ private resolveRowActionRuntimeOptions;
916
+ private emitRowActionEvent;
693
917
  private showConfirmDialog;
694
918
  private executeDeleteAction;
919
+ private cloneForEmit;
920
+ private interpolateActionMessageTemplate;
921
+ private buildActionFeedbackContext;
922
+ private resolveActionFeedbackMessage;
923
+ private showActionFeedbackMessage;
924
+ private emitEventWithActionFeedback;
925
+ private resolveBulkValidationMessage;
926
+ private hasValidBulkSelectionCount;
927
+ private showBulkConfirmDialog;
695
928
  onToolbarAction(event: {
696
929
  action: string;
930
+ actionConfig?: any;
697
931
  }): void;
698
932
  onAdvancedFilterSubmit(criteria: Record<string, any>): void;
699
933
  onAdvancedFilterClear(): void;
934
+ private saveConfigWithAck;
935
+ private clearConfigWithAck;
936
+ private persistHorizontalScrollInput;
937
+ private showPersistenceFailureFeedback;
938
+ private showResetSuccessFeedback;
700
939
  openTableSettings(): void;
701
940
  private applyTableConfig;
941
+ private withFallbackAdvancedFilterSettings;
942
+ private syncInternalFilterSettings;
943
+ private resetPreferencesToDefaults;
702
944
  onResetPreferences(): void;
945
+ private resolvePagingStrategy;
946
+ private resolveSortingStrategy;
703
947
  private applyDataSourceSettings;
948
+ private sanitizeColumns;
704
949
  private setupColumns;
950
+ private isDataColumnField;
951
+ private computeVisibleDataColumnsForDrag;
952
+ getVisibleDataColumnsForDrag(): ColumnDefinition[];
953
+ isColumnDraggingEnabled(): boolean;
954
+ isColumnDragIndicatorEnabled(): boolean;
955
+ isColumnDraggable(column: ColumnDefinition | null | undefined): boolean;
956
+ private resolveColumnReorderHeader;
957
+ private isEnglishLocale;
958
+ private isColumnDragDebugEnabled;
959
+ private logColumnDragDebug;
960
+ private resolveTableMessageTemplate;
961
+ private resolveTableMessage;
962
+ getColumnDragHandleAriaLabel(column: ColumnDefinition): string;
963
+ getColumnDragHandleTooltip(column: ColumnDefinition): string;
964
+ private publishColumnReorderStatus;
965
+ private publishColumnReorderVisualStatus;
966
+ private clearColumnReorderVisualStatus;
967
+ private clearColumnReorderUndoSubscription;
968
+ private emitColumnReorderAttempt;
969
+ private createColumnReorderOperationId;
970
+ private isLatestColumnReorderOperation;
971
+ private offerColumnReorderUndo;
972
+ private restoreColumnOrderFromUndo;
973
+ onColumnDragHandleKeydown(event: KeyboardEvent, column: ColumnDefinition): void;
974
+ onColumnDrop(event: CdkDragDrop<ColumnDefinition[]>): void;
975
+ onColumnDragStarted(column: ColumnDefinition): void;
976
+ onColumnDragEnded(event: CdkDragEnd<ColumnDefinition>, column: ColumnDefinition): void;
977
+ private applyColumnReorder;
978
+ private reorderConfigColumnsByVisibleOrder;
979
+ private haveSameFieldMultiset;
980
+ private resolveColumnDropZone;
981
+ private normalizeDropZoneToken;
982
+ private parseColumnDropZoneRules;
983
+ private canDropAcrossColumnZones;
984
+ private persistTableConfigAfterRuntimeMutation;
705
985
  private applyDefaultSortIfNone;
706
986
  /**
707
987
  * Performs a lightweight server schema verification using ETag/If-None-Match without
@@ -711,6 +991,11 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
711
991
  private verifyServerSchemaVersion;
712
992
  private loadSchema;
713
993
  private convertFieldToColumn;
994
+ /**
995
+ * Apply automatic renderer hints based on schema field metadata.
996
+ * Runs only on initial bootstrap (when columns are derived from schema).
997
+ */
998
+ private applyAutoRenderer;
714
999
  /**
715
1000
  * Check if a value is a valid ColumnDataType
716
1001
  */
@@ -734,9 +1019,28 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
734
1019
  getCellValue(rowData: any, column: ColumnDefinition): any;
735
1020
  getCellClasses(rowData: any, column: ColumnDefinition): string[] | undefined;
736
1021
  getCellNgStyle(rowData: any, column: ColumnDefinition): Record<string, string> | undefined;
1022
+ private resetComputedContextCache;
1023
+ private collectComputedFieldNames;
1024
+ private buildComputedSignature;
1025
+ private stringifyDependencyValue;
1026
+ private buildComputedValueMap;
1027
+ private buildEvaluationContext;
1028
+ private isUnsafeComputedField;
737
1029
  private evaluateStyleRule;
1030
+ private evaluateActionVisibilityCondition;
1031
+ private evaluateActionDisabledCondition;
1032
+ /** Evaluate row action conditions using the same DSL runtime with explicit failure policy. */
1033
+ private evaluateActionCondition;
1034
+ private resolveRowVisibleWhenFailurePolicy;
1035
+ private resolveRuntimeEnvironment;
1036
+ private isDiagnosticsRuntimeEnvironment;
1037
+ private logActionConditionFallback;
738
1038
  getRowClasses(rowData: any): string[] | undefined;
739
1039
  getRowNgStyle(rowData: any): Record<string, string> | undefined;
1040
+ private getRowRenderer;
1041
+ getRowTooltip(rowData: any): any;
1042
+ getRowTooltipPosition(rowData: any): 'above' | 'below' | 'left' | 'right';
1043
+ getRowTooltipShowDelay(rowData: any): number;
740
1044
  /**
741
1045
  * Apply value mapping to transform raw values into display-friendly text
742
1046
  */
@@ -777,6 +1081,13 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
777
1081
  * Obtém configurações de i18n para o filtro baseado na configuração da tabela
778
1082
  */
779
1083
  getFilterI18n(): Partial<I18n> | undefined;
1084
+ private warnUnsupportedFeature;
1085
+ private isMultiSortSupported;
1086
+ private isColumnFiltersSupported;
1087
+ private isRowDraggingSupported;
1088
+ private enforceAppearanceSchemaGuards;
1089
+ private enforceUnsupportedFeatureGuards;
1090
+ getToolbarDslContext(): Record<string, any>;
780
1091
  getIconName(row: any, column: ColumnDefinition): string | null;
781
1092
  getIconColor(_row: any, column: ColumnDefinition): string | null;
782
1093
  getIconStyle(_row: any, column: ColumnDefinition): Record<string, string> | null;
@@ -787,38 +1098,165 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
787
1098
  * Falls back safely on error.
788
1099
  */
789
1100
  private evaluateValueExpr;
1101
+ private evaluateComputedValue;
1102
+ private evaluateLegacyExpression;
1103
+ private tryEvaluateLegacyConcat;
1104
+ private tryEvaluateLegacyTernary;
1105
+ private tryEvaluateLegacyCoalesce;
1106
+ private normalizeLegacyExpression;
1107
+ private extractLegacyArrayItems;
1108
+ private splitTopLevelTernary;
1109
+ private findTopLevelOperator;
1110
+ private splitTopLevel;
1111
+ private findMatchingBracket;
1112
+ private normalizeExpression;
1113
+ private normalizeOptionalChaining;
1114
+ private stripRowPrefixes;
1115
+ private stripOuterParens;
1116
+ private findMatchingParen;
1117
+ private extractExpression;
790
1118
  private coerceExpected;
791
1119
  getImageSrc(row: any, column: ColumnDefinition): string | null;
792
1120
  getImageAlt(row: any, column: ColumnDefinition): string | null;
793
- getImageWidth(column: ColumnDefinition): number | null;
794
- getImageHeight(column: ColumnDefinition): number | null;
795
- getImageShape(column: ColumnDefinition): 'square' | 'rounded' | 'circle' | undefined;
796
- getImageFit(column: ColumnDefinition): 'cover' | 'contain' | undefined;
1121
+ getImageWidth(row: any, column: ColumnDefinition): number | null;
1122
+ getImageHeight(row: any, column: ColumnDefinition): number | null;
1123
+ getImageShape(row: any, column: ColumnDefinition): 'square' | 'rounded' | 'circle' | undefined;
1124
+ getImageFit(row: any, column: ColumnDefinition): 'cover' | 'contain' | undefined;
797
1125
  getImageLazy(_row: any, column: ColumnDefinition): boolean;
798
1126
  getBadgeText(row: any, column: ColumnDefinition): string | null;
799
1127
  getBadgeIcon(row: any, column: ColumnDefinition): string | null;
800
1128
  getBadgeClasses(row: any, column: ColumnDefinition): string[];
801
- getEffectiveRendererType(row: any, column: ColumnDefinition): 'icon' | 'image' | 'badge' | null;
1129
+ getEffectiveRendererType(row: any, column: ColumnDefinition): 'icon' | 'image' | 'badge' | 'link' | 'button' | 'chip' | 'progress' | 'avatar' | 'toggle' | 'menu' | 'html' | 'compose' | 'rating' | null;
1130
+ getComposeItems(row: any, column: ColumnDefinition): any[];
1131
+ getComposeClasses(row: any, column: ColumnDefinition): string[];
1132
+ getComposeGapStyle(row: any, column: ColumnDefinition): any;
1133
+ asItemColumn(base: ColumnDefinition, item: any): any;
1134
+ getItemEffectiveType(row: any, column: ColumnDefinition, item: any): any;
1135
+ private _rendererOverrideCache;
1136
+ private mergeRenderer;
1137
+ private getEffectiveRenderer;
1138
+ getLinkHref(row: any, column: ColumnDefinition): string | null;
1139
+ getLinkText(row: any, column: ColumnDefinition): string;
1140
+ getLinkTarget(row: any, column: ColumnDefinition): string | null;
1141
+ getLinkRel(row: any, column: ColumnDefinition): string | null;
1142
+ getButtonLabel(row: any, column: ColumnDefinition): string;
1143
+ getButtonIcon(row: any, column: ColumnDefinition): string | null;
1144
+ getButtonVariant(row: any, column: ColumnDefinition): 'filled' | 'outlined' | 'text';
1145
+ getButtonColor(row: any, column: ColumnDefinition): string | null;
1146
+ isButtonDisabled(row: any, column: ColumnDefinition): boolean;
1147
+ getButtonAriaLabel(row: any, column: ColumnDefinition): string | null;
1148
+ private evaluateActionPayloadExpr;
1149
+ private buildRendererActionRuntimeOptions;
1150
+ onButtonClick(row: any, column: ColumnDefinition, event: Event): void;
1151
+ getChipText(row: any, column: ColumnDefinition): string | null;
1152
+ getChipIcon(row: any, column: ColumnDefinition): string | null;
1153
+ getChipClasses(row: any, column: ColumnDefinition): string[];
1154
+ getProgressValue(row: any, column: ColumnDefinition): number;
1155
+ getProgressColor(row: any, column: ColumnDefinition): string | null;
1156
+ getProgressWidthPercentStyle(row: any, column: ColumnDefinition): number | null;
1157
+ getProgressBackgroundStyle(row: any, column: ColumnDefinition): string | null;
1158
+ getProgressShowLabel(row: any, column: ColumnDefinition): boolean;
1159
+ getRatingValue(row: any, column: ColumnDefinition): number;
1160
+ getRatingMax(_row: any, column: ColumnDefinition): number;
1161
+ getRatingColor(_row: any, column: ColumnDefinition): string | undefined;
1162
+ getRatingOutlineColor(_row: any, column: ColumnDefinition): string | undefined;
1163
+ getRatingSize(_row: any, column: ColumnDefinition): 'small' | 'medium' | 'large';
1164
+ getRatingAriaLabel(row: any, column: ColumnDefinition): string | undefined;
1165
+ getRatingReadonly(_row: any, column: ColumnDefinition): boolean;
1166
+ getAvatarSrc(row: any, column: ColumnDefinition): string | null;
1167
+ getAvatarAlt(row: any, column: ColumnDefinition): string | null;
1168
+ getAvatarInitials(row: any, column: ColumnDefinition): string;
1169
+ getAvatarShape(row: any, column: ColumnDefinition): 'square' | 'rounded' | 'circle' | undefined;
1170
+ getAvatarStyle(row: any, column: ColumnDefinition): Record<string, string> | null;
1171
+ getToggleState(row: any, column: ColumnDefinition): boolean;
1172
+ isToggleDisabled(row: any, column: ColumnDefinition): boolean;
1173
+ getToggleAriaLabel(row: any, column: ColumnDefinition): string | null;
1174
+ onToggleChange(row: any, column: ColumnDefinition, event: any): void;
1175
+ getMenuAriaLabel(row: any, column: ColumnDefinition): string | null;
1176
+ private evaluateArrayExpr;
1177
+ getMenuItems(row: any, column: ColumnDefinition): Array<{
1178
+ label: string;
1179
+ icon?: string;
1180
+ id: string;
1181
+ __visible: boolean;
1182
+ payload?: any;
1183
+ actionConfig?: any;
1184
+ }>;
1185
+ onMenuItemClick(actionOrItem: string | {
1186
+ id?: string;
1187
+ payload?: any;
1188
+ actionConfig?: any;
1189
+ }, row: any, event: Event): void;
1190
+ getSafeHtml(row: any, column: ColumnDefinition): any;
1191
+ private escapeHtml;
1192
+ private sanitizeStrictHtml;
1193
+ private isSafeStrictInlineStyle;
1194
+ private isSafeStrictHtmlUrl;
1195
+ private escapeHtmlAttribute;
1196
+ private isStrictCspStyleModeEnabled;
1197
+ private warnStrictCspStyleModeOnce;
1198
+ private clearAppearanceCssVariables;
802
1199
  private applyAppearanceVariables;
1200
+ private getPrefsKey;
1201
+ private getOutdatedIgnoreKey;
1202
+ private getOutdatedSnoozeKey;
1203
+ private getOutdatedNotifiedKey;
1204
+ private isOutdatedIgnored;
1205
+ private getOutdatedSnoozeUntil;
1206
+ private setOutdatedSnooze;
1207
+ private setOutdatedIgnore;
1208
+ private setOutdatedNotified;
1209
+ private wasOutdatedNotified;
1210
+ private resolveSchemaPrefs;
1211
+ private maybeShowOutdatedSnack;
1212
+ shouldShowOutdatedInline(): boolean;
1213
+ onReconcileRequested(): void;
1214
+ onSnoozeOutdated(): void;
1215
+ onIgnoreOutdated(): void;
1216
+ private updateTableMetaFromServerInfo;
1217
+ private emitMetadataChange;
1218
+ private emitSchemaStatus;
1219
+ getRowId(row: any): any;
1220
+ getIdField(): string;
1221
+ getActionId(action: any): string;
1222
+ private setupResizeObserver;
1223
+ private setupViewportChangeListeners;
1224
+ private getVirtualizationSources;
1225
+ isVirtualized(): boolean;
1226
+ getVirtItemHeight(): number;
1227
+ getVirtBufferSize(): number;
1228
+ getVirtMinHeightStyle(): string;
1229
+ getVirtMinHeightHostStyle(): string | null;
1230
+ getVirtualTableWidthStyle(): string | null;
1231
+ canSelectAll(): boolean;
1232
+ masterToggle(): void;
1233
+ isAllSelected(): boolean;
1234
+ toggleRow(row: any): void;
1235
+ private getRowActionsConfig;
1236
+ getActionsHeaderAlign(): string;
1237
+ getActionsHeaderTooltip(): string | undefined;
1238
+ getActionsHeaderIcon(): string | undefined;
1239
+ getActionsHeaderLabel(): string | undefined;
1240
+ private getRowActionsDisplay;
1241
+ private getRowActionsInlineLimit;
1242
+ private getRowActionsBehaviorInlineLimit;
1243
+ private getBreakpointInlineLimit;
1244
+ private estimateInlineActionsLimit;
1245
+ private parsePixelWidth;
1246
+ private getViewportWidth;
1247
+ private splitVisibleRowActions;
1248
+ getInlineRowActions(row: any): any[];
1249
+ getOverflowRowActions(row: any): any[];
1250
+ hasOverflowRowActions(row: any): boolean;
1251
+ private getVisibleRowActions;
1252
+ private isActionVisible;
1253
+ trackAction(index: number, item: any): any;
1254
+ isActionDisabled(action: any, row: any): boolean;
1255
+ getRowMenuButtonColor(): any;
1256
+ getRowMenuIcon(): string;
803
1257
  ngOnDestroy(): void;
804
- static ɵfac: i0.ɵɵFactoryDeclaration<PraxisTable, never>;
805
- static ɵcmp: i0.ɵɵComponentDeclaration<PraxisTable, "praxis-table", never, { "config": { "alias": "config"; "required": false; }; "resourcePath": { "alias": "resourcePath"; "required": false; }; "filterCriteria": { "alias": "filterCriteria"; "required": false; }; "notifyIfOutdated": { "alias": "notifyIfOutdated"; "required": false; }; "snoozeMs": { "alias": "snoozeMs"; "required": false; }; "autoOpenSettingsOnOutdated": { "alias": "autoOpenSettingsOnOutdated"; "required": false; }; "showToolbar": { "alias": "showToolbar"; "required": false; }; "toolbarV2": { "alias": "toolbarV2"; "required": false; }; "autoDelete": { "alias": "autoDelete"; "required": false; }; "editModeEnabled": { "alias": "editModeEnabled"; "required": false; }; "dense": { "alias": "dense"; "required": false; }; "tableId": { "alias": "tableId"; "required": false; }; "debugLayout": { "alias": "debugLayout"; "required": false; }; "crudContext": { "alias": "crudContext"; "required": false; }; "idField": { "alias": "idField"; "required": false; }; }, { "rowClick": "rowClick"; "rowAction": "rowAction"; "toolbarAction": "toolbarAction"; "bulkAction": "bulkAction"; "rowDoubleClick": "rowDoubleClick"; "schemaStatusChange": "schemaStatusChange"; "beforeDelete": "beforeDelete"; "afterDelete": "afterDelete"; "deleteError": "deleteError"; "beforeBulkDelete": "beforeBulkDelete"; "afterBulkDelete": "afterBulkDelete"; "bulkDeleteError": "bulkDeleteError"; }, ["projectedFilter"], ["[advancedFilter]", "[toolbar]", "[advancedFilter]", "[toolbar]"], true, never>;
806
- }
807
-
808
- declare class PraxisTableToolbar {
809
- config?: TableConfig;
810
- debugLayout: boolean;
811
- toolbarAction: EventEmitter<{
812
- action: string;
813
- }>;
814
- reset: EventEmitter<void>;
815
- readonly getActionId: typeof getActionId;
816
- emitToolbarAction(event: Event, action: string): void;
817
- getStartActions(): _praxisui_core.ToolbarAction[];
818
- getOverflowActions(): (_praxisui_core.ToolbarAction | _praxisui_core.BulkAction)[];
819
- getExportIcon(format: string): string;
820
- static ɵfac: i0.ɵɵFactoryDeclaration<PraxisTableToolbar, never>;
821
- static ɵcmp: i0.ɵɵComponentDeclaration<PraxisTableToolbar, "praxis-table-toolbar", never, { "config": { "alias": "config"; "required": false; }; "debugLayout": { "alias": "debugLayout"; "required": false; }; }, { "toolbarAction": "toolbarAction"; "reset": "reset"; }, never, ["[advancedFilter]", "[toolbar]", "[end-actions]"], true, never>;
1258
+ static ɵfac: i0.ɵɵFactoryDeclaration<PraxisTable, [null, null, null, null, null, null, null, null, null, null, null, null, null, null, { optional: true; }, { optional: true; }, { optional: true; }]>;
1259
+ static ɵcmp: i0.ɵɵComponentDeclaration<PraxisTable, "praxis-table", never, { "config": { "alias": "config"; "required": false; }; "resourcePath": { "alias": "resourcePath"; "required": false; }; "data": { "alias": "data"; "required": false; }; "tableId": { "alias": "tableId"; "required": true; }; "componentInstanceId": { "alias": "componentInstanceId"; "required": false; }; "title": { "alias": "title"; "required": false; }; "subtitle": { "alias": "subtitle"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "autoDelete": { "alias": "autoDelete"; "required": false; }; "notifyIfOutdated": { "alias": "notifyIfOutdated"; "required": false; }; "snoozeMs": { "alias": "snoozeMs"; "required": false; }; "autoOpenSettingsOnOutdated": { "alias": "autoOpenSettingsOnOutdated"; "required": false; }; "crudContext": { "alias": "crudContext"; "required": false; }; "dslFunctionRegistry": { "alias": "dslFunctionRegistry"; "required": false; }; "editModeEnabled": { "alias": "editModeEnabled"; "required": false; }; "dense": { "alias": "dense"; "required": false; }; }, { "rowClick": "rowClick"; "rowDoubleClick": "rowDoubleClick"; "rowAction": "rowAction"; "toolbarAction": "toolbarAction"; "bulkAction": "bulkAction"; "columnReorder": "columnReorder"; "columnReorderAttempt": "columnReorderAttempt"; "beforeDelete": "beforeDelete"; "afterDelete": "afterDelete"; "deleteError": "deleteError"; "beforeBulkDelete": "beforeBulkDelete"; "afterBulkDelete": "afterBulkDelete"; "bulkDeleteError": "bulkDeleteError"; "schemaStatusChange": "schemaStatusChange"; "metadataChange": "metadataChange"; "loadingStateChange": "loadingStateChange"; }, ["toolbar", "projectedFilter"], ["[advancedFilter]", "[toolbar]", "[advancedFilter]", "[toolbar]", "[advancedFilter]", "[toolbar]"], true, never>;
822
1260
  }
823
1261
 
824
1262
  interface JsonValidationResult {
@@ -955,6 +1393,7 @@ declare class ColumnsConfigEditorComponent implements OnInit, OnDestroy {
955
1393
  selectedColumnIndex: number;
956
1394
  selectedColumn: ExtendedColumnDefinition | null;
957
1395
  isV2Config: boolean;
1396
+ private expressionEvaluator;
958
1397
  availableDataSchema: FieldSchema[];
959
1398
  currentFieldSchemas: FieldSchema[];
960
1399
  sampleTableData: any[];
@@ -968,7 +1407,7 @@ declare class ColumnsConfigEditorComponent implements OnInit, OnDestroy {
968
1407
  private readonly destroyRef;
969
1408
  private destroy$;
970
1409
  onlyVisibleRendererFields: boolean;
971
- uiRendererType: 'icon' | 'image' | 'badge' | null;
1410
+ uiRendererType: 'icon' | 'image' | 'badge' | 'link' | 'button' | 'chip' | 'progress' | 'avatar' | 'toggle' | 'menu' | 'rating' | 'html' | 'compose' | null;
972
1411
  private _rendererApplyTimer;
973
1412
  rendererFieldOptions: Array<{
974
1413
  name: string;
@@ -977,6 +1416,24 @@ declare class ColumnsConfigEditorComponent implements OnInit, OnDestroy {
977
1416
  isVisible: boolean;
978
1417
  }>;
979
1418
  uiRendererConditional: boolean;
1419
+ condOverridesSelectedIndex: number;
1420
+ getConditionalOverrides(): any[];
1421
+ ensureConditionalOverrides(): any[];
1422
+ addConditionalOverride(): void;
1423
+ removeConditionalOverride(index: number): void;
1424
+ duplicateConditionalOverride(index: number): void;
1425
+ onConditionalOverrideReorder(event: any): void;
1426
+ selectConditionalOverride(index: number): void;
1427
+ getOverrideField(path: string): any;
1428
+ setOverrideField(path: string, value: any): void;
1429
+ onOverrideTypeChange(ov: any, val: string): void;
1430
+ exportOverrideJson(index: number): void;
1431
+ importOverrideJson(index: number): void;
1432
+ rendererValidationErrors: string[];
1433
+ rendererIsValid: boolean;
1434
+ rendererPreviewEnabled: boolean;
1435
+ private rendererAppliedSnapshot;
1436
+ previewRows: any[];
980
1437
  private refreshRendererFieldOptions;
981
1438
  getRendererFieldOptions(): Array<{
982
1439
  name: string;
@@ -1024,7 +1481,7 @@ declare class ColumnsConfigEditorComponent implements OnInit, OnDestroy {
1024
1481
  getColumnMapping(column: ColumnDefinition | null): {
1025
1482
  [key: string | number]: string;
1026
1483
  };
1027
- getRendererType(col: ColumnDefinition | null): 'icon' | 'image' | 'badge' | null;
1484
+ getRendererType(col: ColumnDefinition | null): 'icon' | 'image' | 'badge' | 'link' | 'button' | 'chip' | 'progress' | 'avatar' | 'toggle' | 'menu' | 'rating' | 'html' | null;
1028
1485
  onRendererTypeChange(type: 'icon' | 'image' | 'badge' | null): void;
1029
1486
  onRendererModeClosed(): void;
1030
1487
  onToggleRendererConditional(enabled: boolean): void;
@@ -1067,19 +1524,83 @@ declare class ColumnsConfigEditorComponent implements OnInit, OnDestroy {
1067
1524
  getRendererBadgeIcon(): string;
1068
1525
  setRendererBadgeIcon(v: string): void;
1069
1526
  private ensureRenderer;
1527
+ private _ensureKind;
1528
+ getRendererProp(kind: string, path: string): any;
1529
+ setRendererProp(kind: string, path: string, value: any): void;
1530
+ private _deepClone;
1531
+ hasSelectedRenderer(): boolean;
1532
+ onApplyRenderer(): void;
1533
+ onDiscardRenderer(): void;
1534
+ onExportRendererJson(): Promise<void>;
1535
+ onImportRendererJson(): void;
1536
+ private sanitizeRenderer;
1537
+ private ensurePreviewRows;
1538
+ private evalValueExpr;
1539
+ private evalArrayExpr;
1540
+ private normalizeExpression;
1541
+ private normalizeOptionalChaining;
1542
+ private extractExpression;
1543
+ private stripRowPrefixes;
1544
+ private _coerceExpected;
1545
+ private getNested;
1546
+ getPreviewRendererType(row: any): 'icon' | 'image' | 'badge' | 'link' | 'button' | 'chip' | 'progress' | 'avatar' | 'toggle' | 'menu' | 'html' | 'compose' | null;
1547
+ getPreviewIconName(row: any): string | null;
1548
+ getPreviewIconColor(row: any): string | null;
1549
+ getPreviewIconStyle(row: any): Record<string, string> | null;
1550
+ getPreviewImageSrc(row: any): string | null;
1551
+ getPreviewImageAlt(row: any): string | null;
1552
+ getPreviewImageWidth(): number | null;
1553
+ getPreviewImageHeight(): number | null;
1554
+ getPreviewImageShape(): 'square' | 'rounded' | 'circle' | undefined;
1555
+ getPreviewImageFit(): 'cover' | 'contain' | undefined;
1556
+ getPreviewBadgeText(row: any): string | null;
1557
+ getPreviewBadgeIcon(_row: any): string | null;
1558
+ getPreviewBadgeClasses(_row: any): string[];
1559
+ getPreviewLinkText(row: any): string;
1560
+ getPreviewLinkHref(row: any): string | null;
1561
+ getPreviewButtonLabel(row: any): string;
1562
+ getPreviewButtonIcon(): string | null;
1563
+ getPreviewChipText(row: any): string | null;
1564
+ getPreviewChipClasses(): string[];
1565
+ getPreviewProgressValue(row: any): number;
1566
+ getPreviewAvatarSrc(row: any): string | null;
1567
+ getPreviewAvatarInitials(row: any): string;
1568
+ getPreviewAvatarStyle(): Record<string, string>;
1569
+ getPreviewAvatarShape(): 'square' | 'rounded' | 'circle' | undefined;
1570
+ getPreviewToggleState(row: any): boolean;
1571
+ getPreviewMenuCount(row: any): number;
1572
+ getPreviewHtml(row: any): string;
1573
+ trackByIdx: (_: number, item: any) => number;
1574
+ private validateRenderer;
1070
1575
  private readonly _emptyMappingRef;
1576
+ composeSelectedIndex: number;
1577
+ private ensureCompose;
1578
+ getComposeItemsUI(): Array<{
1579
+ type: string;
1580
+ summary: string;
1581
+ raw: any;
1582
+ }>;
1583
+ private getComposeItemSummary;
1584
+ addComposeItem(kind: string): void;
1585
+ removeComposeItem(index: number): void;
1586
+ duplicateComposeItem(index: number): void;
1587
+ onComposeReorder(event: any): void;
1588
+ selectComposeItem(index: number): void;
1589
+ getComposeLayoutProp(key: string): any;
1590
+ setComposeLayoutProp(key: string, value: any): void;
1591
+ private getSelectedComposeItem;
1071
1592
  getColumnKeyInputType(column: ColumnDefinition | null): 'text' | 'number' | 'boolean';
1072
1593
  onMappingChange(mapping: {
1073
1594
  [key: string | number]: string;
1074
1595
  }): void;
1075
- get selectedColumnDataType(): ColumnDataType;
1076
- set selectedColumnDataType(value: ColumnDataType);
1077
- getColumnDataType(column: ColumnDefinition | null): ColumnDataType;
1596
+ get selectedColumnDataType(): ColumnDataType$1;
1597
+ set selectedColumnDataType(value: ColumnDataType$1);
1598
+ getColumnDataType(column: ColumnDefinition | null): ColumnDataType$1;
1078
1599
  /**
1079
1600
  * Infer column data type from field name patterns (shared logic with PraxisTable)
1080
1601
  */
1081
1602
  private inferFieldTypeFromFieldName;
1082
- onDataTypeChange(dataType: ColumnDataType): void;
1603
+ onDataTypeChange(dataType: ColumnDataType$1): void;
1083
1604
  showDataFormatter(column: ColumnDefinition | null): boolean;
1084
1605
  getFormatterIcon(column: ColumnDefinition | null): string;
1085
1606
  getFormatterPanelDescription(column: ColumnDefinition | null): string;
@@ -1108,21 +1629,29 @@ declare class ColumnsConfigEditorComponent implements OnInit, OnDestroy {
1108
1629
  }
1109
1630
 
1110
1631
  interface BehaviorConfigChange {
1111
- type: 'pagination' | 'sorting' | 'filtering' | 'selection' | 'interaction' | 'general';
1632
+ type: 'pagination' | 'sorting' | 'filtering' | 'selection' | 'dragging' | 'interaction' | 'general';
1112
1633
  property: string;
1113
1634
  value: any;
1114
1635
  fullConfig: TableConfig;
1115
1636
  }
1116
- declare class BehaviorConfigEditorComponent implements OnInit, OnDestroy {
1637
+ declare class BehaviorConfigEditorComponent implements OnInit, OnDestroy, OnChanges {
1117
1638
  private fb;
1639
+ readonly schemaOnlyLimitationsDocPath = "praxis-table.json-api.md#known-limitations-and-mismatches";
1640
+ readonly multiSortSchemaOnlyTooltip = "behavior.sorting.multiSort \u00E9 schema-only no runtime atual. Consulte a documenta\u00E7\u00E3o de limita\u00E7\u00F5es.";
1641
+ readonly columnFiltersSchemaOnlyTooltip = "behavior.filtering.columnFilters.enabled \u00E9 schema-only no runtime atual. Consulte a documenta\u00E7\u00E3o de limita\u00E7\u00F5es.";
1642
+ readonly draggingRowsSchemaOnlyTooltip = "behavior.dragging.rows \u00E9 schema-only no runtime atual. Consulte a documenta\u00E7\u00E3o de limita\u00E7\u00F5es.";
1118
1643
  config: TableConfig;
1644
+ resourcePath?: string;
1645
+ forceClientStrategies: boolean;
1119
1646
  configChange: EventEmitter<_praxisui_core.TableConfigModern>;
1120
1647
  behaviorChange: EventEmitter<BehaviorConfigChange>;
1121
1648
  behaviorForm: FormGroup;
1122
1649
  isV2: boolean;
1123
1650
  private destroy$;
1651
+ private previousBehaviorFormValue;
1124
1652
  constructor(fb: FormBuilder);
1125
1653
  ngOnInit(): void;
1654
+ ngOnChanges(changes: SimpleChanges): void;
1126
1655
  ngOnDestroy(): void;
1127
1656
  private initializeForm;
1128
1657
  private setupFormListeners;
@@ -1132,10 +1661,20 @@ declare class BehaviorConfigEditorComponent implements OnInit, OnDestroy {
1132
1661
  */
1133
1662
  applyFormChanges(): void;
1134
1663
  private updateConfig;
1664
+ private resolveStrategy;
1665
+ private enforceStrategyConstraints;
1666
+ private coerceSchemaOnlyControls;
1667
+ private buildFormSnapshotFromConfig;
1668
+ private areSnapshotsEqual;
1669
+ private getChangedProperties;
1670
+ private areFieldValuesEqual;
1671
+ private emitBehaviorChanges;
1672
+ private resolveBehaviorChangeType;
1135
1673
  private arrayToString;
1136
1674
  private stringToArray;
1675
+ private stringToStringArray;
1137
1676
  static ɵfac: i0.ɵɵFactoryDeclaration<BehaviorConfigEditorComponent, never>;
1138
- static ɵcmp: i0.ɵɵComponentDeclaration<BehaviorConfigEditorComponent, "behavior-config-editor", never, { "config": { "alias": "config"; "required": false; }; }, { "configChange": "configChange"; "behaviorChange": "behaviorChange"; }, never, never, true, never>;
1677
+ static ɵcmp: i0.ɵɵComponentDeclaration<BehaviorConfigEditorComponent, "behavior-config-editor", never, { "config": { "alias": "config"; "required": false; }; "resourcePath": { "alias": "resourcePath"; "required": false; }; "forceClientStrategies": { "alias": "forceClientStrategies"; "required": false; }; }, { "configChange": "configChange"; "behaviorChange": "behaviorChange"; }, never, never, true, never>;
1139
1678
  }
1140
1679
 
1141
1680
  interface ToolbarAction {
@@ -1152,6 +1691,7 @@ interface ToolbarAction {
1152
1691
  disabled?: boolean;
1153
1692
  visible?: boolean;
1154
1693
  shortcut?: string;
1694
+ shortcutScope?: 'toolbar' | 'global';
1155
1695
  tooltip?: string;
1156
1696
  visibleWhen?: string;
1157
1697
  children?: ToolbarAction[];
@@ -1186,6 +1726,12 @@ interface ToolbarActionsChange {
1186
1726
  value: any;
1187
1727
  fullConfig: TableConfig;
1188
1728
  }
1729
+ type ToolbarShortcutScope = 'toolbar' | 'global';
1730
+ interface InternalActionSpec {
1731
+ id: string;
1732
+ label: string;
1733
+ description: string;
1734
+ }
1189
1735
  declare class ToolbarActionsEditorComponent implements OnInit, OnDestroy, OnChanges {
1190
1736
  private fb;
1191
1737
  private iconPicker;
@@ -1200,6 +1746,13 @@ declare class ToolbarActionsEditorComponent implements OnInit, OnDestroy, OnChan
1200
1746
  editingToolbarActionIndex: number | null;
1201
1747
  editingRowActionIndex: number | null;
1202
1748
  editingBulkActionIndex: number | null;
1749
+ readonly globalActionCatalog: GlobalActionSpec[];
1750
+ readonly internalActionCatalog: InternalActionSpec[];
1751
+ readonly customActionValue = "__custom__";
1752
+ readonly validShortcutScopes: ToolbarShortcutScope[];
1753
+ private readonly actionFieldDrafts;
1754
+ private readonly actionFieldErrors;
1755
+ private readonly warnedInvalidShortcutScopes;
1203
1756
  private destroy$;
1204
1757
  constructor(fb: FormBuilder, iconPicker: IconPickerService);
1205
1758
  ngOnInit(): void;
@@ -1208,12 +1761,60 @@ declare class ToolbarActionsEditorComponent implements OnInit, OnDestroy, OnChan
1208
1761
  private initializeForm;
1209
1762
  private setupFormListeners;
1210
1763
  private loadActionsFromConfig;
1764
+ private syncActionsFromConfig;
1765
+ private areActionsEqual;
1211
1766
  private isAddLike;
1212
1767
  private findAddToolbarIndex;
1213
1768
  private ensureAddToolbarAction;
1214
1769
  private removeAddToolbarAction;
1215
1770
  private syncAddFormFromActions;
1216
1771
  private updateConfig;
1772
+ getActionSelectValue(value?: string): string;
1773
+ getActionParam(value?: string): string;
1774
+ getActionCustomValue(value?: string): string;
1775
+ isInternalAction(value?: string): boolean;
1776
+ getActionSpecById(id: string): GlobalActionSpec | undefined;
1777
+ onActionSelectChange(action: {
1778
+ action?: string;
1779
+ }, value: string, kind: 'toolbar' | 'row' | 'bulk'): void;
1780
+ onActionParamChange(action: {
1781
+ action?: string;
1782
+ }, value: string, kind: 'toolbar' | 'row' | 'bulk'): void;
1783
+ onActionCustomChange(action: {
1784
+ action?: string;
1785
+ }, value: string, kind: 'toolbar' | 'row' | 'bulk'): void;
1786
+ private touchActionList;
1787
+ private parseActionValue;
1788
+ isGlobalActionId(id?: string): boolean;
1789
+ getGlobalActionSchema(action: {
1790
+ action?: string;
1791
+ }): _praxisui_core.GlobalActionUiSchema | undefined;
1792
+ shouldShowGlobalActionField(action: {
1793
+ action?: string;
1794
+ }, field: GlobalActionField): boolean;
1795
+ hasActionFieldError(action: {
1796
+ action?: string;
1797
+ }, key: string): boolean;
1798
+ getActionFieldError(action: {
1799
+ action?: string;
1800
+ }, key: string): string;
1801
+ getGlobalActionFieldValue(action: {
1802
+ action?: string;
1803
+ }, field: GlobalActionField): any;
1804
+ onGlobalActionFieldChange(action: {
1805
+ action?: string;
1806
+ }, field: GlobalActionField, value: any, kind: 'toolbar' | 'row' | 'bulk'): void;
1807
+ private getActionParamInfo;
1808
+ private parseMethodAndUrl;
1809
+ private stringifyJson;
1810
+ private setActionFieldError;
1811
+ private clearActionFieldError;
1812
+ private collectGlobalActionFieldValues;
1813
+ private serializeGlobalActionParam;
1814
+ private buildPrimaryParam;
1815
+ private buildGlobalActionPayload;
1816
+ getToolbarActionShortcutScope(action: ToolbarAction): ToolbarShortcutScope;
1817
+ onToolbarActionShortcutScopeChange(action: ToolbarAction, value: ToolbarShortcutScope | string): void;
1217
1818
  addToolbarAction(): void;
1218
1819
  editToolbarAction(index: number): void;
1219
1820
  removeToolbarAction(index: number): void;
@@ -1234,6 +1835,11 @@ declare class ToolbarActionsEditorComponent implements OnInit, OnDestroy, OnChan
1234
1835
  private mergeRowActions;
1235
1836
  private mergeToolbarActions;
1236
1837
  private mergeBulkActions;
1838
+ private sanitizeToolbarActions;
1839
+ private sanitizeShortcutScope;
1840
+ private warnInvalidShortcutScope;
1841
+ private getActionDraftKey;
1842
+ private getActionDedupeKey;
1237
1843
  pickAddButtonIcon(): Promise<void>;
1238
1844
  pickActionIcon(index: number): Promise<void>;
1239
1845
  pickRowActionIcon(index: number): Promise<void>;
@@ -1268,11 +1874,240 @@ declare class MessagesLocalizationEditorComponent implements OnInit, OnDestroy {
1268
1874
  static ɵcmp: i0.ɵɵComponentDeclaration<MessagesLocalizationEditorComponent, "messages-localization-editor", never, { "config": { "alias": "config"; "required": false; }; }, { "configChange": "configChange"; "messagesLocalizationChange": "messagesLocalizationChange"; }, never, never, true, never>;
1269
1875
  }
1270
1876
 
1877
+ declare const ALWAYS_VISIBLE_LAYOUT_LANES: readonly ["actions", "inline", "grid"];
1878
+ type AlwaysVisibleLayoutLane = (typeof ALWAYS_VISIBLE_LAYOUT_LANES)[number];
1879
+ type AlwaysVisibleLayoutItem = {
1880
+ name: string;
1881
+ label: string;
1882
+ lane: AlwaysVisibleLayoutLane;
1883
+ controlType: string;
1884
+ controlTypeLabel: string;
1885
+ hasOverride: boolean;
1886
+ widthHint: string;
1887
+ };
1888
+ type AlwaysVisibleLayoutViewport = 'desktop' | 'tablet' | 'mobile';
1889
+ declare const ALWAYS_VISIBLE_SECTION_IDS: readonly ["always-visible-order", "always-visible-metadata", "always-visible-json"];
1890
+ type AlwaysVisibleSectionId = (typeof ALWAYS_VISIBLE_SECTION_IDS)[number];
1891
+ declare class FilterSettingsComponent implements OnChanges, AfterViewInit, OnDestroy {
1892
+ private fb;
1893
+ private readonly hostRef;
1894
+ private readonly cdr;
1895
+ metadata: FieldMetadata[];
1896
+ metadataSource: 'filter-dto' | 'columns';
1897
+ metadataLoading: boolean;
1898
+ metadataErrorMsg: string;
1899
+ settings: FilterConfig | undefined;
1900
+ configKey?: string;
1901
+ settingsChange: EventEmitter<FilterConfig>;
1902
+ form: FormGroup<{
1903
+ alwaysVisibleFields: FormControl<string[]>;
1904
+ showAdvanced: FormControl<boolean>;
1905
+ mode: FormControl<'filter'>;
1906
+ changeDebounceMs: FormControl<number>;
1907
+ allowSaveTags: FormControl<boolean>;
1908
+ tagColor: FormControl<'primary' | 'accent' | 'warn' | 'basic'>;
1909
+ tagVariant: FormControl<'filled' | 'outlined'>;
1910
+ tagButtonColor: FormControl<'primary' | 'accent' | 'warn' | 'basic'>;
1911
+ actionsButtonColor: FormControl<'primary' | 'accent' | 'warn' | 'basic'>;
1912
+ actionsVariant: FormControl<'standard' | 'outlined'>;
1913
+ useInlineSearchableSelectVariant: FormControl<boolean>;
1914
+ useInlineRangeVariant: FormControl<boolean>;
1915
+ useInlineDateVariant: FormControl<boolean>;
1916
+ useInlineDateRangeVariant: FormControl<boolean>;
1917
+ useInlineTimeVariant: FormControl<boolean>;
1918
+ useInlineTimeRangeVariant: FormControl<boolean>;
1919
+ useInlineTreeSelectVariant: FormControl<boolean>;
1920
+ placeBooleansInActions: FormControl<boolean>;
1921
+ showToggleLabels: FormControl<boolean>;
1922
+ alwaysMinWidth: FormControl<number>;
1923
+ alwaysColsMd: FormControl<number>;
1924
+ alwaysColsLg: FormControl<number>;
1925
+ confirmTagDelete: FormControl<boolean>;
1926
+ overlayVariant: FormControl<'card' | 'frosted'>;
1927
+ overlayBackdrop: FormControl<boolean>;
1928
+ advancedOpenMode: FormControl<'modal' | 'drawer'>;
1929
+ advancedClearButtonsEnabled: FormControl<boolean>;
1930
+ logLevel: FormControl<'none' | 'error' | 'warn' | 'info' | 'debug'>;
1931
+ enablePerformanceMetrics: FormControl<boolean>;
1932
+ }>;
1933
+ /**
1934
+ * Emits true when form has changes and is valid, enabling the save button
1935
+ */
1936
+ canSave$: Observable<boolean>;
1937
+ isDirty$: Observable<boolean>;
1938
+ isValid$: Observable<boolean>;
1939
+ isBusy$: Observable<boolean>;
1940
+ private initialSettings;
1941
+ private extraSettings;
1942
+ private suppressSettingsEmit;
1943
+ private readonly droppedLegacySettingKeys;
1944
+ private readonly managedSettingKeys;
1945
+ effectiveJson: string;
1946
+ settingsJsonText: string;
1947
+ jsonErrorMsg: string;
1948
+ alwaysVisibleOverridesJsonText: string;
1949
+ alwaysVisibleOverridesErrorMsg: string;
1950
+ alwaysVisibleFieldSearchText: string;
1951
+ previewDarkMode: boolean;
1952
+ private readonly tagsTabIndex;
1953
+ readonly alwaysVisibleLayoutLanes: readonly ["actions", "inline", "grid"];
1954
+ readonly alwaysVisibleViewports: AlwaysVisibleLayoutViewport[];
1955
+ orderPreviewViewport: AlwaysVisibleLayoutViewport;
1956
+ readonly alwaysVisibleSectionIds: readonly ["always-visible-order", "always-visible-metadata", "always-visible-json"];
1957
+ activeAlwaysVisibleSectionId: AlwaysVisibleSectionId;
1958
+ private scrollTrackingTarget;
1959
+ private cleanupScrollTracking;
1960
+ private scrollTrackingRafId;
1961
+ readonly layoutPreviewFields: string[];
1962
+ private readonly storage;
1963
+ private readonly settingsPanel;
1964
+ private readonly snackBar;
1965
+ private readonly destroyRef;
1966
+ private readonly injectedData;
1967
+ /** Clears persisted preferences for this filter, falling back to globals. */
1968
+ resetPreferences(): void;
1969
+ constructor(fb: FormBuilder);
1970
+ tags: FilterTag[];
1971
+ exportJson: string;
1972
+ newTagLabel: string;
1973
+ newTagPatchText: string;
1974
+ private tagsLoaded;
1975
+ private tagsKey;
1976
+ loadTags(): Promise<void>;
1977
+ saveTags(): void;
1978
+ ngAfterViewInit(): void;
1979
+ ngOnDestroy(): void;
1980
+ onTabChange(_event: MatTabChangeEvent): void;
1981
+ private ensureTagsLoaded;
1982
+ clearTags(): void;
1983
+ removeTag(index: number): void;
1984
+ renameTag(index: number, value: string): void;
1985
+ importTags(): void;
1986
+ addTag(): void;
1987
+ addTagFromCurrent(): void;
1988
+ presets: {
1989
+ key: string;
1990
+ label: string;
1991
+ description: string;
1992
+ previewClass: string;
1993
+ values: Partial<FilterConfig>;
1994
+ }[];
1995
+ getContrastWarning(): string | null;
1996
+ applyPreset(key: string): void;
1997
+ hasBooleanFieldMetadata(): boolean;
1998
+ getFieldLabel(name: string): string;
1999
+ onAlwaysVisibleFieldSearchChange(value: string): void;
2000
+ clearAlwaysVisibleFieldSearch(): void;
2001
+ filteredAlwaysVisibleMetadata(): FieldMetadata[];
2002
+ hasAlwaysVisibleMetadataResults(): boolean;
2003
+ trackFieldMetadataByName(_: number, meta: FieldMetadata): string;
2004
+ alwaysVisibleSelectionCount(): number;
2005
+ activeAlwaysVisibleOverrideCount(): number;
2006
+ alwaysVisibleLayoutItems(): AlwaysVisibleLayoutItem[];
2007
+ alwaysVisibleLaneItems(lane: AlwaysVisibleLayoutLane): AlwaysVisibleLayoutItem[];
2008
+ alwaysVisibleLaneLabel(lane: AlwaysVisibleLayoutLane): string;
2009
+ alwaysVisibleLaneDropListId(lane: AlwaysVisibleLayoutLane): string;
2010
+ alwaysVisibleLaneHint(lane: AlwaysVisibleLayoutLane): string;
2011
+ alwaysVisibleLaneEmptyHint(lane: AlwaysVisibleLayoutLane): string;
2012
+ alwaysVisibleViewportLabel(viewport: AlwaysVisibleLayoutViewport): string;
2013
+ alwaysVisibleViewportHint(viewport: AlwaysVisibleLayoutViewport): string;
2014
+ onAlwaysVisibleViewportChange(value: unknown): void;
2015
+ alwaysVisibleViewportWidth(): number;
2016
+ trackAlwaysVisibleLayoutItemByName(_: number, item: AlwaysVisibleLayoutItem): string;
2017
+ alwaysVisibleLayoutItemAriaLabel(item: AlwaysVisibleLayoutItem, lane: AlwaysVisibleLayoutLane, index: number, total: number): string;
2018
+ dropAlwaysVisibleLane(lane: AlwaysVisibleLayoutLane, event: CdkDragDrop<AlwaysVisibleLayoutItem[]>): void;
2019
+ allowAlwaysVisibleLaneEnter: (drag: CdkDrag<AlwaysVisibleLayoutItem>, drop: CdkDropList<AlwaysVisibleLayoutItem[]>) => boolean;
2020
+ canMoveAlwaysVisibleLane(lane: AlwaysVisibleLayoutLane, fieldName: string, delta: -1 | 1): boolean;
2021
+ moveAlwaysVisibleLane(lane: AlwaysVisibleLayoutLane, fieldName: string, delta: -1 | 1): void;
2022
+ onAlwaysVisibleLaneItemKeydown(event: KeyboardEvent, lane: AlwaysVisibleLayoutLane, fieldName: string): void;
2023
+ private resolveToolbarControlType;
2024
+ private resolveAlwaysVisibleLayoutLane;
2025
+ private getToolbarControlTypeLabel;
2026
+ private resolveAlwaysVisibleWidthHint;
2027
+ private getAlwaysVisibleFieldNamesByLane;
2028
+ private reorderAlwaysVisibleLane;
2029
+ private areFieldNameArraysEqual;
2030
+ private extractLaneFromDropListId;
2031
+ private isAlwaysVisibleViewport;
2032
+ isAlwaysVisibleSectionActive(sectionId: string): boolean;
2033
+ onAlwaysVisibleSectionFocus(sectionId: string): void;
2034
+ sectionEnterDelay(sectionId: string): string;
2035
+ scrollToAlwaysVisibleSection(sectionId: string): void;
2036
+ private setupAlwaysVisibleScrollTracking;
2037
+ private teardownAlwaysVisibleScrollTracking;
2038
+ private scheduleAlwaysVisibleSectionEvaluation;
2039
+ private updateActiveAlwaysVisibleSection;
2040
+ private getAlwaysVisibleSections;
2041
+ private getSectionActivationTop;
2042
+ private findNearestScrollableParent;
2043
+ private isAlwaysVisibleSectionId;
2044
+ private prefersReducedMotion;
2045
+ hasAlwaysVisibleOverride(fieldName: string): boolean;
2046
+ getAlwaysVisibleControlTypeLabel(fieldName: string): string;
2047
+ getAlwaysVisibleOverridePreview(fieldName: string): string;
2048
+ clearAlwaysVisibleOverride(fieldName: string): void;
2049
+ openAlwaysVisibleMetadataEditor(fieldName: string): Promise<void>;
2050
+ private loadMetadataEditorModule;
2051
+ private importOptionalModule;
2052
+ hasCurrentDto(): boolean;
2053
+ private getMetadataByName;
2054
+ private getAlwaysVisibleOverridesMap;
2055
+ private normalizeControlTypeForEditor;
2056
+ private inferControlTypeFromMetadata;
2057
+ private resolveAlwaysVisibleControlType;
2058
+ private buildAlwaysVisibleEditorSeed;
2059
+ private isPlainObject;
2060
+ private applyJsonMergePatch;
2061
+ private applyAlwaysVisibleMetadataPatch;
2062
+ renameTagPrompt(index: number): void;
2063
+ dropTags(event: CdkDragDrop<FilterTag[]>): void;
2064
+ ngOnChanges(changes: SimpleChanges): void;
2065
+ getSettingsValue(): FilterConfig;
2066
+ private updateEffectiveJson;
2067
+ private buildFullConfigFromForm;
2068
+ onJsonReload(): void;
2069
+ onJsonFormat(): void;
2070
+ onJsonApply(): void;
2071
+ formatAlwaysVisibleOverridesJson(): void;
2072
+ applyAlwaysVisibleOverridesJson(): void;
2073
+ reset(): void;
2074
+ private applyAlwaysVisibleOverridesMap;
2075
+ private syncAlwaysVisibleControlState;
2076
+ private clampDebounce;
2077
+ private cloneFieldNames;
2078
+ private applySettingsToForm;
2079
+ private refreshAlwaysVisibleOverridesEditor;
2080
+ private isAllowedOverrideControlType;
2081
+ private normalizeAlwaysVisibleMetadataOverrides;
2082
+ private extractExtraSettings;
2083
+ private withSuppressedSettingsEmit;
2084
+ private cloneUnknown;
2085
+ private normalizeAdvancedOpenMode;
2086
+ private clampMinWidth;
2087
+ private clampColsMd;
2088
+ private clampColsLg;
2089
+ layoutMinWidth(): number;
2090
+ layoutColsFor(breakpoint: 'sm' | 'md' | 'lg'): number;
2091
+ layoutControlError(controlName: 'alwaysMinWidth' | 'alwaysColsMd' | 'alwaysColsLg'): string | null;
2092
+ normalizeLayoutControl(controlName: 'alwaysMinWidth' | 'alwaysColsMd' | 'alwaysColsLg'): void;
2093
+ private markDirtyAndEmit;
2094
+ dropAlwaysVisible(event: CdkDragDrop<string[]>): void;
2095
+ canMoveAlwaysVisible(index: number, delta: -1 | 1): boolean;
2096
+ moveAlwaysVisible(index: number, delta: -1 | 1): void;
2097
+ onAlwaysVisibleListItemKeydown(event: KeyboardEvent, index: number): void;
2098
+ private normalizeText;
2099
+ clearPersistedFilters(): void;
2100
+ forceSchemaReload(): void;
2101
+ static ɵfac: i0.ɵɵFactoryDeclaration<FilterSettingsComponent, never>;
2102
+ static ɵcmp: i0.ɵɵComponentDeclaration<FilterSettingsComponent, "filter-settings", never, { "metadata": { "alias": "metadata"; "required": false; }; "metadataSource": { "alias": "metadataSource"; "required": false; }; "metadataLoading": { "alias": "metadataLoading"; "required": false; }; "metadataErrorMsg": { "alias": "metadataErrorMsg"; "required": false; }; "settings": { "alias": "settings"; "required": false; }; "configKey": { "alias": "configKey"; "required": false; }; }, { "settingsChange": "settingsChange"; }, never, never, true, never>;
2103
+ }
2104
+
2105
+ type ResourcePathIntent = 'set' | 'clear' | 'unchanged';
2106
+ type EffectiveDataMode = 'remote' | 'local' | 'empty';
1271
2107
  declare class PraxisTableConfigEditor implements OnInit, OnDestroy, SettingsValueProvider {
1272
2108
  private cdr;
1273
2109
  private configService;
1274
- private panelData;
1275
- private panelRef?;
2110
+ filterSettingsEditor?: FilterSettingsComponent;
1276
2111
  behaviorEditor?: BehaviorConfigEditorComponent;
1277
2112
  set crudEditorSetter(ref: any);
1278
2113
  private crudEditor?;
@@ -1289,8 +2124,11 @@ declare class PraxisTableConfigEditor implements OnInit, OnDestroy, SettingsValu
1289
2124
  private initialResourcePath;
1290
2125
  idField: string;
1291
2126
  private initialIdField;
2127
+ horizontalScroll: 'auto' | 'wrap' | 'none';
2128
+ private initialHorizontalScroll;
1292
2129
  crudContext?: {
1293
2130
  tableId: string;
2131
+ componentKeyId?: string;
1294
2132
  resourcePath?: string;
1295
2133
  /** Nome do campo identificador do recurso (ex.: 'id', 'codigo'). */
1296
2134
  idField?: string;
@@ -1321,8 +2159,19 @@ declare class PraxisTableConfigEditor implements OnInit, OnDestroy, SettingsValu
1321
2159
  isValid$: BehaviorSubject<boolean>;
1322
2160
  isBusy$: BehaviorSubject<boolean>;
1323
2161
  columnMetas: FieldMetadata[];
2162
+ filterDtoMetas: FieldMetadata[];
2163
+ filterDtoMetasLoading: boolean;
2164
+ filterDtoMetasErrorMsg: string;
1324
2165
  private hasCrudOverridesDirty;
1325
- constructor(cdr: ChangeDetectorRef, configService: TableConfigService, panelData: any, panelRef?: SettingsPanelRef | undefined);
2166
+ private hasLocalDataInput;
2167
+ private filterDtoLoadSeq;
2168
+ private lastKnownFilterSettings;
2169
+ private readonly panelData;
2170
+ private readonly crudService;
2171
+ private readonly panelRef;
2172
+ constructor(cdr: ChangeDetectorRef, configService: TableConfigService);
2173
+ private isDebugLoggingEnabled;
2174
+ private debugLog;
1326
2175
  ngOnInit(): void;
1327
2176
  onJsonConfigChange(newConfig: TableConfig): void;
1328
2177
  onJsonValidationChange(result: JsonValidationResult): void;
@@ -1330,6 +2179,15 @@ declare class PraxisTableConfigEditor implements OnInit, OnDestroy, SettingsValu
1330
2179
  onColumnsConfigChange(newConfig: TableConfig): void;
1331
2180
  onColumnChange(change: ColumnChange): void;
1332
2181
  onFilterSettingsChange(cfg: FilterConfig): void;
2182
+ private cloneFilterSettings;
2183
+ private isEffectivelyEmptyFilterSettings;
2184
+ getFilterSettingsMetas(): FieldMetadata[];
2185
+ isUsingFilterDtoMetas(): boolean;
2186
+ getEffectiveDataMode(): EffectiveDataMode;
2187
+ isEffectiveLocalMode(): boolean;
2188
+ private resolveLocalDataModeFeatureEnabled;
2189
+ private enforceEffectiveModeStrategyConstraints;
2190
+ onRulesConfigChange(newCfg: TableConfig): void;
1333
2191
  private updateColumnMetas;
1334
2192
  private updateCanSaveState;
1335
2193
  private subscribeCrudEditorChanges;
@@ -1346,11 +2204,16 @@ declare class PraxisTableConfigEditor implements OnInit, OnDestroy, SettingsValu
1346
2204
  */
1347
2205
  private deepEqual;
1348
2206
  getSettingsValue(): TableConfig;
2207
+ private getResourcePathIntent;
2208
+ private syncFilterSettingsFromEditor;
2209
+ private hasAdvancedSettingsProperty;
2210
+ private syncLastKnownFilterSettingsFromEditedConfig;
1349
2211
  onResourcePathChange(val: string): void;
2212
+ private loadFilterDtoMetas;
1350
2213
  onIdFieldChange(val: string): void;
2214
+ onHorizontalScrollChange(val: 'auto' | 'wrap' | 'none'): void;
1351
2215
  onReconcileIdField(): void;
1352
2216
  onAcceptServerHash(): void;
1353
- onVisualRulesConfigChange(newConfig: TableConfig): void;
1354
2217
  reset(): void;
1355
2218
  onResetToDefaults(): void;
1356
2219
  /**
@@ -1392,10 +2255,19 @@ declare class PraxisTableConfigEditor implements OnInit, OnDestroy, SettingsValu
1392
2255
  onMessagesLocalizationConfigChange(newConfig: TableConfig): void;
1393
2256
  onMessagesLocalizationChange(change: MessagesLocalizationChange): void;
1394
2257
  ngOnDestroy(): void;
1395
- static ɵfac: i0.ɵɵFactoryDeclaration<PraxisTableConfigEditor, [null, null, null, { optional: true; }]>;
2258
+ static ɵfac: i0.ɵɵFactoryDeclaration<PraxisTableConfigEditor, never>;
1396
2259
  static ɵcmp: i0.ɵɵComponentDeclaration<PraxisTableConfigEditor, "praxis-table-config-editor", never, {}, {}, never, never, true, never>;
1397
2260
  }
1398
2261
 
2262
+ /**
2263
+ * Configuração de abertura do Advanced Filter em gaveta pelo host.
2264
+ *
2265
+ * Notas para hosts que exibem botão "Salvar como atalho":
2266
+ * - Exiba a ação apenas quando `allowSaveTags === true`.
2267
+ * - Para habilitar o botão, verifique se há ao menos um filtro efetivo no DTO (campos não vazios).
2268
+ * - Monte o DTO para salvar mesclando `initialDto` e o valor atual do formulário (`lastValue`),
2269
+ * e limpe chaves com valores vazios ('' | null | undefined) antes de chamar `onSaveShortcut(dto)`.
2270
+ */
1399
2271
  interface FilterDrawerOpenConfig {
1400
2272
  resourcePath: string;
1401
2273
  formId: string;
@@ -1404,6 +2276,12 @@ interface FilterDrawerOpenConfig {
1404
2276
  title?: string;
1405
2277
  onSubmit(dto: Record<string, any>): void;
1406
2278
  onClose?(): void;
2279
+ /** Permite que a UI do host exiba ação de salvar atalho (opcional, retrocompatível) */
2280
+ allowSaveTags?: boolean;
2281
+ /** Rótulo i18n para o botão de salvar atalho (opcional) */
2282
+ i18nSaveAsShortcut?: string;
2283
+ /** Callback disparado pelo host com o DTO atual quando o usuário optar por salvar um atalho */
2284
+ onSaveShortcut?: (dto: Record<string, any>) => void;
1407
2285
  }
1408
2286
  interface FilterDrawerAdapter {
1409
2287
  open(config: FilterDrawerOpenConfig): Promise<void> | void;
@@ -1413,7 +2291,7 @@ declare const FILTER_DRAWER_ADAPTER: InjectionToken<FilterDrawerAdapter>;
1413
2291
  declare class DataFormatterComponent implements OnInit, OnChanges {
1414
2292
  private cdr;
1415
2293
  private formattingService;
1416
- columnType: ColumnDataType;
2294
+ columnType: ColumnDataType$1;
1417
2295
  currentFormat: string;
1418
2296
  formatChange: EventEmitter<string>;
1419
2297
  datePresets: FormatPreset[];
@@ -1434,6 +2312,7 @@ declare class DataFormatterComponent implements OnInit, OnChanges {
1434
2312
  percentageDecimals: string;
1435
2313
  percentageMultiplier: boolean;
1436
2314
  stringTransform: string;
2315
+ maskFormat: string;
1437
2316
  enableTruncate: boolean;
1438
2317
  truncateLength: number;
1439
2318
  truncateSuffix: string;
@@ -1461,6 +2340,7 @@ declare class DataFormatterComponent implements OnInit, OnChanges {
1461
2340
  onFormatOptionChange(): void;
1462
2341
  onTruncateToggle(): void;
1463
2342
  onBooleanDisplayChange(): void;
2343
+ onMaskChange(mask: string): void;
1464
2344
  private generateFormatString;
1465
2345
  private generatePreview;
1466
2346
  /**
@@ -1471,6 +2351,7 @@ declare class DataFormatterComponent implements OnInit, OnChanges {
1471
2351
  * Get the current format string based on component state
1472
2352
  */
1473
2353
  private getCurrentFormatString;
2354
+ private isMaskFormat;
1474
2355
  static ɵfac: i0.ɵɵFactoryDeclaration<DataFormatterComponent, never>;
1475
2356
  static ɵcmp: i0.ɵɵComponentDeclaration<DataFormatterComponent, "data-formatter", never, { "columnType": { "alias": "columnType"; "required": false; }; "currentFormat": { "alias": "currentFormat"; "required": false; }; }, { "formatChange": "formatChange"; }, never, never, true, never>;
1476
2357
  }
@@ -1523,150 +2404,272 @@ declare class ValueMappingEditorComponent implements OnInit, OnChanges {
1523
2404
  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>;
1524
2405
  }
1525
2406
 
1526
- declare class FilterSettingsComponent implements OnChanges {
1527
- private fb;
1528
- metadata: FieldMetadata[];
1529
- settings: FilterConfig | undefined;
1530
- configKey?: string;
1531
- settingsChange: EventEmitter<FilterConfig>;
1532
- form: FormGroup<{
1533
- quickField: FormControl<string | null>;
1534
- alwaysVisibleFields: FormControl<string[]>;
1535
- placeholder: FormControl<string>;
1536
- showAdvanced: FormControl<boolean>;
1537
- mode: FormControl<'auto' | 'filter' | 'card'>;
1538
- changeDebounceMs: FormControl<number>;
1539
- allowSaveTags: FormControl<boolean>;
1540
- tagColor: FormControl<'primary' | 'accent' | 'warn' | 'basic'>;
1541
- tagVariant: FormControl<'filled' | 'outlined'>;
1542
- tagButtonColor: FormControl<'primary' | 'accent' | 'warn' | 'basic'>;
1543
- actionsButtonColor: FormControl<'primary' | 'accent' | 'warn' | 'basic'>;
1544
- actionsVariant: FormControl<'standard' | 'outlined'>;
1545
- placeBooleansInActions: FormControl<boolean>;
1546
- showToggleLabels: FormControl<boolean>;
1547
- alwaysMinWidth: FormControl<number>;
1548
- alwaysColsMd: FormControl<number>;
1549
- alwaysColsLg: FormControl<number>;
1550
- autoSummary: FormControl<boolean>;
1551
- confirmTagDelete: FormControl<boolean>;
1552
- debugLayout: FormControl<boolean>;
1553
- overlayVariant: FormControl<'card' | 'frosted'>;
1554
- overlayBackdrop: FormControl<boolean>;
1555
- advancedOpenMode: FormControl<'overlay' | 'modal' | 'drawer'>;
1556
- }>;
2407
+ type ColumnDataType = 'string' | 'number' | 'date' | 'boolean' | 'currency' | 'percentage' | 'custom';
2408
+
2409
+ type OperatorKey = '==' | '!=' | '<' | '<=' | '>' | '>=' | 'contains' | 'startsWith' | 'endsWith' | 'matches' | 'not matches' | 'in' | 'not in' | 'is empty' | 'is not empty' | 'between' | 'is today' | 'in last' | 'weekday is' | 'is true' | 'is false' | 'contains all' | 'contains any' | 'length ==' | 'length >' | 'length <' | 'jsonPath matches' | 'has key' | 'key ==' | 'id ==' | 'id in' | 'has property';
2410
+ interface OperatorSpec {
2411
+ key: OperatorKey;
2412
+ label: string;
2413
+ icon?: string;
2414
+ description?: string;
2415
+ }
2416
+ declare class OperatorsRegistryService {
2417
+ /** Returns the list of operator specs supported for a given data type. */
2418
+ getForType(type: ColumnDataType | 'enum' | 'array' | 'json' | 'relational'): OperatorSpec[];
2419
+ get keys(): OperatorKey[];
2420
+ private readonly stringOps;
2421
+ private readonly numberOps;
2422
+ private readonly dateOps;
2423
+ private readonly booleanOps;
2424
+ private readonly enumOps;
2425
+ private readonly arrayOps;
2426
+ private readonly jsonOps;
2427
+ private readonly relationalOps;
2428
+ static ɵfac: i0.ɵɵFactoryDeclaration<OperatorsRegistryService, never>;
2429
+ static ɵprov: i0.ɵɵInjectableDeclaration<OperatorsRegistryService>;
2430
+ }
2431
+
2432
+ type GroupOp = 'AND' | 'OR' | 'NOT';
2433
+ interface RuleAtom {
2434
+ field: string;
2435
+ operator: string;
2436
+ value?: any;
2437
+ options?: Record<string, any>;
2438
+ }
2439
+ interface RuleGroup {
2440
+ op: GroupOp;
2441
+ conditions: RuleAtom[];
2442
+ groups?: RuleGroup[];
2443
+ }
2444
+ declare class RuleCompilerService {
1557
2445
  /**
1558
- * Emits true when form has changes and is valid, enabling the save button
2446
+ * Compiles a rule group into a single DSL expression string, adding
2447
+ * parentheses according to grouping and operator precedence.
1559
2448
  */
1560
- canSave$: Observable<boolean>;
1561
- isDirty$: Observable<boolean>;
1562
- isValid$: Observable<boolean>;
1563
- isBusy$: Observable<boolean>;
1564
- private initialSettings;
1565
- private readonly storage;
1566
- private readonly injectedData;
1567
- /** Clears persisted preferences for this filter, falling back to globals. */
1568
- resetPreferences(): void;
1569
- constructor(fb: FormBuilder);
1570
- tags: FilterTag[];
1571
- exportJson: string;
1572
- newTagLabel: string;
1573
- newTagPatchText: string;
1574
- private tagsKey;
1575
- loadTags(): void;
1576
- saveTags(): void;
1577
- clearTags(): void;
1578
- removeTag(index: number): void;
1579
- renameTag(index: number, value: string): void;
1580
- importTags(): void;
1581
- addTag(): void;
1582
- addTagFromCurrent(): void;
1583
- dropAlwaysVisible(event: CdkDragDrop<string[]>): void;
1584
- presets: {
1585
- key: string;
1586
- label: string;
1587
- values: Partial<FilterConfig>;
1588
- }[];
1589
- applyPreset(key: string): void;
1590
- getFieldLabel(name: string): string;
1591
- hasCurrentDto(): boolean;
1592
- renameTagPrompt(index: number): void;
1593
- ngOnChanges(changes: SimpleChanges): void;
1594
- getSettingsValue(): FilterConfig;
1595
- reset(): void;
1596
- private clampDebounce;
1597
- private clampMinWidth;
1598
- private clampColsMd;
1599
- private clampColsLg;
1600
- static ɵfac: i0.ɵɵFactoryDeclaration<FilterSettingsComponent, never>;
1601
- static ɵcmp: i0.ɵɵComponentDeclaration<FilterSettingsComponent, "filter-settings", never, { "metadata": { "alias": "metadata"; "required": false; }; "settings": { "alias": "settings"; "required": false; }; "configKey": { "alias": "configKey"; "required": false; }; }, { "settingsChange": "settingsChange"; }, never, never, true, never>;
2449
+ compileGroup(group: RuleGroup): string;
2450
+ /** Compiles a single rule atom to DSL. */
2451
+ compileAtom(atom: RuleAtom): string;
2452
+ private stringify;
2453
+ static ɵfac: i0.ɵɵFactoryDeclaration<RuleCompilerService, never>;
2454
+ static ɵprov: i0.ɵɵInjectableDeclaration<RuleCompilerService>;
1602
2455
  }
1603
2456
 
1604
- declare class TableVisualRulesEditorComponent {
2457
+ type RuleItem = {
2458
+ condition: string;
2459
+ cssClass?: string;
2460
+ style?: Record<string, string>;
2461
+ description?: string;
2462
+ effects?: _praxisui_table_rule_builder.RuleEffectDefinition;
2463
+ enabled?: boolean;
2464
+ };
2465
+ declare class TableRulesEditorComponent implements OnChanges, OnInit, OnDestroy {
2466
+ private cdr;
2467
+ private registry;
2468
+ private compiler;
2469
+ private dynamicForm;
2470
+ private crud?;
2471
+ private static runtimeRegistryInstanceCounter;
1605
2472
  config: TableConfig;
2473
+ resourcePath?: string;
2474
+ fields?: FieldDefinition[] | null;
2475
+ i18nRules?: Partial<Record<string, string>>;
2476
+ dslFunctionRegistry: FunctionRegistry<any> | null;
1606
2477
  configChange: EventEmitter<_praxisui_core.TableConfigModern>;
1607
- columns: ColumnDefinition[];
1608
- selectedField?: string;
1609
- selectedColumn?: ColumnDefinition | null;
1610
- scope: 'column' | 'row';
1611
- builderConfig: RuleBuilderConfig | null;
1612
- currentRulesState?: RuleBuilderState;
1613
- compiledRules: Array<{
1614
- condition: string;
1615
- cssClass?: string;
1616
- style?: Record<string, string>;
1617
- _styleText?: string;
1618
- display?: string;
1619
- }>;
1620
- private rulesUpdateTimer;
1621
- hasPending: boolean;
1622
- private effectsPaused;
1623
- private destroyed;
1624
- private suppressRulesUntil;
1625
- private lastCompiledJson;
1626
- private lastStateJson;
1627
- private lastColumnsSignature;
1628
- classPresets: {
2478
+ scope: 'row' | 'column';
2479
+ selectedColumnField: string | null;
2480
+ draftCondition: string;
2481
+ draftCssClass: string;
2482
+ draftStyleText: string;
2483
+ sanitizedStyle: Record<string, string>;
2484
+ dslMode: boolean;
2485
+ dslErrors: string[];
2486
+ testSummary: string;
2487
+ editIndex: number;
2488
+ get currentRules(): RuleItem[];
2489
+ set currentRules(v: RuleItem[]);
2490
+ rulesRow: RuleItem[];
2491
+ rulesColumn: RuleItem[];
2492
+ private parser;
2493
+ private runtimeFunctionRegistry;
2494
+ private readonly runtimeRegistryContextKey;
2495
+ objectKeys: {
2496
+ (o: object): string[];
2497
+ (o: {}): string[];
2498
+ };
2499
+ dynamicValueForm: FormGroup;
2500
+ dynamicValueMetas: FieldMetadata[];
2501
+ effectsValue?: RuleEffectDefinition;
2502
+ dynamicValueActive: boolean;
2503
+ private dynamicValueSub?;
2504
+ private testSummaryTimer;
2505
+ private readonly legacyStyleAllowList;
2506
+ basicFieldType: 'enum' | 'array' | 'json' | 'relational' | 'string' | 'number' | 'date' | 'boolean' | 'currency' | 'percentage' | 'custom';
2507
+ noValueOperator: boolean;
2508
+ i18nValuePlaceholder: string;
2509
+ enumOptions: Array<{
2510
+ value: any;
1629
2511
  label: string;
1630
- value: string;
1631
- }[];
2512
+ }>;
2513
+ private updateDerivedUiProps;
2514
+ /** Enable verbose console logging for debugging value editor behavior */
2515
+ debugLogs: boolean;
2516
+ debugLevel: 'log' | 'info' | 'debug';
2517
+ private dbg;
2518
+ /** Log a summary table of field metadata and column info for diagnostics */
2519
+ private logFieldMetasContext;
2520
+ /** Log a focused view for a single field */
2521
+ private logSingleFieldMeta;
2522
+ private logFieldChoices;
2523
+ i18nDefault: Record<string, string>;
2524
+ t(key: string): string;
2525
+ constructor(cdr: ChangeDetectorRef, registry: OperatorsRegistryService, compiler: RuleCompilerService, dynamicForm: DynamicFormService, crud?: GenericCrudService<any> | undefined);
2526
+ private configureDslRuntime;
1632
2527
  ngOnInit(): void;
1633
- ngOnChanges(): void;
2528
+ ngOnChanges(changes: SimpleChanges): void;
1634
2529
  ngOnDestroy(): void;
1635
- onScopeChange(scope: 'column' | 'row'): void;
1636
- onSelectColumn(field: string): void;
1637
- private resolveSelectedTarget;
1638
- onRulesChanged(state: RuleBuilderState): void;
1639
- private applyRulesState;
1640
- onEffectChanged(): void;
1641
- onStyleTextChanged(r: any): void;
1642
- private mergeEffects;
1643
- private materializeCompiledRules;
1644
- private stringifyStyle;
1645
- private parseStyleText;
1646
- onPresetSelected(r: any, value: string): void;
1647
- private mergePendingIntoCompiled;
1648
- private prettifyCondition;
1649
- private createBuilderConfig;
1650
- private mapType;
1651
- private maybeRebuildBuilderConfig;
1652
- applyEffects(): void;
1653
- discardEffects(): void;
1654
- pauseEffects(on: boolean): void;
1655
- trackRule(index: number, r: any): any;
1656
- static ɵfac: i0.ɵɵFactoryDeclaration<TableVisualRulesEditorComponent, never>;
1657
- static ɵcmp: i0.ɵɵComponentDeclaration<TableVisualRulesEditorComponent, "table-visual-rules-editor", never, { "config": { "alias": "config"; "required": false; }; }, { "configChange": "configChange"; }, never, never, true, never>;
2530
+ get columnFields(): string[];
2531
+ getOperatorsForField(fieldName: string | null): string[];
2532
+ onScopeChange(_s: 'row' | 'column'): void;
2533
+ onColumnSelect(_field: string): void;
2534
+ private initFromConfig;
2535
+ private loadColumnRules;
2536
+ rebuildCondition(): void;
2537
+ onDraftChange(): void;
2538
+ applyTextPreset(preset: string): void;
2539
+ generateSampleData(): void;
2540
+ runTest(): void;
2541
+ onRelSearch(ev: any): void;
2542
+ clearRelSelection(): void;
2543
+ onRelSelectSingle(opt: any): void;
2544
+ onRelAddMulti(opt: any): void;
2545
+ removeRelMulti(i: number): void;
2546
+ private fetchRelOptions;
2547
+ private getRelationalConfig;
2548
+ validateDraft(): void;
2549
+ canCommitDraft(): boolean;
2550
+ addOrUpdateRule(): void;
2551
+ editRule(index: number): void;
2552
+ removeRule(index: number): void;
2553
+ duplicateRule(index: number): void;
2554
+ onRuleToggle(): void;
2555
+ onApply(): void;
2556
+ isValid(): boolean;
2557
+ onExportRules(): void;
2558
+ onImportRules(): void;
2559
+ private sanitizeRule;
2560
+ private getKnownDslFields;
2561
+ private buildRendererOverrideFromRule;
2562
+ private buildLegacyRendererOverrideFromRule;
2563
+ private buildRowRendererOverrideFromRule;
2564
+ private stringifyValue;
2565
+ private parseLegacyStyle;
2566
+ private normalizeLegacyStyleObject;
2567
+ private extractIdentifiers;
2568
+ resetDraft(): void;
2569
+ basicField: string;
2570
+ basicOperator: string;
2571
+ basicValue: any;
2572
+ basicMin: any;
2573
+ basicMax: any;
2574
+ basicListCsv: string;
2575
+ basicDate: Date | null;
2576
+ basicDateStart: Date | null;
2577
+ basicDateEnd: Date | null;
2578
+ basicEnumValue: string | number | null;
2579
+ basicEnumValues: Array<string | number>;
2580
+ basicLength: number | null;
2581
+ relationalSelected: {
2582
+ id: any;
2583
+ label: string;
2584
+ raw: any;
2585
+ } | null;
2586
+ relationalSelectedMulti: Array<{
2587
+ id: any;
2588
+ label: string;
2589
+ raw: any;
2590
+ }>;
2591
+ relationalOptions: Array<{
2592
+ id: any;
2593
+ label: string;
2594
+ raw: any;
2595
+ }>;
2596
+ basicRelPath: string;
2597
+ private relSearchTerm;
2598
+ private relCache;
2599
+ basicLastN: number | null;
2600
+ basicLastUnit: 'days' | 'weeks' | 'months';
2601
+ basicWeekdays: number[];
2602
+ weekdayOptions: {
2603
+ value: number;
2604
+ label: string;
2605
+ }[];
2606
+ basicJsonPath: string;
2607
+ basicJsonPattern: string;
2608
+ basicJsonKey: string;
2609
+ basicJsonExpected: any;
2610
+ draftGroup: RuleGroup;
2611
+ editAtomIndex: number;
2612
+ activeGroupTarget: 'root' | number;
2613
+ onEffectsChange(v: RuleEffectDefinition): void;
2614
+ private hasRuleEffectsValue;
2615
+ getFieldType(fieldName: string | null): 'enum' | 'array' | 'json' | 'relational' | 'string' | 'number' | 'date' | 'boolean' | 'currency' | 'percentage' | 'custom';
2616
+ getEnumOptions(fieldName: string | null): Array<{
2617
+ value: any;
2618
+ label: string;
2619
+ }>;
2620
+ isNoValueOperator(op: string): boolean;
2621
+ getValuePlaceholder(): string;
2622
+ getI18nValuePlaceholder(): string;
2623
+ private toIsoDateString;
2624
+ setDsl(v: boolean): void;
2625
+ onBasicFieldChange(_val: string): void;
2626
+ onBasicOperatorChange(_val: string): void;
2627
+ private refreshDynamicValueInitialValueOnly;
2628
+ refreshDynamicValueHost(): void;
2629
+ private buildAtomFromBasic;
2630
+ canBuildAtom(): boolean;
2631
+ onAddOrUpdateAtom(): void;
2632
+ editAtom(index: number): void;
2633
+ removeAtom(index: number): void;
2634
+ resetAtomEdit(): void;
2635
+ private focusAddCondition;
2636
+ clearGroup(): void;
2637
+ onDropCondition(evt: CdkDragDrop<RuleAtom[]>): void;
2638
+ updateDraftFromGroup(): void;
2639
+ getAtomPreview(a: RuleAtom): string;
2640
+ addSubgroup(): void;
2641
+ removeSubgroup(index: number): void;
2642
+ getGroupPreview(g: RuleGroup): string;
2643
+ private getActiveGroupRef;
2644
+ static ɵfac: i0.ɵɵFactoryDeclaration<TableRulesEditorComponent, [null, null, null, null, { optional: true; }]>;
2645
+ static ɵcmp: i0.ɵɵComponentDeclaration<TableRulesEditorComponent, "table-rules-editor", never, { "config": { "alias": "config"; "required": false; }; "resourcePath": { "alias": "resourcePath"; "required": false; }; "fields": { "alias": "fields"; "required": false; }; "i18nRules": { "alias": "i18nRules"; "required": false; }; "dslFunctionRegistry": { "alias": "dslFunctionRegistry"; "required": false; }; "debugLogs": { "alias": "debugLogs"; "required": false; }; "debugLevel": { "alias": "debugLevel"; "required": false; }; }, { "configChange": "configChange"; }, never, never, true, never>;
1658
2646
  }
1659
2647
 
1660
- interface ConditionalStyleRule {
1661
- condition: string;
1662
- cssClass?: string;
1663
- style?: {
1664
- [key: string]: string;
1665
- };
1666
- description?: string;
1667
- }
1668
- declare function ruleBuilderStateToConditionalStyles(state: RuleBuilderState | null | undefined): ConditionalStyleRule[];
1669
- declare function conditionalStylesToBuilderState(styles: ConditionalStyleRule[] | null | undefined): RuleBuilderState;
2648
+ /**
2649
+ * Lightweight JSON path evaluator for simple cases used in conditional styling.
2650
+ * Supported syntax (subset):
2651
+ * - $.a.b.c
2652
+ * - a.b[0].c
2653
+ * - a["key"] / a['key']
2654
+ * - a[0]
2655
+ */
2656
+ declare function jsonPathGet(root: any, rawPath: string): any;
2657
+ declare function hasJsonKey(root: any, keyOrPath: string): boolean;
2658
+ declare function jsonPathMatches(root: any, path: string, pattern: string): boolean;
2659
+ /**
2660
+ * Registers JSON helpers in a DslParser instance, if it supports custom functions.
2661
+ * This is optional — call it in your app host bootstrap.
2662
+ */
2663
+ declare function registerJsonDslFunctions(parser: DslParser | any): void;
2664
+
2665
+ /**
2666
+ * Registers simple date/time helpers in a DslParser instance.
2667
+ * - today(): returns 'YYYY-MM-DD' (UTC)
2668
+ * - now(): returns Unix timestamp in milliseconds
2669
+ * - dateAdd(date, amount, unit): adds amount (days|weeks|months) and returns 'YYYY-MM-DD'
2670
+ * - dateFormat(date, token): supports token 'E' (ISO weekday 1..7)
2671
+ */
2672
+ declare function registerDateDslFunctions(parser: DslParser | any): void;
1670
2673
 
1671
2674
  declare class FormulaGeneratorService {
1672
2675
  /**
@@ -1709,6 +2712,15 @@ declare class FormulaGeneratorService {
1709
2712
  result?: any;
1710
2713
  error?: string;
1711
2714
  };
2715
+ private evaluateFormula;
2716
+ private evaluateConcatenation;
2717
+ private evaluateArithmetic;
2718
+ private evaluateNestedProperty;
2719
+ private evaluateConditionalMapping;
2720
+ private evaluateDefaultValue;
2721
+ private compareValues;
2722
+ private resolveOperand;
2723
+ private resolveFieldValue;
1712
2724
  static ɵfac: i0.ɵɵFactoryDeclaration<FormulaGeneratorService, never>;
1713
2725
  static ɵprov: i0.ɵɵInjectableDeclaration<FormulaGeneratorService>;
1714
2726
  }
@@ -1771,5 +2783,86 @@ declare const PRAXIS_TABLE_COMPONENT_METADATA: ComponentDocMeta;
1771
2783
  */
1772
2784
  declare function providePraxisTableMetadata(): Provider;
1773
2785
 
1774
- export { BOOLEAN_PRESETS, BehaviorConfigEditorComponent, CURRENCY_PRESETS, ColumnsConfigEditorComponent, DATE_PRESETS, DataFormatterComponent, DataFormattingService, FILTER_DRAWER_ADAPTER, FORMULA_TEMPLATES, FilterConfigService, FilterSettingsComponent, FormulaGeneratorService, JsonConfigEditorComponent, MessagesLocalizationEditorComponent, NUMBER_PRESETS, PERCENTAGE_PRESETS, PRAXIS_TABLE_COMPONENT_METADATA, PraxisFilter, PraxisTable, PraxisTableConfigEditor, PraxisTableToolbar, STRING_PRESETS, TableDefaultsProvider, TableVisualRulesEditorComponent, ToolbarActionsEditorComponent, ValueMappingEditorComponent, VisualFormulaBuilderComponent, conditionalStylesToBuilderState, getActionId, providePraxisTableMetadata, ruleBuilderStateToConditionalStyles };
1775
- export type { ActionLike, ArithmeticParams, BehaviorConfigChange, BooleanFormatterOptions, BulkAction, ColumnChange, ColumnDataType, ConcatenationParams, ConditionalMappingParams, ConditionalStyleRule, CurrencyFormatterOptions, DateFormatterOptions, DefaultValueParams, FieldSchema, FilterConfig, FilterDrawerAdapter, FilterDrawerOpenConfig, FilterTag, FormatPreset, FormatterConfig, FormulaDefinition, FormulaParameterSchema, FormulaParams, FormulaTemplate, FormulaType, I18n, JsonEditorEvent, JsonValidationResult, MessagesLocalizationChange, NestedPropertyParams, NumberFormatterOptions, PercentageFormatterOptions, RowAction, RowActionConfig, RowActionsBehavior, StringFormatterOptions, ToolbarAction, ToolbarActionsChange, ValueMappingPair };
2786
+ /**
2787
+ * Catálogo de capacidades do TableConfig v2 para uso da IA.
2788
+ * Focado em paths permitidos, enums e flags críticas para validação de patches.
2789
+ */
2790
+
2791
+ declare module '@praxisui/core' {
2792
+ interface AiCapabilityCategoryMap {
2793
+ meta: true;
2794
+ columns: true;
2795
+ renderer: true;
2796
+ conditional: true;
2797
+ mapping: true;
2798
+ format: true;
2799
+ filtering: true;
2800
+ sorting: true;
2801
+ selection: true;
2802
+ pagination: true;
2803
+ interaction: true;
2804
+ toolbar: true;
2805
+ actions: true;
2806
+ export: true;
2807
+ performance: true;
2808
+ messages: true;
2809
+ localization: true;
2810
+ }
2811
+ }
2812
+ type CapabilityCategory$1 = AiCapabilityCategory;
2813
+ type ValueKind$1 = AiValueKind;
2814
+ interface Capability$1 extends AiCapability {
2815
+ /** Path com [] para arrays (ex.: columns[].renderer.type) */
2816
+ path: string;
2817
+ category: CapabilityCategory$1;
2818
+ valueKind: ValueKind$1;
2819
+ allowedValues?: Array<string | number>;
2820
+ description?: string;
2821
+ critical?: boolean;
2822
+ intentExamples?: string[];
2823
+ dependsOn?: string;
2824
+ example?: string;
2825
+ safetyNotes?: string;
2826
+ }
2827
+ interface CapabilityCatalog$1 extends AiCapabilityCatalog {
2828
+ capabilities: Capability$1[];
2829
+ }
2830
+ declare const ENUMS: Record<string, string[]>;
2831
+ declare const TABLE_AI_CAPABILITIES: CapabilityCatalog$1;
2832
+ /**
2833
+ * Agrupamentos lógicos de tarefas para facilitar a injeção de contexto no prompt da IA.
2834
+ * A IA pode receber apenas o grupo relevante para a intenção do usuário.
2835
+ */
2836
+ declare const TASK_PRESETS: {
2837
+ 'visual-refresh': string[];
2838
+ 'data-analysis': string[];
2839
+ 'interaction-setup': string[];
2840
+ 'export-governance': string[];
2841
+ 'layout-structure': string[];
2842
+ };
2843
+ declare function getTableCapabilities(): Capability$1[];
2844
+ declare function getEnum(name: keyof typeof ENUMS): string[];
2845
+
2846
+ /**
2847
+ * Component-level capabilities for PraxisTable.
2848
+ * Paths assume a wrapper shape: { inputs: {...}, outputs: {...} }.
2849
+ */
2850
+
2851
+ declare module '@praxisui/core' {
2852
+ interface AiCapabilityCategoryMap {
2853
+ inputs: true;
2854
+ outputs: true;
2855
+ }
2856
+ }
2857
+ type CapabilityCategory = AiCapabilityCategory;
2858
+ type ValueKind = AiValueKind;
2859
+ interface Capability extends AiCapability {
2860
+ category: CapabilityCategory;
2861
+ }
2862
+ interface CapabilityCatalog extends AiCapabilityCatalog {
2863
+ capabilities: Capability[];
2864
+ }
2865
+ declare const TABLE_COMPONENT_AI_CAPABILITIES: CapabilityCatalog;
2866
+
2867
+ export { BOOLEAN_PRESETS, BehaviorConfigEditorComponent, CURRENCY_PRESETS, ColumnsConfigEditorComponent, DATE_PRESETS, DataFormatterComponent, DataFormattingService, FILTER_DRAWER_ADAPTER, FORMULA_TEMPLATES, FilterConfigService, FilterSettingsComponent, FormulaGeneratorService, JsonConfigEditorComponent, MessagesLocalizationEditorComponent, NUMBER_PRESETS, PERCENTAGE_PRESETS, PRAXIS_TABLE_COMPONENT_METADATA, PraxisFilter, PraxisTable, PraxisTableConfigEditor, PraxisTableToolbar, STRING_PRESETS, TABLE_AI_CAPABILITIES, TABLE_COMPONENT_AI_CAPABILITIES, TASK_PRESETS, TableDefaultsProvider, TableRulesEditorComponent, ToolbarActionsEditorComponent, ValueMappingEditorComponent, VisualFormulaBuilderComponent, getActionId, getEnum, getTableCapabilities, hasJsonKey, jsonPathGet, jsonPathMatches, providePraxisTableMetadata, registerDateDslFunctions, registerJsonDslFunctions };
2868
+ export type { ActionLike, ArithmeticParams, BehaviorConfigChange, BooleanFormatterOptions, BulkAction, Capability$1 as Capability, CapabilityCatalog$1 as CapabilityCatalog, CapabilityCategory$1 as CapabilityCategory, ColumnChange, ColumnDataType$1 as ColumnDataType, ConcatenationParams, ConditionalMappingParams, CurrencyFormatterOptions, DataMode, DateFormatterOptions, DefaultValueParams, FieldSchema, FilterConfig, FilterDrawerAdapter, FilterDrawerOpenConfig, FilterTag, FormatPreset, FormatterConfig, FormulaDefinition, FormulaParameterSchema, FormulaParams, FormulaTemplate, FormulaType, I18n, JsonEditorEvent, JsonValidationResult, MessagesLocalizationChange, NestedPropertyParams, NumberFormatterOptions, PercentageFormatterOptions, ResourcePathIntent, RowAction, StringFormatterOptions, Capability as TableComponentCapability, CapabilityCatalog as TableComponentCapabilityCatalog, CapabilityCategory as TableComponentCapabilityCategory, ValueKind as TableComponentValueKind, ToolbarAction, ToolbarActionsChange, ValueKind$1 as ValueKind, ValueMappingPair };