import { EventEmitter, OnChanges, OnDestroy, SimpleChanges, QueryList } from '@angular/core'; import { FormBuilder, FormGroup } from '@angular/forms'; import { MatDatepickerInputEvent } from '@angular/material/datepicker'; import { DynamicSelectFieldConfig } from '../../dynamic-select/dynamic-select-field.component'; import { DynamicSelectFieldComponent } from '../../dynamic-select/dynamic-select-field.component'; import * as i0 from "@angular/core"; declare type FilterType = 'select' | 'date-range-picker'; export interface DynamicFilterOption { id?: number | string; name?: string; value?: any; label?: string; } export interface DynamicFilterItem { label: string; placeholder?: string; type: FilterType; key: string; opens?: 'left' | 'right' | 'center'; drops?: 'down' | 'up' | 'auto'; options?: DynamicFilterOption[]; multiple?: boolean; disabled?: boolean; hidden?: boolean; searchable?: boolean; optionStyle?: 'checkmark' | 'checkbox'; showSelectAll?: boolean; selectAllLabel?: string; selectedValue?: any | any[]; serverSearch?: boolean; /** More results available server-side for infinite scroll */ hasMore?: boolean; /** External loading state for async fetching */ isLoading?: boolean; /** Callback when search text changes (server mode) */ onSearch?: (query: string) => void; /** Callback when more data is requested (infinite scroll) */ onLoadMore?: (query?: string) => void; selectedStartDate?: Date | string; selectedEndDate?: Date | string; onDateChange?: (value: { start: Date | null; end: Date | null; }, event?: MatDatepickerInputEvent | Event) => void; parentEl?: string | HTMLElement; } export interface DynamicFilterValues { [key: string]: any; } export declare class DynamicFilterComponent implements OnChanges, OnDestroy { private readonly fb; config: DynamicFilterItem[]; model: DynamicFilterValues; showFilterPanel: boolean; buttonLayout: 'left' | 'right' | 'bottom'; filtersApplied: EventEmitter; filtersChanged: EventEmitter; resetAction: EventEmitter; onApplyFilterClick: EventEmitter; onResetFilterClick: EventEmitter; form: FormGroup; maxDate: Date; searchTextByKey: Record; private selectOutsideCleanup; hasSelectedFilters: boolean; selectComponents?: QueryList; private formValueChangesSub?; constructor(fb: FormBuilder); ngOnChanges(changes: SimpleChanges): void; ngOnDestroy(): void; onDateChange(event: MatDatepickerInputEvent | Event, key: string): void; ngxDateRangeByKey: Record; ngxRanges: any; ngxLocale: { customRangeLabel: string; }; disableFutureDates: (m: any) => boolean; onNgxDatesUpdated(e: any, key: string): void; private buildForm; onSelectOpenedChange(opened: boolean, select: any): void; onSearch(key: string, text: string): void; filteredOptions(item: DynamicFilterItem): DynamicFilterOption[]; getDateGroup(key: string): FormGroup; getSelectConfig(item: DynamicFilterItem): DynamicSelectFieldConfig; apply(): void; reset(): void; /** Close any open MatSelect panels before primary actions to avoid double-click issues */ preparePrimaryAction(): void; private closeAllOpenSelects; private serialize; private resolveInitialSelectValue; private coerceToSingleValue; private getInitialDateRangeValue; private normalizeDateValue; private invokeDateRangeChange; applyPresetToGroup(key: string, presetKey: 'today' | 'last7days' | 'last30days' | 'last90days' | 'thismonth' | 'lastmonth'): void; private getPresetDates; private startOfDay; private endOfDay; private startOfMonth; private endOfMonth; private buildNgxRanges; onDaterangepickerChange(event: { startDate: Date | null; endDate: Date | null; }, key: string): void; onDaterangepickerApply(event: { startDate: Date | null; endDate: Date | null; }, key: string): void; getDaterangepickerRanges(): any; getDateValidationError(key: string): string | null; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } export {};