import { Signal, PipeTransform } from '@angular/core';
import { filter } from '../../core/filter/filter';
import type { Expression, FilterOptions } from '../../types';
export declare class FilterService<T> {
    private dataSignal;
    private expressionSignal;
    private optionsSignal;
    readonly filtered: Signal<T[]>;
    readonly isFiltering: Signal<boolean>;
    setData: (data: T[]) => void;
    setExpression: (expr: Expression<T> | null) => void;
    setOptions: (opts: FilterOptions) => void;
    reset: () => void;
}
export declare class FilterPipe implements PipeTransform {
    transform<T>(data: T[] | null | undefined, expr: Expression<T>, opts?: FilterOptions): T[];
}
export declare class DebouncedFilterService<T> {
    private dataSignal;
    private expressionSignal;
    private optionsSignal;
    private timer;
    private pendingSignal;
    readonly filtered: Signal<T[]>;
    readonly isFiltering: Signal<boolean>;
    readonly isPending: Signal<boolean>;
    setData: (data: T[]) => void;
    setOptions: (opts: FilterOptions) => void;
    setExpressionDebounced: (expr: Expression<T> | null, delay?: number) => void;
    reset: () => void;
}
export declare class PaginatedFilterService<T> {
    private dataSignal;
    private expressionSignal;
    private optionsSignal;
    private pageSignal;
    private pageSizeSignal;
    readonly filtered: Signal<T[]>;
    readonly isFiltering: Signal<boolean>;
    readonly currentPage: Signal<number>;
    readonly pageSize: Signal<number>;
    readonly paginatedResults: Signal<T[]>;
    readonly totalPages: Signal<number>;
    setData: (data: T[]) => void;
    setExpression: (expr: Expression<T> | null) => void;
    setOptions: (opts: FilterOptions) => void;
    setPage: (page: number) => void;
    setPageSize: (size: number) => void;
    nextPage: () => void;
    prevPage: () => void;
    reset: () => void;
}
export { filter };
