/**
 * A query selector to find elements that are programmatically focusable.
 *
 * Example:
 *
 * ```ts
 * const focusableElements = document.querySelectorAll(PROGRAMMATICALLY_FOCUSABLE);
 * // do something with elements
 * ```
 */
export declare const PROGRAMMATICALLY_FOCUSABLE: string;
/**
 * A query selector to find elements that are focusable only with tab and shift+tab.
 *
 * Example:
 *
 * ```ts
 * const focusableElements = document.querySelectorAll(TAB_FOCUSABLE);
 * // do something with elements
 * ```
 *
 * @remarks \@since 6.0.0 This was updated to remove ALL elements that have a
 * `tabindex="-1"` applied instead of only elements that had a manual tab index
 * applied.
 */
export declare const TAB_FOCUSABLE: string;
/**
 * A simple util that will find all the tab focusable elements within a
 * container element.  The container should normally be a specific HTMLElement,
 * but it can also be the entire document if you want to find **all** focusable
 * elements within your page.
 *
 * @remarks
 * \@since 6.0.0 This function will be used for all keyboard focus behavior
 * instead of trying to use refs. I did some performance testing in Firefox and
 * Chrome and the `querySelectorAll` takes 4ms with 5000 elements for my use
 * cases. There is more of a performance issue around rendering all 5000
 * elements and since this is only used for specific keydown events, this is
 * good enough for me.
 *
 * @param container - The container element/document to find focusable elements
 * within.
 * @param programmatic - Boolean if programmatically focusable elements should be
 * included instead of only tab focusable.
 * @returns A list of HTMLElements that are focusable within the container.
 */
export declare function getFocusableElements(container: HTMLElement | Document, programmatic?: boolean): readonly HTMLElement[];
/**
 * Attempts to find the first focusable element within a container.
 *
 * @remarks \@since 6.0.0
 * @param container - The container element/document to find focusable elements
 * within.
 * @param programmatic - Boolean if programmatically focusable elements should be
 * included instead of only tab focusable.
 * @returns A list of HTMLElements that are focusable within the container.
 */
export declare function getFocusableElement(container: HTMLElement | Document, programmatic?: boolean): HTMLElement | null;
/**
 * An element can be tab focused if it is:
 * - an anchor or area with an `href`
 * - a non-disabled `input` element that is not `type="hidden"`
 * - a non-disabled `button`, `textarea`, or `select` element
 * - an element with a `tabIndex >= 0`
 *
 * An element can be noted as "programmatically focusable only"  has the above
 * rules, but the `tabIndex` will be set to `-1`.
 *
 * @remarks \@since 2.8.0
 */
export type ElementFocusType = "tab" | "programmatic";
export declare function isFocusable(element: HTMLElement | Document | Window, type?: ElementFocusType): element is HTMLElement;
export type FocusElementWithinType = "first" | "last" | "query" | "self" | "none";
export interface FocusElementWithinOptions {
    type: FocusElementWithinType;
    query?: string;
    elements: readonly HTMLElement[];
    container: HTMLElement | Document;
}
export declare function focusElementWithin(options: FocusElementWithinOptions): void;
