import { ComponentRef } from '@angular/core';
import { Observable, Subject } from 'rxjs';
export declare enum ElTrigger {
    NOOP = "noop",
    CLICK = "click",
    HOVER = "hover",
    HINT = "hint",
    FOCUS = "focus"
}
/**
 * Provides entity with two event stream: show and hide.
 * Each stream provides different events depends on implementation.
 * We have three main trigger strategies: click, hint and hover.
 * */
export interface ElTriggerStrategy {
    show$: Observable<never | Event>;
    hide$: Observable<never | Event>;
    destroy(): any;
}
/**
 * TODO maybe we have to use renderer.listen instead of observableFromEvent?
 * Renderer provides capability use it in service worker, ssr and so on.
 * */
export declare abstract class ElTriggerStrategyBase implements ElTriggerStrategy {
    protected document: Document;
    protected host: HTMLElement;
    protected container: () => ComponentRef<any>;
    destroy(): void;
    protected destroyed$: Subject<{}>;
    protected isNotOnHostOrContainer(event: Event): boolean;
    protected isOnHostOrContainer(event: Event): boolean;
    protected isOnHost({ target }: Event): boolean;
    protected isOnContainer({ target }: Event): boolean;
    abstract show$: Observable<Event>;
    abstract hide$: Observable<Event>;
    constructor(document: Document, host: HTMLElement, container: () => ComponentRef<any>);
}
/**
 * Creates show and hide event streams.
 * Fires toggle event when the click was performed on the host element.
 * Fires close event when the click was performed on the document but
 * not on the host or container.
 * */
export declare class ElClickTriggerStrategy extends ElTriggerStrategyBase {
    protected click$: Observable<[boolean, Event]>;
    readonly show$: Observable<Event>;
    readonly hide$: Observable<Event>;
}
/**
 * Creates show and hide event streams.
 * Fires open event when a mouse hovers over the host element and stay over at least 100 milliseconds.
 * Fires close event when the mouse leaves the host element and stops out of the host and popover container.
 * */
export declare class ElHoverTriggerStrategy extends ElTriggerStrategyBase {
    show$: Observable<Event>;
    hide$: Observable<Event>;
}
/**
 * Creates show and hide event streams.
 * Fires open event when a mouse hovers over the host element and stay over at least 100 milliseconds.
 * Fires close event when the mouse leaves the host element.
 * */
export declare class ElHintTriggerStrategy extends ElTriggerStrategyBase {
    show$: Observable<Event>;
    hide$: Observable<Event>;
}
/**
 * Creates show and hide event streams.
 * Fires open event when a focus is on the host element and stay over at least 100 milliseconds.
 * Fires close event when the focus leaves the host element.
 * */
export declare class ElFocusTriggerStrategy extends ElTriggerStrategyBase {
    protected focusOut$: Observable<Event>;
    protected clickIn$: Observable<Event>;
    protected clickOut$: Observable<Event>;
    protected tabKeyPress$: Observable<Event>;
    show$: Observable<Event>;
    hide$: Observable<Event>;
}
/**
 * Creates empty show and hide event streams.
 * */
export declare class ElNoopTriggerStrategy extends ElTriggerStrategyBase {
    show$: Observable<Event>;
    hide$: Observable<Event>;
}
export declare class ElTriggerStrategyBuilderService {
    protected _document: any;
    protected _host: HTMLElement;
    protected _container: () => ComponentRef<any>;
    protected _trigger: ElTrigger;
    constructor(_document: any);
    trigger(trigger: ElTrigger): this;
    host(host: HTMLElement): this;
    container(container: () => ComponentRef<any>): this;
    build(): ElTriggerStrategy;
}
