import '../../../assert/js/assert.js';
import '../../../globals.js';
/**
 * Manages hotkeys based on two sources:
 *
 * 1. Global hotkeys (from globalHotkeyRegistry)
 * 2. Hotkeys from the current focus trail (FocusManager.pdomFocusProperty, all hotkeys on all input listeners of
 *    nodes in the trail)
 *
 * Manages key press state using EnglishKey from globalKeyStateTracker.
 *
 * The "available" hotkeys are the union of the above two sources.
 *
 * The "enabled" hotkeys are the subset of available hotkeys whose enabledProperties are true.
 *
 * The "active" hotkeys are the subset of enabled hotkeys that are considered pressed. They will have fire-on-hold
 * behavior active.
 *
 * The set of enabled hotkeys determines the set of modifier keys that are considered "active" (in addition to
 * ctrl/alt/meta/shift, which are always included).
 *
 * @author Jesse Greenberg (PhET Interactive Simulations)
 * @author Jonathan Olson <jonathan.olson@colorado.edu>
 */
import { Hotkey, Node } from '../imports.js';
declare class HotkeyManager {
    private readonly availableHotkeysProperty;
    private readonly enabledHotkeysProperty;
    private englishKeysDown;
    private modifierKeys;
    private readonly activeHotkeys;
    constructor();
    /**
     * Scenery-internal. If a Node along the focused trail changes its input listeners we need to manually recompute
     * the available hotkeys. There is no other way at this time to observe the input listeners of a Node. Otherwise,
     * the available hotkeys will be recomputed when focus changes, inputEnabledProperty changes for Nodes along the
     * trail, or when global hotkeys change.
     *
     * Called by Node.addInputListener/Node.removeInputListener.
     *
     * (scenery-internal)
     */
    updateHotkeysFromInputListenerChange(node: Node): void;
    /**
     * Given a main `key`, see if there is a hotkey that should be considered "active/pressed" for it.
     *
     * For a hotkey to be compatible, it needs to have:
     *
     * 1. Main key pressed
     * 2. All modifier keys in the hotkey's modifierKeys pressed
     * 3. All modifier keys not in the hotkey's modifierKeys (but in the other hotkeys above) not pressed
     */
    private getHotkeysForMainKey;
    /**
     * Re-check all hotkey active/pressed states (since modifier keys might have changed, OR we need to validate that
     * there are no conflicts).
     */
    private updateHotkeyStatus;
    /**
     * Hotkey made active/pressed
     */
    private addActiveHotkey;
    /**
     * Hotkey made inactive/released.
     */
    private removeActiveHotkey;
    /**
     * Called by Hotkey, removes the Hotkey from the active set when it is interrupted. The Hotkey cannot be active
     * again in this manager until there is an actual key press event from the user.
     */
    interruptHotkey(hotkey: Hotkey): void;
}
declare const hotkeyManager: HotkeyManager;
export default hotkeyManager;
//# sourceMappingURL=hotkeyManager.d.ts.map