import { ConnectedPosition, ScrollStrategy } from '@angular/cdk/overlay';
import { ElementRef, EventEmitter } from '@angular/core';
import { Nullable } from '@fundamental-ngx/cdk/utils';
import { Placement, PopoverFillMode } from '@fundamental-ngx/core/shared';
import * as i0 from "@angular/core";
export declare class BasePopoverClass {
    /** Whether to close the popover on router navigation start. */
    closeOnNavigation: boolean;
    /** Whether the popover is disabled. */
    disabled: boolean;
    /** Maximum width of popover body in px, prevents from overextending body by `fillControlMode`  */
    maxWidth: Nullable<number>;
    /** Whether the popover should have an arrow. */
    noArrow: boolean;
    /** Whether the popover container needs an extra class for styling. */
    additionalBodyClass: string | null;
    /** Classes that should be applied to fd-popover-body component directly. */
    additionalBodyComponentClasses: string | null;
    /** Whether the popover container needs an extra class for styling. */
    additionalTriggerClass: string | null;
    /** Whether the popover should close when the escape key is pressed. */
    closeOnEscapeKey: boolean;
    /** Whether to wrap content with fd-scrollbar directive. */
    disableScrollbar: boolean;
    /**
     * The placement of the popover.
     * It can be one of:
     * top, top-start, top-end, bottom, bottom-start, bottom-end,
     * right, right-start, right-end, left, left-start, left-end.
     */
    placement: Placement | null;
    /**
     * The trigger events that will open/close the popover.
     * Accepts any [HTML DOM Events](https://www.w3schools.com/jsref/dom_obj_event.asp) or a config object for the corresponding event.
     * Using the config object allows to specify whether an event should apply both for open and close actions or only some of them.
     *
     * If array of triggers consists only of one event, it will be treated at a toggle event (open and close)
     * If array of trigger consists of more than one event, each odd event will be treated as an open event for the popover,
     * and each even event will be treated as closing event for the popover.
     *
     * Consider the following value for `triggers`:
     * ```
     * [
     *  'click' // basically it's an alias for "{ trigger: 'click', openAction: true, closeAction: true }"
     * ]
     * ```
     * ```
     * [
     *  'mouseenter' // Shortcut for "{ trigger: 'mouseenter', openAction: true, closeAction: false }", and will only open the popover.
     *  'mouseleave' // Shortcut for "{ trigger: 'mouseleave', openAction: false, closeAction: true }" and will only close the popover.
     * ]
     * ```
     * ```
     * [
     *  { trigger: 'mouseenter', openAction: true, closeAction: true }, // "mouseenter" will toggle the popover.
     *  { trigger: 'mouseleave', openAction: true, closeAction: true } // "mouseleave" will toggle the popover.
     * ]
     * ```
     *
     * @default ['click']
     */
    triggers: (string | TriggerConfig)[];
    /** Whether the popover is open. Can be used through two-way binding. */
    isOpen: boolean;
    /** Whether the popover should close when a click is made outside its boundaries. */
    closeOnOutsideClick: boolean;
    /** Wether to apply a background overlay */
    applyOverlay: boolean;
    /** Whether the popover should be focusTrapped. */
    focusTrapped: boolean;
    /**
     * Whether the popover should automatically move focus into the trapped region upon
     * initialization and return focus to the previous activeElement upon destruction.
     */
    focusAutoCapture: boolean;
    /**
     * Whether to move the focus after popover is closed to the last focused element before popover was opened.
     */
    restoreFocusOnClose: boolean;
    /**
     * Scroll strategy, there are 4 accepted
     * - CloseScrollStrategy
     * - NoopScrollStrategy
     * - BlockScrollStrategy
     * - RepositionScrollStrategy ( default )
     */
    scrollStrategy: ScrollStrategy | null;
    /**
     * List of positions options for overlay defined by angular CDK.
     * Positions will be taken in order, same like on array. If first position provided doesn't fit to window,
     * another will be used
     * More information can be found in https://material.angular.io/cdk/overlay/api
     */
    cdkPositions: ConnectedPosition[] | null;
    /**
     * Preset options for the popover body width.
     * * `at-least` will apply a minimum width to the body equivalent to the width of the control.
     * * `equal` will apply a width to the body equivalent to the width of the control.
     * * Leave blank for no effect.
     */
    fillControlMode: Nullable<PopoverFillMode>;
    /** The element to which  the overlay is attached. By default it is body */
    appendTo: Nullable<ElementRef | Element>;
    /** Placement of the popover element. */
    placementContainer: Nullable<ElementRef | Element>;
    /** Whether position shouldn't change, when popover approach the corner of page */
    fixedPosition: boolean;
    /** Whether the popover body is resizable. */
    resizable: boolean;
    /** Event emitted when the state of the isOpen property changes. */
    isOpenChange: EventEmitter<boolean>;
    /** Event emitted right before the popover is being opened.
     * Useful for cases when component inside popover body needs to be initialized right BEFORE the opening of the popover. */
    beforeOpen: EventEmitter<any>;
    /** @hidden Aria role for the popover body. */
    _bodyRole: string | null;
    /** @hidden ID for the popover body. */
    _bodyId: string | null;
    static ɵfac: i0.ɵɵFactoryDeclaration<BasePopoverClass, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<BasePopoverClass, never, never, { "closeOnNavigation": { "alias": "closeOnNavigation"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "maxWidth": { "alias": "maxWidth"; "required": false; }; "noArrow": { "alias": "noArrow"; "required": false; }; "additionalBodyClass": { "alias": "additionalBodyClass"; "required": false; }; "additionalBodyComponentClasses": { "alias": "additionalBodyComponentClasses"; "required": false; }; "additionalTriggerClass": { "alias": "additionalTriggerClass"; "required": false; }; "closeOnEscapeKey": { "alias": "closeOnEscapeKey"; "required": false; }; "disableScrollbar": { "alias": "disableScrollbar"; "required": false; }; "placement": { "alias": "placement"; "required": false; }; "triggers": { "alias": "triggers"; "required": false; }; "isOpen": { "alias": "isOpen"; "required": false; }; "closeOnOutsideClick": { "alias": "closeOnOutsideClick"; "required": false; }; "applyOverlay": { "alias": "applyOverlay"; "required": false; }; "focusTrapped": { "alias": "focusTrapped"; "required": false; }; "focusAutoCapture": { "alias": "focusAutoCapture"; "required": false; }; "restoreFocusOnClose": { "alias": "restoreFocusOnClose"; "required": false; }; "scrollStrategy": { "alias": "scrollStrategy"; "required": false; }; "cdkPositions": { "alias": "cdkPositions"; "required": false; }; "fillControlMode": { "alias": "fillControlMode"; "required": false; }; "appendTo": { "alias": "appendTo"; "required": false; }; "placementContainer": { "alias": "placementContainer"; "required": false; }; "fixedPosition": { "alias": "fixedPosition"; "required": false; }; "resizable": { "alias": "resizable"; "required": false; }; }, { "isOpenChange": "isOpenChange"; "beforeOpen": "beforeOpen"; }, never, never, true, never>;
}
/**
 * Config for the trigger event, which allows to specify
 * whether an event should apply both for open and close actions or only some of them
 */
export interface TriggerConfig {
    trigger: string;
    openAction: boolean;
    closeAction: boolean;
    stopPropagation?: boolean;
}
