/**
 * FilteredEventEmitter - A view of an event emitter that only passes events matching a filter
 *
 * Created via TypedEventEmitter.filter() to provide a scoped view of events.
 */
import type { BaseEvent, EventListener, ListenerOptions, EventFilter } from './types.js';
import type { TypedEventEmitter } from './typed-emitter.js';
/**
 * FilteredEventEmitter - A view of an event emitter that only passes events matching a filter
 */
export declare class FilteredEventEmitter<TEvents extends Record<string, BaseEvent>, K extends keyof TEvents> {
    private source;
    private type;
    private predicate;
    private listenerIds;
    constructor(source: TypedEventEmitter<TEvents>, type: K, predicate: EventFilter<TEvents[K]>);
    /**
     * Add a listener that only receives filtered events
     */
    on(listener: EventListener<TEvents[K]>, options?: Omit<ListenerOptions<TEvents[K]>, 'filter'>): string;
    /**
     * Add a one-time listener that only receives filtered events
     */
    once(listener: EventListener<TEvents[K]>, options?: Omit<ListenerOptions<TEvents[K]>, 'filter' | 'once'>): string;
    /**
     * Remove a specific listener
     */
    off(listenerId: string): boolean;
    /**
     * Remove all listeners created through this filtered emitter
     */
    offAll(): void;
    /**
     * Wait for a filtered event
     */
    waitFor(options?: {
        timeout?: number;
    }): Promise<TEvents[K]>;
}
