import { IResultsComponentBindings } from 'coveo-search-ui';
import { ActionButtonOptions, IActionButtonOptionsWithTitle, IActionButtonOptionsWithIcon } from './ActionButton';
/**
 * Represent a state that can be used by a StatefulActionButton.
 */
export declare type StatefulActionButtonState = ActionButtonOptions & IStateOptions;
export interface IStatefulActionButtonOptionsWithTitle extends IActionButtonOptionsWithTitle, IStateOptions {
}
export interface IStatefulActionButtonOptionsWithIcon extends IActionButtonOptionsWithIcon, IStateOptions {
}
export interface IStateOptions {
    /**
     * The name of the state. Used by StatefulActionButton for logging.
     */
    name: string;
    /**
     * Called when this state is set as the current state.
     * Called after the onStateExit of the previous state if any.
     */
    onStateEntry?: (this: StatefulActionButton) => void;
    /**
     * Called when this state has been set as the current state and another is about to get set.
     * Called before the onStateEntry of the next state if any.
     */
    onStateExit?: (this: StatefulActionButton) => void;
}
/**
 * Represent a transition from one `IStatefulActionButtonState` to another.
 */
export interface IStatefulActionButtonTransition {
    from: StatefulActionButtonState;
    to: StatefulActionButtonState;
}
/**
 * The options format for a StatefulActionButton
 */
export interface IStatefulActionButtonOptions {
    /**
     * An array containing all states used by the StatefulActionButton instance.
     * If `switchTo` is called with an unknown state, a warning will be emitted
     * and the transition will not occur.
     */
    states: [StatefulActionButtonState, ...StatefulActionButtonState[]];
    /**
     * An array containing all the state transitions allowed on the StatefulActionButton instance.
     * If `switchTo` is called with an illegal transitions , a warning will be emitted
     * and the transition will not occur.
     */
    allowedTransitions?: IStatefulActionButtonTransition[];
    /**
     * The initial state to be used by the StatefulActionButton instance.
     * If nullish or missing from the states array, a warning will be emitted,
     * no ActionButton will be constructed and the element will be hidden
     */
    initialState: StatefulActionButtonState;
}
/**
 * An action button able to handle multiple states and their transitions.
 */
export declare class StatefulActionButton {
    element: HTMLElement;
    options: IStatefulActionButtonOptions;
    bindings?: IResultsComponentBindings;
    static ID: string;
    private currentState;
    private innerActionButton;
    constructor(element: HTMLElement, options: IStatefulActionButtonOptions, bindings?: IResultsComponentBindings);
    /**
     * Switch the state of the instance if the state and the transition between the current and new state are allowed.
     * @param state a state to try to switch to
     */
    switchTo(state: StatefulActionButtonState): void;
    /**
     * Return the current state of the instance.
     */
    getCurrentState(): StatefulActionButtonState;
    /**
     * Check if the options given to the constructor are valid.
     * If not, it will also display the appropriate warning.
     */
    private checkOptionsValidity;
    private areTransitionsValid;
    private generateInvalidTransitionMessage;
    /**
     * Check if a transition from the current state to @param state is allowed.
     * @param state the destination of the transition
     */
    private isTransitionAllowed;
    /**
     * Handle user click.
     */
    private handleClick;
}
