import { ComponentInterface, EventEmitter } from '../../stencil-public-runtime';
import { HTMLStencilElement } from '../../stencil-public-runtime';
import { BalBreakpointObserver, BalBreakpoints } from '../../utils/breakpoints';
import { Loggable, LogInstance } from '../../utils/log';
export interface PopoverPresentOptions {
    force: boolean;
}
export declare class Popover implements ComponentInterface, Loggable, BalBreakpointObserver {
    private popoverId;
    private popperInstance;
    private backdropElement?;
    el: HTMLStencilElement;
    isTouch: boolean;
    isInMainNav: boolean;
    backdropHeight: number;
    log: LogInstance;
    createLogger(log: LogInstance): void;
    /**
     * PUBLIC PROPERTY API
     * ------------------------------------------------------
     */
    /**
     * If `true` the popover automatically opens on a click
     */
    autoTrigger: boolean;
    /**
     * If `true` the popover has max-width on tablet and desktop. On mobile it uses the whole viewport.
     */
    hint: boolean;
    /**
     * If `true` the popover shows on hover
     */
    hover: boolean;
    /**
     * If `true` a little arrow is added, which points to the trigger element
     */
    arrow: boolean;
    /**
     * If `true` a backdrop is added
     */
    backdrop: boolean;
    /**
     * If `true` the popover is shown as a tooltip
     */
    tooltip: boolean;
    /**
     * Define the offset of the popover content.
     */
    offsetX: number;
    /**
     * Define the offset of the popover content.
     */
    offsetY: number;
    /**
     * Define padding of the overflow
     */
    padding: number;
    /**
     * Define the position of the popover content.
     */
    position: BalProps.BalPopoverPlacement;
    /**
     * If `true` the popover content is open.
     */
    active: boolean;
    /**
     * If `true` there will be no backdrop
     */
    mobileTop: boolean;
    /**
     * Update the native input element when the value changes
     */
    protected activeChanged(newValue: boolean, oldValue: boolean): Promise<void>;
    /**
     * Listen when the popover opens or closes. Returns the current value.
     */
    balChange: EventEmitter<BalEvents.BalPopoverChangeDetail>;
    /**
     * Emitted before the animation starts
     */
    balWillAnimate: EventEmitter<BalEvents.BalPopoverWillAnimateDetail>;
    /**
     * Emitted after the animation has finished
     */
    balDidAnimate: EventEmitter<BalEvents.BalPopoverDidAnimateDetail>;
    /**
     * @internal - Use this to close unused popovers.
     */
    balPopoverPrepare: EventEmitter<string>;
    /**
     * LIFECYCLE
     * ------------------------------------------------------
     */
    componentWillLoad(): void;
    componentDidLoad(): void;
    componentDidRenderTimer?: NodeJS.Timeout;
    componentDidRender(): void;
    /**
     * LISTENERS
     * ------------------------------------------------------
     */
    handlePopoverPrepare(ev: CustomEvent<string>): void;
    clickOnOutside(ev: UIEvent): Promise<void>;
    handleKeyUp(ev: KeyboardEvent): void;
    tabOutside(ev: KeyboardEvent): Promise<void>;
    breakpointListener(breakpoints: BalBreakpoints): void;
    /**
     * PUBLIC METHODS
     * ------------------------------------------------------
     */
    /**
     * Open the popover
     */
    present(options?: PopoverPresentOptions): Promise<void>;
    /**
     * Closes the popover
     */
    dismiss(options?: PopoverPresentOptions): Promise<void>;
    /**
     * Open or closes the popover
     */
    toggle(options?: PopoverPresentOptions): Promise<void>;
    /**
     * GETTERS
     * ------------------------------------------------------
     */
    private get footMobileNav();
    private get modifierOffset();
    private get modifierPreventOverflow();
    private get triggerElement();
    private get menuElement();
    private get menuInnerElement();
    private getBackdropHeight;
    /**
     * PRIVATE METHODS
     * ------------------------------------------------------
     */
    private updatePopper;
    /**
     * RENDER
     * ------------------------------------------------------
     */
    render(): any;
}
