import * as react from 'react'; import { RefObject } from 'react'; interface ChildScopesOptions { includeChildScopes?: boolean; } type ScopeChangeEventHandler = (newElements: HTMLElement[], previousElements: HTMLElement[]) => void; declare class FocusScope { private scopeRef; private handlersRef; private childScopes; constructor(scopeRef: RefObject, handlersRef: RefObject); registerChangeHandler(handler: ScopeChangeEventHandler): void; removeChangeHandler(handler: ScopeChangeEventHandler): void; registerChildScope(scope: FocusScope): void; removeChildScope(scope: FocusScope): boolean; getElements({ includeChildScopes }?: ChildScopesOptions): HTMLElement[]; isInScope(element: HTMLElement, { includeChildScopes }?: ChildScopesOptions): boolean; } interface FocusScopeContextType { scope?: FocusScope; } declare const FocusScopeContext: react.Context; declare function useFocusScopeContext(): [FocusScopeContextType, boolean]; declare function useFocusScope(): [FocusScope, (rootElement: HTMLElement) => void]; interface FocusScopeIteratorOptions extends ChildScopesOptions { from?: number; tabbableOnly?: boolean; } interface FocusScopeIterationOptions { acceptElement?: (element: HTMLElement) => boolean; } declare class FocusScopeIterator { private currentIndex; private includeChildScopes; private scope; private tabbableOnly; constructor(scope: FocusScope, { from, includeChildScopes, tabbableOnly }?: FocusScopeIteratorOptions); private isValid; firstElement({ acceptElement }?: FocusScopeIterationOptions): HTMLElement; lastElement({ acceptElement }?: FocusScopeIterationOptions): HTMLElement; nextElement({ acceptElement }?: FocusScopeIterationOptions): HTMLElement; previousElement({ acceptElement }?: FocusScopeIterationOptions): HTMLElement; } export { type ChildScopesOptions, FocusScope, FocusScopeContext, type FocusScopeContextType, type FocusScopeIterationOptions, FocusScopeIterator, type FocusScopeIteratorOptions, type ScopeChangeEventHandler, useFocusScope, useFocusScopeContext };