import { Container } from '../components/container';
import { Component } from '../components/component';
import { Action, ActionCallback, Direction, NavigationCallback } from './types';
/**
 * Used as part of spatial navigation. Groups together different components to which you can navigate to, in a single
 * navigation group.
 *
 * Responsible for finding elements in direction on navigation and for tracking active element inside the group.
 * Triggers blur and focus on element when active element is changed, as well as click on element on `Action.SELECT`.
 * Will call `hideUi()` on passed in container if `Action.BACK` is called.
 *
 * @category Components
 */
export declare class NavigationGroup {
    readonly container: Container<unknown>;
    private activeElement?;
    private activeElementBeforeDisable?;
    private readonly components;
    private removeElementHoverEventListeners;
    private readonly eventSubscriber;
    constructor(container: Container<unknown>, ...components: Component<unknown>[]);
    /**
     * If overwritten, allows to implement custom navigation behavior. Per default, the internal handler will still be
     * executed. To prevent execution of the default navigation handler, call `preventDefault()`;
     *
     * @param direction {Direction} The direction to move along
     * @param target {HTMLElement} The target element for the event
     * @param preventDefault {() => void} A function that, when called, will prevent the execution of the default handler
     */
    onNavigation?: NavigationCallback;
    /**
     * If overwritten, allows to implement custom action behavior. Per default, the internal handler will still be
     * executed. To prevent execution of the default action handler, call `preventDefault()`;
     *
     * @param action {Action} The action that was called
     * @param target {HTMLElement} The target element that action was called on
     * @param preventDefault {() => void} A function that, when called, will prevent the execution of the default handler
     */
    onAction?: ActionCallback;
    /**
     * Returns the active HTMLElement.
     */
    getActiveElement(): HTMLElement | undefined;
    private focusElement;
    private blurActiveElement;
    private focusFirstElement;
    protected defaultNavigationHandler(direction: Direction): void;
    protected defaultActionHandler(action: Action): void;
    private handleInput;
    /**
     * Handles a navigation event.
     *
     * @param direction The direction of the navigation event
     */
    handleNavigation(direction: Direction): void;
    /**
     * Handles an action event.
     *
     * @param action The action of the event
     */
    handleAction(action: Action): void;
    /**
     * Disable navigation group
     *
     * Call blur on active element, set as undefined, and track it as element before disable.
     */
    disable(): void;
    /**
     * Enable navigation group
     *
     * Sets active element to either element that was active before disable, or first element of tracked elements.
     * If it is settings panel, it will always focus first element in the list.
     */
    enable(): void;
    /**
     * Adds event listener for `mouseenter` on tracked elements to ensure tracking of active element will work together
     * in combination of using mouse and key events.
     */
    private trackElementHover;
    /**
     * Dispose of navigation group
     */
    release(): void;
}
