@praxisui/table 3.0.0-beta.0 → 3.0.0-beta.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { OnChanges, OnDestroy, EventEmitter, ElementRef, SimpleChanges, OnInit, AfterViewInit, DoCheck, DestroyRef, ChangeDetectorRef, NgZone, AfterContentInit, Provider } from '@angular/core';
2
+ import { OnChanges, OnDestroy, EventEmitter, ElementRef, SimpleChanges, OnInit, AfterViewInit, DoCheck, DestroyRef, ChangeDetectorRef, NgZone, Provider, AfterContentInit } from '@angular/core';
3
3
  import { ActivatedRoute } from '@angular/router';
4
4
  import { MatTable, MatTableDataSource } from '@angular/material/table';
5
5
  import { MatPaginator, PageEvent } from '@angular/material/paginator';
@@ -10,9 +10,8 @@ import { CdkDragDrop, CdkDragEnd, CdkDrag, CdkDropList } from '@angular/cdk/drag
10
10
  import { BehaviorSubject, Subscription, Observable } from 'rxjs';
11
11
  import { SettingsPanelService, SettingsValueProvider } from '@praxisui/settings-panel';
12
12
  import * as _praxisui_core from '@praxisui/core';
13
- import { TableConfig, LoggerService, GlobalConfigService, AsyncConfigStorage, FieldMetadata, SchemaIdParams, FormConfig, GenericCrudService, DynamicFormService, SchemaNormalizerService, ComponentKeyService, LoadingState, ColumnDefinition, ConnectionStorage, LoadingOrchestrator, PraxisLoadingRenderer, GlobalActionSpec, IconPickerService, GlobalActionField, TableConfigService, FieldDefinition, ComponentDocMeta, AiCapabilityCategory, AiValueKind, AiCapability, AiCapabilityCatalog } from '@praxisui/core';
13
+ import { TableConfig, LoggerService, GlobalConfigService, AsyncConfigStorage, FieldMetadata, SchemaIdParams, FormConfig, GenericCrudService, DynamicFormService, SchemaNormalizerService, ComponentKeyService, ComponentDocMeta, LoadingState, ColumnDefinition, ConnectionStorage, LoadingOrchestrator, PraxisLoadingRenderer, GlobalActionSpec, IconPickerService, SurfaceOpenPayload, GlobalActionField, TableConfigService, FieldDefinition, AiCapabilityCategory, AiValueKind, AiCapability, AiCapabilityCatalog } from '@praxisui/core';
14
14
  import { FunctionRegistry, DslParser } from '@praxisui/specification';
15
- import { DatePipe, DecimalPipe, CurrencyPipe, PercentPipe, UpperCasePipe, LowerCasePipe, TitleCasePipe } from '@angular/common';
16
15
  import { FormGroup, FormControl, FormBuilder } from '@angular/forms';
17
16
  import { MatDialog } from '@angular/material/dialog';
18
17
  import { CdkOverlayOrigin, ConnectedPosition } from '@angular/cdk/overlay';
@@ -174,61 +173,69 @@ declare const PERCENTAGE_PRESETS: FormatPreset[];
174
173
  declare const STRING_PRESETS: FormatPreset[];
175
174
  declare const BOOLEAN_PRESETS: FormatPreset[];
176
175
 
176
+ interface FormattingLocalization {
177
+ locale?: string;
178
+ dateTime?: {
179
+ dateFormat?: string;
180
+ timeFormat?: string;
181
+ dateTimeFormat?: string;
182
+ };
183
+ number?: {
184
+ decimalSeparator?: string;
185
+ thousandsSeparator?: string;
186
+ defaultPrecision?: number;
187
+ negativeSign?: string;
188
+ negativeSignPosition?: 'before' | 'after';
189
+ };
190
+ currency?: {
191
+ code?: string;
192
+ symbol?: string;
193
+ position?: 'before' | 'after';
194
+ spacing?: boolean;
195
+ precision?: number;
196
+ };
197
+ formatting?: {
198
+ percentageFormat?: string;
199
+ };
200
+ }
201
+ interface DataFormattingOptions {
202
+ locale?: string;
203
+ localization?: FormattingLocalization | null;
204
+ }
177
205
  declare class DataFormattingService {
178
- private datePipe;
179
- private decimalPipe;
180
- private currencyPipe;
181
- private percentPipe;
182
- private upperCasePipe;
183
- private lowerCasePipe;
184
- private titleCasePipe;
185
- private locale;
186
- private groupSeparator;
187
- private decimalSeparator;
188
- constructor(datePipe: DatePipe, decimalPipe: DecimalPipe, currencyPipe: CurrencyPipe, percentPipe: PercentPipe, upperCasePipe: UpperCasePipe, lowerCasePipe: LowerCasePipe, titleCasePipe: TitleCasePipe, locale: string);
189
- /**
190
- * Apply formatting to a value based on column type and format string
191
- */
192
- formatValue(value: any, columnType: ColumnDataType$1, formatString: string): any;
206
+ private readonly hostLocale;
207
+ private readonly localePipeCache;
208
+ private readonly numericSeparatorCache;
209
+ private readonly upperCasePipe;
210
+ private readonly lowerCasePipe;
211
+ private readonly titleCasePipe;
212
+ constructor(hostLocale: string);
193
213
  /**
194
- * Coerce value to the expected type for formatting
214
+ * Apply formatting to a value based on column type and format string.
215
+ * Formatting can honor a runtime locale/localization override before
216
+ * falling back to the host LOCALE_ID.
195
217
  */
218
+ formatValue(value: any, columnType: ColumnDataType$1, formatString: string, options?: DataFormattingOptions): any;
196
219
  private coerceValueToType;
197
- /**
198
- * Format date values
199
- */
200
220
  private formatDate;
201
- /**
202
- * Format number values
203
- */
204
221
  private formatNumber;
205
- /**
206
- * Format currency values
207
- */
208
222
  private formatCurrency;
209
- /**
210
- * Format percentage values
211
- */
212
223
  private formatPercentage;
213
- private removeGrouping;
214
- /**
215
- * Format string values
216
- */
217
224
  private formatString;
218
- /**
219
- * Apply string transformations
220
- */
221
225
  private applyStringTransform;
222
226
  private isMaskFormat;
223
227
  private applyMask;
224
- /**
225
- * Format boolean values
226
- */
227
228
  private formatBoolean;
228
- /**
229
- * Check if formatting is needed for a column
230
- */
231
229
  needsFormatting(columnType: ColumnDataType$1, formatString: string | null | undefined): boolean;
230
+ getHostLocale(): string;
231
+ private resolveFormattingContext;
232
+ private getLocalePipeBundle;
233
+ private getNumericSeparators;
234
+ private parseDigitsInfo;
235
+ private getNumberOverrides;
236
+ private normalizeNumericInput;
237
+ private composeNumericParts;
238
+ private escapeRegExp;
232
239
  static ɵfac: i0.ɵɵFactoryDeclaration<DataFormattingService, never>;
233
240
  static ɵprov: i0.ɵɵInjectableDeclaration<DataFormattingService>;
234
241
  }
@@ -251,6 +258,12 @@ declare class TableDefaultsProvider {
251
258
 
252
259
  type FilterConfig = {
253
260
  alwaysVisibleFields?: string[];
261
+ /**
262
+ * Deep metadata overrides for any field rendered by the filter runtime.
263
+ * This is used by runtime authoring to project field-level patches without
264
+ * mutating the canonical schema metadata returned by the source.
265
+ */
266
+ fieldMetadataOverrides?: Record<string, Record<string, any>>;
254
267
  /**
255
268
  * Deep metadata overrides for always-visible fields.
256
269
  * Source of truth remains the filter DTO; this map applies controlled
@@ -395,15 +408,26 @@ declare class PraxisFilter implements OnInit, OnChanges, AfterViewInit, OnDestro
395
408
  * Keys are field names from the filter DTO schema.
396
409
  */
397
410
  alwaysVisibleFieldMetadataOverrides: Record<string, Record<string, any>> | undefined;
411
+ /** Runtime field-level metadata overrides applied by the metadata editor. */
412
+ private fieldMetadataOverrides;
398
413
  /** Additional selected field ids to render before pinned always-visible */
399
414
  selectedFieldIds: string[];
400
415
  tags?: FilterTag[];
401
416
  allowSaveTags?: boolean;
402
417
  persistenceKey?: string;
418
+ disablePersistence: boolean;
403
419
  i18n?: Partial<I18n>;
404
420
  changeDebounceMs: number;
405
421
  /** Controla a exibição do botão de preferências dentro do filtro */
406
422
  showFilterSettings: boolean;
423
+ /** Controla a exibição do botão de filtro avançado */
424
+ showAdvancedButton: boolean;
425
+ /** Controla a exibição do botão de adicionar campos */
426
+ showAddButton: boolean;
427
+ /** Controla a exibição do botão de limpar filtros */
428
+ showClearButton: boolean;
429
+ /** Controla a exibição do botão de pesquisar/aplicar filtros */
430
+ showSearchButton: boolean;
407
431
  /** Exibir confirmação ao excluir atalho (tag) */
408
432
  confirmTagDelete: boolean;
409
433
  /** Move toggles/booleans simples para a área de ações */
@@ -479,6 +503,7 @@ declare class PraxisFilter implements OnInit, OnChanges, AfterViewInit, OnDestro
479
503
  gridSelectedMetas: FieldMetadata[];
480
504
  gridAlwaysVisibleMetas: FieldMetadata[];
481
505
  toggleMetas: FieldMetadata[];
506
+ activeEditableFieldName: string | null;
482
507
  advancedConfig?: FormConfig;
483
508
  displayedTags: FilterTag[];
484
509
  private savedTags;
@@ -540,6 +565,7 @@ declare class PraxisFilter implements OnInit, OnChanges, AfterViewInit, OnDestro
540
565
  private resolveSchemaPrefs;
541
566
  private domIdSeed;
542
567
  private componentKeyId;
568
+ private isPersistenceDisabled;
543
569
  private resolveConfigKey;
544
570
  getComponentKeyId(): string | null;
545
571
  private filterTagsKey;
@@ -554,6 +580,9 @@ declare class PraxisFilter implements OnInit, OnChanges, AfterViewInit, OnDestro
554
580
  private readonly global;
555
581
  private resolveRuntimeEnvironment;
556
582
  private getLogger;
583
+ get activeEditableFieldMeta(): FieldMetadata | null;
584
+ get activeEditableFieldLabel(): string | null;
585
+ isFieldAuthoringEnabled(): boolean;
557
586
  private buildFilterLogOptions;
558
587
  private isFilterDebugEnabled;
559
588
  private logFilterDebug;
@@ -563,6 +592,9 @@ declare class PraxisFilter implements OnInit, OnChanges, AfterViewInit, OnDestro
563
592
  private setSchemaLoading;
564
593
  private setActiveFiltersCount;
565
594
  private loadSavedTagsFromStorage;
595
+ private resolveInputDto;
596
+ private resolveInitialDto;
597
+ private syncFormsFromDto;
566
598
  ngOnInit(): Promise<void>;
567
599
  ngAfterViewInit(): void;
568
600
  onWindowResize(): void;
@@ -619,13 +651,23 @@ declare class PraxisFilter implements OnInit, OnChanges, AfterViewInit, OnDestro
619
651
  private isAllowedFilterControlType;
620
652
  private inferFilterControlType;
621
653
  private cloneAlwaysVisibleMetadataOverrides;
654
+ private cloneFieldMetadataOverrides;
622
655
  private sanitizeAlwaysVisibleMetadataOverrides;
623
656
  private sanitizeMetadataOverrideValue;
624
657
  private mergeAlwaysVisibleMetadata;
658
+ private mergeFieldMetadataOverride;
625
659
  ngDoCheck(): void;
626
660
  onAlwaysComponents(map: Map<string, any>): void;
627
661
  onSelectedComponents(map: Map<string, any>): void;
628
662
  onToggleComponents(map: Map<string, any>): void;
663
+ onFieldInteraction(event: Event): void;
664
+ openSelectedFieldEditor(): void;
665
+ private isLocalE2eAuthoringOptInEnabled;
666
+ private openFieldMetadataEditorInternal;
667
+ private applyFieldMetadataPatch;
668
+ private buildFieldMetadataEditorSeed;
669
+ private getEditableFieldMeta;
670
+ private resolveFieldNameFromEvent;
629
671
  onAdvancedReady(event: {
630
672
  formGroup: FormGroup<Record<string, any>>;
631
673
  }): void;
@@ -707,9 +749,12 @@ declare class PraxisFilter implements OnInit, OnChanges, AfterViewInit, OnDestro
707
749
  private isEditableElement;
708
750
  private focusQuick;
709
751
  static ɵfac: i0.ɵɵFactoryDeclaration<PraxisFilter, [null, null, null, null, null, null, null, null, null, null, null, null, { optional: true; }, { optional: true; }]>;
710
- 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; }; "enableCustomization": { "alias": "enableCustomization"; "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>;
752
+ 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; }; "enableCustomization": { "alias": "enableCustomization"; "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; }; "disablePersistence": { "alias": "disablePersistence"; "required": false; }; "i18n": { "alias": "i18n"; "required": false; }; "changeDebounceMs": { "alias": "changeDebounceMs"; "required": false; }; "showFilterSettings": { "alias": "showFilterSettings"; "required": false; }; "showAdvancedButton": { "alias": "showAdvancedButton"; "required": false; }; "showAddButton": { "alias": "showAddButton"; "required": false; }; "showClearButton": { "alias": "showClearButton"; "required": false; }; "showSearchButton": { "alias": "showSearchButton"; "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>;
711
753
  }
712
754
 
755
+ declare const PRAXIS_FILTER_COMPONENT_METADATA: ComponentDocMeta;
756
+ declare function providePraxisFilterMetadata(): Provider;
757
+
713
758
  type SchemaFieldHint = {
714
759
  name: string;
715
760
  label?: string;
@@ -721,6 +766,16 @@ type SchemaFieldHint = {
721
766
  optionValueKey?: string;
722
767
  enumValues?: string[];
723
768
  };
769
+ type PraxisDataQueryContextBridge = {
770
+ filters?: Record<string, unknown> | null;
771
+ sort?: string[] | null;
772
+ limit?: number | null;
773
+ page?: {
774
+ index?: number | null;
775
+ size?: number | null;
776
+ } | null;
777
+ meta?: Record<string, unknown> | null;
778
+ };
724
779
  type DataMode = 'remote' | 'local' | 'empty';
725
780
  type RowExpansionTrigger = 'icon' | 'row' | 'keyboard' | 'api' | 'restore';
726
781
  type RowExpansionReasonCode = 'user' | 'policy' | 'restore' | 'api';
@@ -822,6 +877,8 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
822
877
  autoOpenSettingsOnOutdated: boolean;
823
878
  crudContext: any;
824
879
  dslFunctionRegistry: FunctionRegistry<any> | null;
880
+ filterCriteria: Record<string, any>;
881
+ queryContext: PraxisDataQueryContextBridge | null;
825
882
  rowClick: EventEmitter<any>;
826
883
  rowDoubleClick: EventEmitter<any>;
827
884
  rowExpansionChange: EventEmitter<RowExpansionChangeEvent>;
@@ -855,7 +912,6 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
855
912
  pageIndex: number;
856
913
  pageSize: number;
857
914
  sortState: Sort;
858
- filterCriteria: any;
859
915
  visibleColumns: ColumnDefinition[];
860
916
  visibleDataColumnsForDrag: ColumnDefinition[];
861
917
  displayedColumns: string[];
@@ -973,7 +1029,6 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
973
1029
  private computedExpressionEvaluator;
974
1030
  private resizeObserver;
975
1031
  private removeViewportChangeListeners;
976
- private warnedMissingId;
977
1032
  private readonly warnedUnsupportedFeatures;
978
1033
  private warnedStrictCspStyleMode;
979
1034
  private fallbackLogger?;
@@ -1012,7 +1067,6 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
1012
1067
  private storageKey;
1013
1068
  private tableConfigKey;
1014
1069
  private filterConfigKey;
1015
- private warnMissingId;
1016
1070
  private ensureConfigDefaults;
1017
1071
  private setShowToolbar;
1018
1072
  private configureDslRuntime;
@@ -1225,6 +1279,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
1225
1279
  */
1226
1280
  private inferFieldTypeFromFieldName;
1227
1281
  private fetchData;
1282
+ private getEffectiveFilterCriteria;
1228
1283
  retryData(): void;
1229
1284
  reloadSchema(): void;
1230
1285
  refetch(): void;
@@ -1236,6 +1291,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
1236
1291
  * 3. format (data formatting like dates, numbers, currency)
1237
1292
  */
1238
1293
  getCellValue(rowData: any, column: ColumnDefinition): any;
1294
+ private resolveImplicitFormat;
1239
1295
  getCellClasses(rowData: any, column: ColumnDefinition): string[] | undefined;
1240
1296
  getCellNgStyle(rowData: any, column: ColumnDefinition): Record<string, string> | undefined;
1241
1297
  private resetComputedContextCache;
@@ -1501,7 +1557,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
1501
1557
  getRowMenuIcon(): string;
1502
1558
  ngOnDestroy(): void;
1503
1559
  static ɵfac: i0.ɵɵFactoryDeclaration<PraxisTable, [null, null, null, null, null, null, null, null, null, null, null, null, null, null, { optional: true; }, { optional: true; }, { optional: true; }]>;
1504
- 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; }; "enableCustomization": { "alias": "enableCustomization"; "required": false; }; "dense": { "alias": "dense"; "required": false; }; }, { "rowClick": "rowClick"; "rowDoubleClick": "rowDoubleClick"; "rowExpansionChange": "rowExpansionChange"; "rowAction": "rowAction"; "toolbarAction": "toolbarAction"; "bulkAction": "bulkAction"; "columnReorder": "columnReorder"; "columnReorderAttempt": "columnReorderAttempt"; "beforeDelete": "beforeDelete"; "afterDelete": "afterDelete"; "deleteError": "deleteError"; "beforeBulkDelete": "beforeBulkDelete"; "afterBulkDelete": "afterBulkDelete"; "bulkDeleteError": "bulkDeleteError"; "schemaStatusChange": "schemaStatusChange"; "metadataChange": "metadataChange"; "loadingStateChange": "loadingStateChange"; }, ["toolbar", "projectedFilter"], ["[advancedFilter]", "[toolbar]", "[advancedFilter]", "[toolbar]", "[advancedFilter]", "[toolbar]"], true, never>;
1560
+ static ɵcmp: i0.ɵɵComponentDeclaration<PraxisTable, "praxis-table", never, { "config": { "alias": "config"; "required": false; }; "resourcePath": { "alias": "resourcePath"; "required": false; }; "data": { "alias": "data"; "required": false; }; "tableId": { "alias": "tableId"; "required": true; }; "componentInstanceId": { "alias": "componentInstanceId"; "required": false; }; "title": { "alias": "title"; "required": false; }; "subtitle": { "alias": "subtitle"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "autoDelete": { "alias": "autoDelete"; "required": false; }; "notifyIfOutdated": { "alias": "notifyIfOutdated"; "required": false; }; "snoozeMs": { "alias": "snoozeMs"; "required": false; }; "autoOpenSettingsOnOutdated": { "alias": "autoOpenSettingsOnOutdated"; "required": false; }; "crudContext": { "alias": "crudContext"; "required": false; }; "dslFunctionRegistry": { "alias": "dslFunctionRegistry"; "required": false; }; "filterCriteria": { "alias": "filterCriteria"; "required": false; }; "queryContext": { "alias": "queryContext"; "required": false; }; "enableCustomization": { "alias": "enableCustomization"; "required": false; }; "dense": { "alias": "dense"; "required": false; }; }, { "rowClick": "rowClick"; "rowDoubleClick": "rowDoubleClick"; "rowExpansionChange": "rowExpansionChange"; "rowAction": "rowAction"; "toolbarAction": "toolbarAction"; "bulkAction": "bulkAction"; "columnReorder": "columnReorder"; "columnReorderAttempt": "columnReorderAttempt"; "beforeDelete": "beforeDelete"; "afterDelete": "afterDelete"; "deleteError": "deleteError"; "beforeBulkDelete": "beforeBulkDelete"; "afterBulkDelete": "afterBulkDelete"; "bulkDeleteError": "bulkDeleteError"; "schemaStatusChange": "schemaStatusChange"; "metadataChange": "metadataChange"; "loadingStateChange": "loadingStateChange"; }, ["toolbar", "projectedFilter"], ["[advancedFilter]", "[toolbar]", "[advancedFilter]", "[toolbar]", "[advancedFilter]", "[toolbar]"], true, never>;
1505
1561
  static ngAcceptInputType_enableCustomization: unknown;
1506
1562
  }
1507
1563
 
@@ -1697,9 +1753,11 @@ interface ExtendedColumnDefinition extends ColumnDefinition {
1697
1753
  }
1698
1754
  declare class ColumnsConfigEditorComponent implements OnInit, OnDestroy {
1699
1755
  private cdr;
1700
- readonly ratingAriaLabelPlaceholder = "Avalia\u00E7\u00E3o {value} de {max}";
1701
- readonly ratingRendererHint = "Renderer padronizado e somente leitura para uso em tabela. \u00CDcones customizados n\u00E3o s\u00E3o suportados neste contexto. Valores fracionados s\u00E3o normalizados em passos de 0.5 no grid. Use {value} e {max} no aria-label para sobrescrever o texto acess\u00EDvel completo; sem placeholders, o valor informado funciona como prefixo.";
1702
- readonly composeRatingRendererHint = "Compose/Rating usa o mesmo renderer can\u00F4nico de tabela e normaliza fra\u00E7\u00F5es em passos de 0.5. Use {value} e {max} para sobrescrever o texto acess\u00EDvel completo.";
1756
+ private readonly i18n;
1757
+ tx(key: string, fallback: string): string;
1758
+ readonly ratingAriaLabelPlaceholder: string;
1759
+ readonly ratingRendererHint: string;
1760
+ readonly composeRatingRendererHint: string;
1703
1761
  config: TableConfig;
1704
1762
  configChange: EventEmitter<_praxisui_core.TableConfigModern>;
1705
1763
  columnChange: EventEmitter<ColumnChange>;
@@ -1969,11 +2027,13 @@ interface BehaviorConfigChange {
1969
2027
  }
1970
2028
  declare class BehaviorConfigEditorComponent implements OnInit, OnDestroy, OnChanges {
1971
2029
  private fb;
2030
+ private readonly i18n;
2031
+ tx(key: string, fallback: string): string;
1972
2032
  readonly schemaOnlyLimitationsDocPath = "praxis-table.json-api.md#known-limitations-and-mismatches";
1973
- readonly multiSortSchemaOnlyTooltip = "behavior.sorting.multiSort \u00E9 schema-only no runtime atual. Consulte a documenta\u00E7\u00E3o de limita\u00E7\u00F5es.";
1974
- readonly columnFiltersSchemaOnlyTooltip = "behavior.filtering.columnFilters.enabled \u00E9 schema-only no runtime atual. Consulte a documenta\u00E7\u00E3o de limita\u00E7\u00F5es.";
1975
- readonly draggingRowsSchemaOnlyTooltip = "behavior.dragging.rows \u00E9 schema-only no runtime atual. Consulte a documenta\u00E7\u00E3o de limita\u00E7\u00F5es.";
1976
- readonly expansionSchemaOnlyTooltip = "behavior.expansion.* possui runtime P0A ativo para detail row schema-driven (sem virtualiza\u00E7\u00E3o).";
2033
+ readonly multiSortSchemaOnlyTooltip: string;
2034
+ readonly columnFiltersSchemaOnlyTooltip: string;
2035
+ readonly draggingRowsSchemaOnlyTooltip: string;
2036
+ readonly expansionSchemaOnlyTooltip: string;
1977
2037
  config: TableConfig;
1978
2038
  resourcePath?: string;
1979
2039
  forceClientStrategies: boolean;
@@ -2032,7 +2092,7 @@ interface ToolbarAction {
2032
2092
  icon?: string;
2033
2093
  type: 'button' | 'icon' | 'fab' | 'menu';
2034
2094
  color?: 'primary' | 'accent' | 'warn';
2035
- /** Aparência do botão Material: filled (flat), outlined (stroked), elevated (raised), text, tonal */
2095
+ /** Material button appearance: filled (flat), outlined (stroked), elevated (raised), text, tonal */
2036
2096
  appearance?: 'filled' | 'outlined' | 'elevated' | 'text' | 'tonal';
2037
2097
  action: string;
2038
2098
  position: 'start' | 'end';
@@ -2096,14 +2156,27 @@ declare class ToolbarActionsEditorComponent implements OnInit, OnDestroy, OnChan
2096
2156
  editingRowActionIndex: number | null;
2097
2157
  editingBulkActionIndex: number | null;
2098
2158
  readonly globalActionCatalog: GlobalActionSpec[];
2099
- readonly internalActionCatalog: InternalActionSpec[];
2159
+ get internalActionCatalog(): InternalActionSpec[];
2100
2160
  readonly customActionValue = "__custom__";
2101
2161
  readonly validShortcutScopes: ToolbarShortcutScope[];
2102
2162
  private readonly actionFieldDrafts;
2103
2163
  private readonly actionFieldErrors;
2104
2164
  private readonly warnedInvalidShortcutScopes;
2165
+ private readonly i18n;
2105
2166
  private destroy$;
2106
2167
  constructor(fb: FormBuilder, iconPicker: IconPickerService);
2168
+ tx(key: string, fallback: string): string;
2169
+ getGlobalActionSpecLabel(spec: {
2170
+ id?: string;
2171
+ label?: string;
2172
+ }): string;
2173
+ getGlobalActionSpecHint(spec: {
2174
+ id?: string;
2175
+ description?: string;
2176
+ param?: {
2177
+ hint?: string;
2178
+ };
2179
+ }): string;
2107
2180
  ngOnInit(): void;
2108
2181
  ngOnChanges(changes: SimpleChanges): void;
2109
2182
  ngOnDestroy(): void;
@@ -2138,6 +2211,12 @@ declare class ToolbarActionsEditorComponent implements OnInit, OnDestroy, OnChan
2138
2211
  getGlobalActionSchema(action: {
2139
2212
  action?: string;
2140
2213
  }): _praxisui_core.GlobalActionUiSchema | undefined;
2214
+ getSurfaceOpenActionPayload(action: {
2215
+ action?: string;
2216
+ }): SurfaceOpenPayload;
2217
+ onSurfaceOpenActionPayloadChange(action: {
2218
+ action?: string;
2219
+ }, payload: SurfaceOpenPayload, kind: 'toolbar' | 'row' | 'bulk'): void;
2141
2220
  shouldShowGlobalActionField(action: {
2142
2221
  action?: string;
2143
2222
  }, field: GlobalActionField): boolean;
@@ -2156,6 +2235,7 @@ declare class ToolbarActionsEditorComponent implements OnInit, OnDestroy, OnChan
2156
2235
  private getActionParamInfo;
2157
2236
  private parseMethodAndUrl;
2158
2237
  private stringifyJson;
2238
+ private normalizeSurfaceOpenPayload;
2159
2239
  private setActionFieldError;
2160
2240
  private clearActionFieldError;
2161
2241
  private collectGlobalActionFieldValues;
@@ -2210,10 +2290,12 @@ declare class MessagesLocalizationEditorComponent implements OnInit, OnDestroy {
2210
2290
  config: TableConfig;
2211
2291
  configChange: EventEmitter<_praxisui_core.TableConfigModern>;
2212
2292
  messagesLocalizationChange: EventEmitter<MessagesLocalizationChange>;
2293
+ private readonly i18n;
2213
2294
  messagesForm: FormGroup;
2214
2295
  isV2: boolean;
2215
2296
  private destroy$;
2216
2297
  constructor(fb: FormBuilder);
2298
+ tx(key: string, fallback: string): string;
2217
2299
  ngOnInit(): void;
2218
2300
  ngOnDestroy(): void;
2219
2301
  private initializeForm;
@@ -2527,7 +2609,9 @@ declare class PraxisTableConfigEditor implements OnInit, OnDestroy, SettingsValu
2527
2609
  private readonly panelData;
2528
2610
  private readonly crudService;
2529
2611
  private readonly panelRef;
2612
+ private readonly i18n;
2530
2613
  constructor(cdr: ChangeDetectorRef, configService: TableConfigService);
2614
+ tx(key: string, fallback: string): string;
2531
2615
  private isDebugLoggingEnabled;
2532
2616
  private debugLog;
2533
2617
  ngOnInit(): void;
@@ -2814,6 +2898,7 @@ declare class TableRulesEditorComponent implements OnChanges, OnInit, OnDestroy
2814
2898
  private dynamicForm;
2815
2899
  private crud?;
2816
2900
  private static runtimeRegistryInstanceCounter;
2901
+ private readonly i18n;
2817
2902
  config: TableConfig;
2818
2903
  resourcePath?: string;
2819
2904
  fields?: FieldDefinition[] | null;
@@ -2865,7 +2950,6 @@ declare class TableRulesEditorComponent implements OnChanges, OnInit, OnDestroy
2865
2950
  /** Log a focused view for a single field */
2866
2951
  private logSingleFieldMeta;
2867
2952
  private logFieldChoices;
2868
- i18nDefault: Record<string, string>;
2869
2953
  t(key: string): string;
2870
2954
  constructor(cdr: ChangeDetectorRef, registry: OperatorsRegistryService, compiler: RuleCompilerService, dynamicForm: DynamicFormService, crud?: GenericCrudService<any> | undefined);
2871
2955
  private configureDslRuntime;
@@ -3214,5 +3298,5 @@ interface CapabilityCatalog extends AiCapabilityCatalog {
3214
3298
  }
3215
3299
  declare const TABLE_COMPONENT_AI_CAPABILITIES: CapabilityCatalog;
3216
3300
 
3217
- export { BOOLEAN_PRESETS, BehaviorConfigEditorComponent, CURRENCY_PRESETS, ColumnsConfigEditorComponent, DATE_PRESETS, DataFormatterComponent, DataFormattingService, 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, buildTableApplyPlan, createTableAuthoringDocument, getActionId, getEnum, getTableCapabilities, hasJsonKey, jsonPathGet, jsonPathMatches, normalizeTableAuthoringDocument, parseLegacyOrTableDocument, providePraxisTableMetadata, registerDateDslFunctions, registerJsonDslFunctions, serializeTableAuthoringDocument, toCanonicalTableConfig, validateTableAuthoringDocument };
3218
- 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, EditorDiagnostic, EditorDocument, FieldSchema, FilterConfig, FilterTag, FormatPreset, FormatterConfig, FormulaDefinition, FormulaParameterSchema, FormulaParams, FormulaTemplate, FormulaType, I18n, JsonEditorEvent, JsonValidationResult, MessagesLocalizationChange, NestedPropertyParams, NumberFormatterOptions, PercentageFormatterOptions, ResourcePathIntent, RowAction, RowExpansionChangeBase, RowExpansionChangeEvent, RowExpansionReasonCode, RowExpansionTrigger, StringFormatterOptions, TableApplyPlan, TableAuthoringDocument, TableBindings, Capability as TableComponentCapability, CapabilityCatalog as TableComponentCapabilityCatalog, CapabilityCategory as TableComponentCapabilityCategory, ValueKind as TableComponentValueKind, TableHorizontalScroll, TableProjectionContext, TableRuntimeContext, TableValidationContext, ToolbarAction, ToolbarActionsChange, ValueKind$1 as ValueKind, ValueMappingPair };
3301
+ export { BOOLEAN_PRESETS, BehaviorConfigEditorComponent, CURRENCY_PRESETS, ColumnsConfigEditorComponent, DATE_PRESETS, DataFormatterComponent, DataFormattingService, FORMULA_TEMPLATES, FilterConfigService, FilterSettingsComponent, FormulaGeneratorService, JsonConfigEditorComponent, MessagesLocalizationEditorComponent, NUMBER_PRESETS, PERCENTAGE_PRESETS, PRAXIS_FILTER_COMPONENT_METADATA, PRAXIS_TABLE_COMPONENT_METADATA, PraxisFilter, PraxisTable, PraxisTableConfigEditor, PraxisTableToolbar, STRING_PRESETS, TABLE_AI_CAPABILITIES, TABLE_COMPONENT_AI_CAPABILITIES, TASK_PRESETS, TableDefaultsProvider, TableRulesEditorComponent, ToolbarActionsEditorComponent, ValueMappingEditorComponent, VisualFormulaBuilderComponent, buildTableApplyPlan, createTableAuthoringDocument, getActionId, getEnum, getTableCapabilities, hasJsonKey, jsonPathGet, jsonPathMatches, normalizeTableAuthoringDocument, parseLegacyOrTableDocument, providePraxisFilterMetadata, providePraxisTableMetadata, registerDateDslFunctions, registerJsonDslFunctions, serializeTableAuthoringDocument, toCanonicalTableConfig, validateTableAuthoringDocument };
3302
+ export type { ActionLike, ArithmeticParams, BehaviorConfigChange, BooleanFormatterOptions, BulkAction, Capability$1 as Capability, CapabilityCatalog$1 as CapabilityCatalog, CapabilityCategory$1 as CapabilityCategory, ColumnChange, ColumnDataType$1 as ColumnDataType, ConcatenationParams, ConditionalMappingParams, CurrencyFormatterOptions, DataFormattingOptions, DataMode, DateFormatterOptions, DefaultValueParams, EditorDiagnostic, EditorDocument, FieldSchema, FilterConfig, FilterTag, FormatPreset, FormatterConfig, FormulaDefinition, FormulaParameterSchema, FormulaParams, FormulaTemplate, FormulaType, I18n, JsonEditorEvent, JsonValidationResult, MessagesLocalizationChange, NestedPropertyParams, NumberFormatterOptions, PercentageFormatterOptions, ResourcePathIntent, RowAction, RowExpansionChangeBase, RowExpansionChangeEvent, RowExpansionReasonCode, RowExpansionTrigger, StringFormatterOptions, TableApplyPlan, TableAuthoringDocument, TableBindings, Capability as TableComponentCapability, CapabilityCatalog as TableComponentCapabilityCatalog, CapabilityCategory as TableComponentCapabilityCategory, ValueKind as TableComponentValueKind, TableHorizontalScroll, TableProjectionContext, TableRuntimeContext, TableValidationContext, ToolbarAction, ToolbarActionsChange, ValueKind$1 as ValueKind, ValueMappingPair };
package/package.json CHANGED
@@ -1,16 +1,16 @@
1
1
  {
2
2
  "name": "@praxisui/table",
3
- "version": "3.0.0-beta.0",
3
+ "version": "3.0.0-beta.10",
4
4
  "description": "Advanced data table for Angular (Praxis UI) with editing, filtering, sorting, virtualization, and settings panel integration.",
5
5
  "peerDependencies": {
6
6
  "@angular/common": "^20.0.0",
7
7
  "@angular/core": "^20.0.0",
8
- "@praxisui/core": "^3.0.0-beta.0",
9
- "@praxisui/dynamic-fields": "^3.0.0-beta.0",
10
- "@praxisui/dynamic-form": "^3.0.0-beta.0",
11
- "@praxisui/metadata-editor": "^3.0.0-beta.0",
12
- "@praxisui/settings-panel": "^3.0.0-beta.0",
13
- "@praxisui/table-rule-builder": "^3.0.0-beta.0"
8
+ "@praxisui/core": "^3.0.0-beta.10",
9
+ "@praxisui/dynamic-fields": "^3.0.0-beta.10",
10
+ "@praxisui/dynamic-form": "^3.0.0-beta.10",
11
+ "@praxisui/metadata-editor": "^3.0.0-beta.10",
12
+ "@praxisui/settings-panel": "^3.0.0-beta.10",
13
+ "@praxisui/table-rule-builder": "^3.0.0-beta.10"
14
14
  },
15
15
  "dependencies": {
16
16
  "tslib": "^2.3.0"
@@ -1 +0,0 @@
1
- {"version":3,"file":"praxisui-table-filter-drawer-adapter.mjs","sources":["../../../projects/praxis-table/filter-drawer-adapter/src/filter-drawer-adapter.ts","../../../projects/praxis-table/filter-drawer-adapter/praxisui-table-filter-drawer-adapter.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport type { FormConfig } from '@praxisui/core';\n\n/**\n * Configuração de abertura do Advanced Filter em gaveta pelo host.\n *\n * Notas para hosts que exibem botão \"Salvar como atalho\":\n * - Exiba a ação apenas quando `allowSaveTags === true`.\n * - Para habilitar o botão, verifique se há ao menos um filtro efetivo no DTO (campos não vazios).\n * - Monte o DTO para salvar mesclando `initialDto` e o valor atual do formulário (`lastValue`),\n * e limpe chaves com valores vazios ('' | null | undefined) antes de chamar `onSaveShortcut(dto)`.\n */\nexport interface FilterDrawerOpenConfig {\n resourcePath: string;\n formId: string;\n config: FormConfig;\n initialDto?: Record<string, any>;\n title?: string;\n onSubmit(dto: Record<string, any>): void;\n onClose?(): void;\n /** Permite que a UI do host exiba ação de salvar atalho (opcional, retrocompatível) */\n allowSaveTags?: boolean;\n /** Rótulo i18n para o botão de salvar atalho (opcional) */\n i18nSaveAsShortcut?: string;\n /** Callback disparado pelo host com o DTO atual quando o usuário optar por salvar um atalho */\n onSaveShortcut?: (dto: Record<string, any>) => void;\n}\n\nexport interface FilterDrawerAdapter {\n open(config: FilterDrawerOpenConfig): Promise<void> | void;\n}\n\nfunction getFilterDrawerAdapterToken(): InjectionToken<FilterDrawerAdapter> {\n const registryKey = '__PAX_FILTER_DRAWER_ADAPTER_TOKEN__';\n const globalRegistry = globalThis as typeof globalThis & {\n [registryKey]?: InjectionToken<FilterDrawerAdapter>;\n };\n if (!globalRegistry[registryKey]) {\n globalRegistry[registryKey] = new InjectionToken<FilterDrawerAdapter>('FILTER_DRAWER_ADAPTER');\n }\n return globalRegistry[registryKey];\n}\n\nexport const FILTER_DRAWER_ADAPTER = getFilterDrawerAdapterToken();\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;AAgCA,SAAS,2BAA2B,GAAA;IAClC,MAAM,WAAW,GAAG,qCAAqC;IACzD,MAAM,cAAc,GAAG,UAEtB;AACD,IAAA,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE;QAChC,cAAc,CAAC,WAAW,CAAC,GAAG,IAAI,cAAc,CAAsB,uBAAuB,CAAC;IAChG;AACA,IAAA,OAAO,cAAc,CAAC,WAAW,CAAC;AACpC;AAEO,MAAM,qBAAqB,GAAG,2BAA2B;;AC3ChE;;AAEG;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"praxisui-table-filter-form-dialog-host.component-C2rQnHE1.mjs","sources":["../../../projects/praxis-table/src/lib/components/praxis-filter/filter-form-dialog-host.component.ts"],"sourcesContent":["import { Component, Inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatDialogModule, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatIconModule } from '@angular/material/icon';\nimport { FormGroup } from '@angular/forms';\nimport { PraxisFilterForm } from '@praxisui/dynamic-form';\n\n@Component({\n selector: 'praxis-filter-form-dialog-host',\n standalone: true,\n imports: [CommonModule, MatDialogModule, MatButtonModule, MatProgressBarModule, MatIconModule, PraxisFilterForm],\n template: `\n <div mat-dialog-title class=\"pfx-dialog-title\" id=\"filterDialogTitle\">\n <div class=\"pfx-dialog-title-text\">\n <mat-icon>tune</mat-icon>\n <span>{{ data.title || 'Filtro avançado' }}</span>\n </div>\n <button mat-icon-button type=\"button\" class=\"pfx-dialog-close\" (click)=\"close()\"\n [attr.aria-label]=\"data.i18n?.cancel || 'Fechar'\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n <mat-dialog-content class=\"pfx-filter-dialog-content\" aria-labelledby=\"filterDialogTitle\">\n <mat-progress-bar *ngIf=\"data?.schemaLoading\" mode=\"indeterminate\"></mat-progress-bar>\n <praxis-filter-form\n *ngIf=\"data?.config\"\n [formId]=\"data.formId\"\n [resourcePath]=\"data.resourcePath\"\n [mode]=\"'edit'\"\n [config]=\"data.config\"\n (formReady)=\"onReady($event)\"\n (valueChange)=\"onChange($event)\"\n (validityChange)=\"onValidity($event)\"\n ></praxis-filter-form>\n <p *ngIf=\"!data?.config && !data?.schemaLoading\" class=\"pfx-empty-state\">{{ data.i18n?.noData || 'Nenhum dado' }}</p>\n </mat-dialog-content>\n <mat-dialog-actions align=\"end\" class=\"pfx-dialog-actions\">\n <button mat-button type=\"button\"\n *ngIf=\"data?.allowSaveTags\"\n [disabled]=\"!canSave\"\n (click)=\"saveShortcut()\">\n {{ data.i18n?.saveAsShortcut || 'Salvar como atalho' }}\n </button>\n <button mat-stroked-button type=\"button\" (click)=\"close()\">{{ data.i18n?.cancel || 'Cancelar' }}</button>\n <button mat-flat-button color=\"primary\" (click)=\"apply()\" [disabled]=\"!valid\">\n {{ data.i18n?.apply || 'Aplicar' }}\n </button>\n </mat-dialog-actions>\n `,\n styles: [`\n .pfx-dialog-title {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n padding-right: 8px;\n }\n .pfx-dialog-title-text {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n color: var(--md-sys-color-on-surface);\n }\n .pfx-dialog-close {\n margin-left: auto;\n }\n .pfx-filter-dialog-content {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding-top: 8px;\n }\n .pfx-empty-state {\n margin: 8px 0 0;\n color: var(--md-sys-color-on-surface-variant);\n }\n .pfx-dialog-actions {\n padding: var(--pdx-dialog-actions-padding, 12px 24px 16px);\n border-top: 1px solid var(--md-sys-color-outline-variant);\n background: transparent;\n display: flex;\n align-items: center;\n gap: 8px;\n }\n `],\n})\nexport class FilterFormDialogHostComponent {\n valid = true;\n private lastValue: any = {};\n private formGroup: FormGroup<Record<string, any>> | null = null;\n canSave = false;\n constructor(\n @Inject(MAT_DIALOG_DATA)\n public data: {\n formId: string;\n resourcePath: string;\n config: any;\n title?: string;\n schemaLoading?: boolean;\n initialDto?: Record<string, any>;\n allowSaveTags?: boolean;\n i18n?: { saveAsShortcut?: string; cancel?: string; apply?: string; noData?: string };\n onSaveShortcut?: (dto: Record<string, any>) => void;\n },\n private ref: MatDialogRef<FilterFormDialogHostComponent>,\n ) {}\n\n onReady(ev: { formGroup: any }): void {\n try {\n this.formGroup = (ev?.formGroup as FormGroup<Record<string, any>>) || null;\n const dto = this.data?.initialDto || {};\n if (ev?.formGroup && dto && Object.keys(dto).length) {\n ev.formGroup.patchValue(dto, { emitEvent: false });\n }\n this.lastValue = this.formGroup?.getRawValue?.() ?? this.lastValue;\n this.updateCanSave();\n } catch {}\n }\n onChange(ev: { formData: Record<string, any> }): void {\n this.lastValue = ev?.formData ?? {};\n this.updateCanSave();\n }\n onValidity(v: boolean): void {\n this.valid = v;\n this.updateCanSave();\n }\n apply(): void {\n const formData =\n this.formGroup?.getRawValue?.() ??\n this.lastValue ??\n this.data?.initialDto ??\n {};\n this.ref.close({ formData });\n }\n close(): void { this.ref.close(); }\n\n private clean(obj: Record<string, any> | undefined | null): Record<string, any> {\n const out: Record<string, any> = {};\n Object.keys(obj || {}).forEach((k) => {\n const v = (obj as any)[k];\n if (v !== '' && v !== null && v !== undefined) out[k] = v;\n });\n return out;\n }\n private buildDtoForSave(): Record<string, any> {\n const base = this.data?.initialDto || {};\n const merged = { ...base, ...(this.lastValue || {}) };\n return this.clean(merged);\n }\n private updateCanSave(): void {\n this.canSave = Object.keys(this.buildDtoForSave() || {}).length > 0;\n }\n saveShortcut(): void {\n try {\n const dto = this.buildDtoForSave();\n if (!Object.keys(dto).length) return;\n this.data?.onSaveShortcut?.(dto);\n } catch {}\n }\n}\n"],"names":["i2","i4"],"mappings":"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"}