import { RenderProp } from '../util/renderProp';
import { OptionalControl } from '../input/types';
import { Input } from '../input';
import { Key, Keyed } from '@synnaxlabs/x';
import { ReactElement } from 'react';

export interface UseFilterProps extends OptionalControl<string> {
    debounce?: number;
    transformBefore?: (term: string) => string;
}
export interface FilterProps extends UseFilterProps {
    children?: RenderProp<Input.Control<string>>;
}
export declare const useFilter: <K extends Key = Key, E extends Keyed<K> = Keyed<K>>({ debounce, value, onChange, transformBefore, }: UseFilterProps) => Input.Control<string>;
/**
 * Implements in-browser filtration for a list.
 *
 * @param props - The props for the List.Search component.
 * @param props.children - A custom input render prop for the search functionality. This
 * must implement the InputControl<string> interface.
 * @param opts - Custom options for the search functionality. See the {@link fuse.IFuseOptions}
 * interface for more details.
 */
export declare const Filter: <K extends Key = Key, E extends Keyed<K> = Keyed<K>>({ children, ...props }: FilterProps) => ReactElement | null;
export interface Searcher<K extends Key = Key, E extends Keyed<K> = Keyed<K>> {
    search: (term: string) => E[];
}
//# sourceMappingURL=Filter.d.ts.map