import { SpectrumElement } from './lib/base';
import { ElementResolutionController } from './lib/reactive-controllers';
import { Overlay } from './Overlay.js';
import { OverlayTimer } from './overlay-timer';
import { OpenableElement, OverlayOptions, OverlayOptionsV1, OverlayState, OverlayTypes, Placement, TriggerInteractionsV1 } from './overlay-types';
import { PlacementController } from './PlacementController';
import { VirtualTrigger } from './VirtualTrigger.js';

export declare const overlayTimer: OverlayTimer;
export declare const noop: () => void;
/**
 * Apply a "transitionend" listener to an element that may not transition but
 * guarantee the callback will be fired either way.
 *
 * @param el {HTMLElement} - Target of the "transition" listeners.
 * @param action {Function} - Method to trigger the "transition".
 * @param cb {Function} - Callback to trigger when the "transition" has ended.
 */
export declare const guaranteedAllTransitionend: (el: HTMLElement, action: () => void, cb: () => void) => void;
export declare function nextFrame(): Promise<void>;
/**
 * Abstract Overlay base class so that property tyings and imperative API
 * interfaces can be held separate from the actual class definition.
 */
export declare class AbstractOverlay extends SpectrumElement {
    protected applyFocus(_targetOpenState: boolean, _focusEl: HTMLElement | null): Promise<void>;
    get delayed(): boolean;
    set delayed(_delayed: boolean);
    dialogEl: HTMLDialogElement & {
        hidePopover(): void;
        showPopover(): void;
    };
    get disabled(): boolean;
    set disabled(_disabled: boolean);
    dispose: () => void;
    protected get elementResolver(): ElementResolutionController;
    protected set elementResolver(controller: ElementResolutionController);
    protected _elementResolver: ElementResolutionController;
    protected ensureOnDOM(_targetOpenState: boolean): Promise<void>;
    elements: OpenableElement[];
    protected makeTransition(_targetOpenState: boolean): Promise<HTMLElement | null>;
    protected manageDelay(_targetOpenState: boolean): Promise<void>;
    protected manageDialogOpen(): Promise<void>;
    protected managePopoverOpen(): Promise<void>;
    protected managePosition(): void;
    protected offset: number | [number, number];
    get open(): boolean;
    set open(_open: boolean);
    placement?: Placement;
    protected get placementController(): PlacementController;
    protected set placementController(controller: PlacementController);
    protected _placementController: PlacementController;
    receivesFocus: 'true' | 'false' | 'auto';
    protected requestSlottable(): void;
    protected returnFocus(): void;
    get state(): OverlayState;
    set state(_state: OverlayState);
    protected _state: OverlayState;
    triggerElement: HTMLElement | VirtualTrigger | null;
    type: OverlayTypes;
    willPreventClose: boolean;
    manuallyKeepOpen(): void;
    static update(): void;
    /**
     * Overloaded imperative API entry point that allows for both the pre-0.37.0
     * argument signature as well as the post-0.37.0 signature. This allows for
     * consumers to continue to leverage it as they had been in previous releases
     * while also surfacing the more feature-rich API that has been made available.
     */
    static open(trigger: HTMLElement, interaction: TriggerInteractionsV1, content: HTMLElement, optionsV1: OverlayOptionsV1): Promise<() => void>;
    static open(content: HTMLElement, options?: OverlayOptions): Promise<Overlay>;
    static applyOptions(overlay: AbstractOverlay, options: OverlayOptions): void;
}
