import '../../../assert/js/assert.js';
import '../../../globals.js';
import Property from '../../../axon/js/Property.js';
import TProperty from '../../../axon/js/TProperty.js';
import TReadOnlyProperty from '../../../axon/js/TReadOnlyProperty.js';
import { Display, Focus, Node } from '../imports.js';
export default class FocusManager {
    readonly pointerFocusProperty: TProperty<Focus | null>;
    readonly readingBlockFocusProperty: TProperty<Focus | null>;
    readonly lockedPointerFocusProperty: TProperty<Focus | null>;
    readonly pdomFocusHighlightsVisibleProperty: TProperty<boolean>;
    readonly interactiveHighlightsVisibleProperty: TProperty<boolean>;
    readonly readingBlockHighlightsVisibleProperty: TProperty<boolean>;
    readonly pointerHighlightsVisibleProperty: TReadOnlyProperty<boolean>;
    private readonly readingBlockFocusController;
    private readonly lockedPointerFocusDisplayedController;
    private readonly startSpeakingListener;
    private readonly endSpeakingListener;
    private readonly pointerFocusDisplayedController;
    private readonly voicingFullyEnabledListener;
    private static attachedWindowFocusListener;
    private static attachedWindowBlurListener;
    private static globallyAttached;
    constructor();
    dispose(): void;
    /**
     * Update the pdomFocus from a focusin/focusout event. Scenery events are batched so that they cannot be
     * reentrant. However, that means that scenery state that needs to be updated synchronously with the
     * changing DOM cannot happen in listeners that fire from scenery input. This method
     * is meant to be called from focusin/focusout listeners on the window so that The pdomFocus matches
     * browser state.
     *
     * @param displays - List of any displays that are attached to BrowserEvents.
     * @param event - The focusin/focusout event that triggered this update.
     * @param focus - True for focusin event, false for focusout event.
     */
    static updatePDOMFocusFromEvent(displays: Display[], event: FocusEvent, focus: boolean): void;
    private onPointerFocusChange;
    /**
     * Set the DOM focus. A DOM limitation is that there can only be one element with focus at a time so this must
     * be a static for the FocusManager.
     */
    static set pdomFocus(value: Focus | null);
    /**
     * Get the Focus pointing to the Node whose Parallel DOM element has DOM focus.
     */
    static get pdomFocus(): Focus | null;
    /**
     * Get the Node that currently has DOM focus, the leaf-most Node of the Focus Trail. Null if no
     * Node has focus.
     */
    static getPDOMFocusedNode(): Node | null;
    static get pdomFocusedNode(): Node | null;
    static readonly pdomFocusProperty: Property<Focus | null>;
    /**
     * A Property that lets you know when the window has focus. When the window has focus, it is in the user's foreground.
     * When in the background, the window does not receive keyboard input (important for global keyboard events).
     */
    private static _windowHasFocusProperty;
    static windowHasFocusProperty: TReadOnlyProperty<boolean>;
    /**
     * Updates the _windowHasFocusProperty when the window receives/loses focus. When the window has focus
     * it is in the foreground of the user. When in the background, the window will not receive keyboard input.
     * https://developer.mozilla.org/en-US/docs/Web/API/Window/focus_event.
     *
     * This will be called by scenery for you when you use Display.initializeEvents().
     */
    static attachToWindow(): void;
    /**
     * Detach all window focus/blur listeners from FocusManager watching for when the window loses focus.
     */
    static detachFromWindow(): void;
}
//# sourceMappingURL=FocusManager.d.ts.map