import { IFocusGroupContext } from '../FocusGroup'; export interface IFocusable { focus(options?: T): void; } /** * IFocusableProps are used to describe how the element is focused. Whether or not * you can tab to the element. Whether or not clicking on the element or calling * its focus method will set focus. * * Elements MUST either have a tabIndex set, or be native element that supports * focus to recieve keyboard focus. */ export interface IFocusableProps { /** * Disabled elements are not tabable by default. */ disabled?: boolean; /** * The element has been exluded from a current focusZone by default. */ excludeFocusZone?: boolean; /** * The element should not be tabable but still should be able to receieve focus. */ excludeTabStop?: boolean; /** * If an element participates in a FocusGroup, it MUST have a unique identifier * that the group uses to track the active focus element. */ id?: string; /** * An explicit tabIndex that should be used on the element. */ tabIndex?: number; } /** * getTabIndex takes in a standard set of focus related properties to determine * the correct tabIndex for the element. */ export declare function getTabIndex(props: IFocusableProps, focusGroupContext?: IFocusGroupContext): number | undefined; /** * Sets focus on the next frame OR after setTimeout(0) * If you pass an IFocusable instead of an HTMLElement it'll use setTimeout instead of window.requestAnimationFrame */ export declare function focusAsync(element: HTMLElement | IFocusable | { focus(): void; }): void;