/// <reference types="react" />
import type { KeyboardMovementContext, KeyboardMovementProviderImplementation, KeyboardMovementProviderOptions } from "./types.js";
export declare const KeyboardMovementProvider: import("react").Provider<KeyboardMovementContext>;
/**
 * @remarks \@since 5.0.0
 * @internal
 */
export declare function useKeyboardMovementContext(): Readonly<KeyboardMovementContext>;
/**
 * Implements the custom keyboard movement behavior throughout react-md. Using
 * the "Find References" will be the best way to see example usage.
 *
 * @example
 * Default Keyboard Movement for any Focusable Element
 * ```tsx
 * import {
 *   KeyboardMovementProvider,
 *   useKeyboardMovementProvider,
 * } from "@react-md/core";
 * import type { ReactElement, ReactNode } from "react";
 *
 * function Example({ children }: { children: ReactNode }): ReactElement {
 *   const { movementContext, movementProps } = useKeyboardMovementProvider();
 *
 *   // any focusable element child can be focused with the arrow , home, and
 *   // end keys
 *   return (
 *     <KeyboardMovementProvider value={movementContext}>
 *       <div {...movementProps}>
 *         {children}
 *       </div>
 *     </KeyboardMovementProvider>
 *   );
 * }
 * ```
 *
 * @example
 * Active Descendant Movement
 * ```tsx
 * import {
 *   KeyboardMovementProvider,
 *   useKeyboardMovementContext,
 *   useKeyboardMovementProvider,
 * } from "@react-md/core";
 * import type { ReactElement, ReactNode } from "react";
 * import { useId } from "react";
 *
 * function Child(): ReactElement {
 *   const id = useId()
 *   const { activeDescendantId } = useKeyboardMovementContext();
 *
 *   return (
 *     <div
 *       {...props}
 *       id={id}
 *       className={cnb(id === activeDescendantId && "focused-class-name")}
 *     >
 *       Some Content
 *     </div>
 *   );
 * }
 *
 * function Example({ children }: { children: ReactNode }): ReactElement {
 *   const { movementContext, movementProps } = useKeyboardMovementProvider({
 *     loopable: true,
 *     searchable: true,
 *     tabIndexBehavior: "virtual",
 *   });
 *
 *   // any focusable element child can be focused with the arrow , home, and
 *   // end keys
 *   return (
 *     <KeyboardMovementProvider value={movementContext}>
 *       <div {...movementProps}>
 *         <Child />
 *         <Child />
 *         <Child />
 *       </div>
 *     </KeyboardMovementProvider>
 *   );
 * }
 * ```
 *
 * @example
 * Roving Tab Index
 * ```tsx
 * import {
 *   KeyboardMovementProvider,
 *   useKeyboardMovementContext,
 *   useKeyboardMovementProvider,
 * } from "@react-md/core";
 * import type { ReactElement, ReactNode } from "react";
 * import { useId } from "react";
 *
 * function Child(): ReactElement {
 *   const id = useId()
 *   const { activeDescendantId } = useKeyboardMovementContext();
 *
 *   return (
 *     <div
 *       {...props}
 *       id={id}
 *       tabIndex={id === activeDescendantId ? 0 : -1}
 *     >
 *       Some Content
 *     </div>
 *   );
 * }
 *
 * function Example({ children }: { children: ReactNode }): ReactElement {
 *   const { movementContext, movementProps } = useKeyboardMovementProvider({
 *     loopable: true,
 *     searchable: true,
 *     tabIndexBehavior: "roving",
 *   });
 *
 *   // any focusable element child can be focused with the arrow , home, and
 *   // end keys
 *   return (
 *     <KeyboardMovementProvider value={movementContext}>
 *       <div {...movementProps}>
 *         <Child />
 *         <Child />
 *         <Child />
 *       </div>
 *     </KeyboardMovementProvider>
 *   );
 * }
 * ```
 * @remarks \@since 6.0.0
 * @internal
 */
export declare function useKeyboardMovementProvider<E extends HTMLElement>(options?: KeyboardMovementProviderOptions<E>): KeyboardMovementProviderImplementation<E>;
