import { BaseGridPlugin, GridElement } from '../../core/plugin/base-plugin';
import { ColumnState } from '../../core/types';
import { FilterConfig, FilterModel } from './types';
/**
 * Filtering Plugin for tbw-grid
 *
 * @example
 * ```ts
 * new FilteringPlugin({ enabled: true, debounceMs: 300 })
 * ```
 */
export declare class FilteringPlugin extends BaseGridPlugin<FilterConfig> {
    readonly name = "filtering";
    readonly styles: string;
    protected get defaultConfig(): Partial<FilterConfig>;
    private filters;
    private cachedResult;
    private cacheKey;
    private openPanelField;
    private panelElement;
    private panelAnchorElement;
    private searchText;
    private excludedValues;
    private panelAbortController;
    private globalStylesInjected;
    private static readonly LIST_ITEM_HEIGHT;
    private static readonly LIST_OVERSCAN;
    private static readonly LIST_BYPASS_THRESHOLD;
    /**
     * Sync excludedValues map from a filter model (for set filters).
     */
    private syncExcludedValues;
    attach(grid: GridElement): void;
    detach(): void;
    processRows(rows: readonly unknown[]): unknown[];
    afterRender(): void;
    /**
     * Set a filter on a specific field.
     * Pass null to remove the filter.
     */
    setFilter(field: string, filter: Omit<FilterModel, 'field'> | null): void;
    /**
     * Get the current filter for a field.
     */
    getFilter(field: string): FilterModel | undefined;
    /**
     * Get all active filters.
     */
    getFilters(): FilterModel[];
    /**
     * Alias for getFilters() to match functional API naming.
     */
    getFilterModel(): FilterModel[];
    /**
     * Set filters from an array (replaces all existing filters).
     */
    setFilterModel(filters: FilterModel[]): void;
    /**
     * Clear all filters.
     */
    clearAllFilters(): void;
    /**
     * Clear filter for a specific field.
     */
    clearFieldFilter(field: string): void;
    /**
     * Check if a field has an active filter.
     */
    isFieldFiltered(field: string): boolean;
    /**
     * Get the count of filtered rows (from cache).
     */
    getFilteredRowCount(): number;
    /**
     * Get all active filters (alias for getFilters).
     */
    getActiveFilters(): FilterModel[];
    /**
     * Get unique values for a field (for set filter dropdowns).
     * Uses sourceRows to include all values regardless of current filter.
     */
    getUniqueValues(field: string): unknown[];
    /**
     * Inject global styles for filter panel (rendered in document.body)
     */
    private injectGlobalStyles;
    /**
     * Toggle the filter panel for a field
     */
    private toggleFilterPanel;
    /**
     * Render filter panel content with given values
     */
    private renderPanelContent;
    /**
     * Setup click-outside handler to close the panel
     */
    private setupPanelCloseHandler;
    /**
     * Close the filter panel
     */
    private closeFilterPanel;
    /** Cache for CSS anchor positioning support check */
    private static supportsAnchorPositioning;
    /**
     * Check if browser supports CSS Anchor Positioning
     */
    private static checkAnchorPositioningSupport;
    /**
     * Position the panel below the header cell
     * Uses CSS Anchor Positioning if supported, falls back to JS positioning
     */
    private positionPanel;
    /**
     * Render the default filter panel content
     */
    private renderDefaultFilterPanel;
    /**
     * Apply a set filter (exclude values)
     */
    private applySetFilter;
    /**
     * Apply a text filter
     */
    private applyTextFilter;
    /**
     * Internal method to apply filters (sync or async based on config)
     */
    private applyFiltersInternal;
    /**
     * Return filter state for a column if it has an active filter.
     */
    getColumnState(field: string): Partial<ColumnState> | undefined;
    /**
     * Apply filter state from column state.
     */
    applyColumnState(field: string, state: ColumnState): void;
}
//# sourceMappingURL=FilteringPlugin.d.ts.map