import { FocusScope } from "./useFocusScope"; import { ChildScopesOptions } from "."; export interface FocusManagerOptions { keyProp?: string; onFocus?: (targetElement: HTMLElement) => void; } export interface FocusManagerHandlers { onFocus?: (targetElement: HTMLElement) => void; onNotFound?: () => void; } export interface FocusManagerScopeOptions extends ChildScopesOptions { tabbableOnly?: boolean; } export interface FocusManagerIterationOptions { canFocus?: (element: HTMLElement) => boolean; } export 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; } export declare class DomFocusManager extends FocusManagerBase implements FocusManager { getActiveElementIndex(options?: FocusManagerScopeOptions): number; focusElement(element: HTMLElement, { onFocus, onNotFound }?: FocusManagerHandlers): void; } export declare const VirtualFocusCssClass = "o-ui-focus"; export declare class VirtualFocusManager extends FocusManagerBase implements FocusManager { getActiveElementIndex(options?: FocusManagerScopeOptions): number; focusElement(element: HTMLElement, { onFocus, onNotFound, ...scopeOptions }?: FocusManagerScopeOptions & FocusManagerHandlers): void; getActiveElement(options?: FocusManagerScopeOptions): HTMLElement; } export interface UseFocusManagerOptions extends FocusManagerOptions { isVirtual?: boolean; } export declare function useFocusManager(scope: FocusScope, { isVirtual, keyProp, onFocus }?: UseFocusManagerOptions): DomFocusManager | VirtualFocusManager; export {};