import { ChildScopesOptions, FocusScope } from './useFocusScope.js'; import 'react'; interface FocusManagerOptions { keyProp?: string; onFocus?: (targetElement: HTMLElement) => void; } interface FocusManagerHandlers { onFocus?: (targetElement: HTMLElement) => void; onNotFound?: () => void; } interface FocusManagerScopeOptions extends ChildScopesOptions { tabbableOnly?: boolean; } interface FocusManagerIterationOptions { canFocus?: (element: HTMLElement) => boolean; } interface FocusManager { focusFirst: (options?: FocusManagerScopeOptions & FocusManagerIterationOptions & FocusManagerHandlers) => HTMLElement; focusFirstQueryMatch: (query: string, handlers?: FocusManagerScopeOptions & FocusManagerHandlers) => HTMLElement; focusKey: (key: string, options?: FocusManagerScopeOptions & FocusManagerHandlers) => HTMLElement; focusLast: (options?: FocusManagerScopeOptions & FocusManagerIterationOptions & FocusManagerHandlers) => HTMLElement; focusNext: (options?: FocusManagerScopeOptions & FocusManagerIterationOptions & FocusManagerHandlers) => HTMLElement; focusPrevious: (options?: FocusManagerScopeOptions & FocusManagerIterationOptions & FocusManagerHandlers) => HTMLElement; focusTarget: (key: string, options?: FocusManagerScopeOptions & FocusManagerIterationOptions & FocusManagerHandlers) => HTMLElement; getActiveElementIndex: (options?: FocusManagerScopeOptions) => number; isInScope: (element: HTMLElement, options?: FocusManagerScopeOptions) => boolean; } declare abstract class FocusManagerBase { protected scope: FocusScope; protected keyProp: string; protected onFocus: (element: HTMLElement) => void; constructor(scope: FocusScope, { keyProp, onFocus }?: FocusManagerOptions); isInScope(element: HTMLElement, options?: FocusManagerScopeOptions): boolean; abstract getActiveElementIndex(options?: FocusManagerScopeOptions): any; abstract focusElement(element: HTMLElement, handlers: FocusManagerHandlers): any; focusFirst({ canFocus, onFocus, onNotFound, ...scopeOptions }?: FocusManagerScopeOptions & FocusManagerIterationOptions & FocusManagerHandlers): HTMLElement; focusLast({ canFocus, onFocus, onNotFound, ...scopeOptions }?: FocusManagerScopeOptions & FocusManagerIterationOptions & FocusManagerHandlers): HTMLElement; focusNext({ canFocus, onFocus, onNotFound, ...scopeOptions }?: FocusManagerScopeOptions & FocusManagerIterationOptions & FocusManagerHandlers): HTMLElement; focusPrevious({ canFocus, onFocus, onNotFound, ...scopeOptions }?: FocusManagerScopeOptions & FocusManagerIterationOptions & FocusManagerHandlers): HTMLElement; focusKey(key: string, { onFocus, onNotFound, ...scopeOptions }?: FocusManagerScopeOptions & FocusManagerHandlers): HTMLElement; focusTarget(target: string, options?: FocusManagerScopeOptions & FocusManagerIterationOptions & FocusManagerHandlers): HTMLElement; focusFirstQueryMatch(query: string, { onFocus, onNotFound, ...scopeOptions }?: FocusManagerScopeOptions & FocusManagerHandlers): HTMLElement; } declare class DomFocusManager extends FocusManagerBase implements FocusManager { getActiveElementIndex(options?: FocusManagerScopeOptions): number; focusElement(element: HTMLElement, { onFocus, onNotFound }?: FocusManagerHandlers): void; } declare const VirtualFocusCssClass = "o-ui-focus"; declare class VirtualFocusManager extends FocusManagerBase implements FocusManager { getActiveElementIndex(options?: FocusManagerScopeOptions): number; focusElement(element: HTMLElement, { onFocus, onNotFound, ...scopeOptions }?: FocusManagerScopeOptions & FocusManagerHandlers): void; getActiveElement(options?: FocusManagerScopeOptions): HTMLElement; } interface UseFocusManagerOptions extends FocusManagerOptions { isVirtual?: boolean; } declare function useFocusManager(scope: FocusScope, { isVirtual, keyProp, onFocus }?: UseFocusManagerOptions): VirtualFocusManager | DomFocusManager; export { DomFocusManager, type FocusManager, type FocusManagerHandlers, type FocusManagerIterationOptions, type FocusManagerOptions, type FocusManagerScopeOptions, type UseFocusManagerOptions, VirtualFocusCssClass, VirtualFocusManager, useFocusManager };