import { ContextEvent as ContextRequestEvent, Context, ContextType } from '@lit/context';
import { ValueNotifier } from '../../node_modules/@lit/context/lib/value-notifier.js';
declare global {
    interface HTMLElementEventMap {
        /**
         * A 'context-provider' event can be emitted by any element which hosts
         * a context provider to indicate it is available for use.
         */
        "context-provider": ContextProviderEvent<Context<unknown, unknown>>;
    }
}
export declare class ContextProviderEvent<C extends Context<unknown, unknown>> extends Event {
    readonly context: C;
    readonly contextTarget: Element;
    /**
     *
     * @param context the context which this provider can provide
     * @param contextTarget the original context target of the provider
     */
    constructor(context: C, contextTarget: Element);
}
export interface Options<C extends Context<unknown, unknown>> {
    context: C;
    initialValue?: ContextType<C>;
}
/**
 * A ReactiveController which adds context provider behavior to a
 * custom element.
 *
 * This controller simply listens to the `context-request` event when
 * the host is connected to the DOM and registers the received callbacks
 * against its observable Context implementation.
 */
export declare class WyContextProvider<T extends Context<unknown, unknown>> extends ValueNotifier<ContextType<T>> {
    protected readonly host: HTMLElement;
    private readonly context;
    protected isAttached: boolean;
    constructor(host: HTMLElement, options: Options<T>);
    /** @deprecated Use new ContextProvider(host, options) */
    constructor(host: HTMLElement, context: T, initialValue?: ContextType<T>);
    onContextRequest: (ev: ContextRequestEvent<Context<unknown, unknown>>) => void;
    /**
     * When we get a provider request event, that means a child of this element
     * has just woken up. If it's a provider of our context, then we may need to
     * re-parent our subscriptions, because is a more specific provider than us
     * for its subtree.
     */
    onProviderRequest: (ev: ContextProviderEvent<Context<unknown, unknown>>) => void;
    private attachListeners;
    detachListeners(): void;
    dispatchWhenConnected(): void;
}
//# sourceMappingURL=context-proxy-provider.d.ts.map