import '../../../assert/js/assert.js';
import '../../../globals.js';
import EnabledComponent, { EnabledComponentOptions } from '../../../axon/js/EnabledComponent.js';
import TProperty from '../../../axon/js/TProperty.js';
import TReadOnlyProperty from '../../../axon/js/TReadOnlyProperty.js';
import { AllowedKeysString, KeyDescriptor, OneKeyStroke } from '../imports.js';
export type HotkeyFireOnHoldTiming = 'browser' | 'custom';
type SelfOptions = {
    keyStringProperty: TReadOnlyProperty<OneKeyStroke>;
    fire?: (event: KeyboardEvent | null) => void;
    press?: (event: KeyboardEvent | null) => void;
    release?: (event: KeyboardEvent | null) => void;
    fireOnDown?: boolean;
    fireOnHold?: boolean;
    fireOnHoldTiming?: HotkeyFireOnHoldTiming;
    fireOnHoldCustomDelay?: number;
    fireOnHoldCustomInterval?: number;
    allowOverlap?: boolean;
    override?: boolean;
};
export type HotkeyOptions = SelfOptions & EnabledComponentOptions;
export default class Hotkey extends EnabledComponent {
    readonly keyStringProperty: TReadOnlyProperty<OneKeyStroke>;
    readonly fire: (event: KeyboardEvent | null) => void;
    readonly press: (event: KeyboardEvent | null) => void;
    readonly release: (event: KeyboardEvent | null) => void;
    readonly fireOnDown: boolean;
    readonly fireOnHold: boolean;
    readonly fireOnHoldTiming: HotkeyFireOnHoldTiming;
    readonly allowOverlap: boolean;
    readonly override: boolean;
    readonly keyDescriptorProperty: TReadOnlyProperty<KeyDescriptor>;
    keysProperty: TReadOnlyProperty<AllowedKeysString[]>;
    readonly isPressedProperty: TProperty<boolean>;
    interrupted: boolean;
    private fireOnHoldTimer?;
    constructor(providedOptions: HotkeyOptions);
    /**
     * On "press" of a Hotkey. All keys are pressed while the Hotkey is active. May also fire depending on
     * events. See hotkeyManager.
     *
     * (scenery-internal)
     */
    onPress(event: KeyboardEvent | null, shouldFire: boolean): void;
    /**
     * On "release" of a Hotkey. All keys are released while the Hotkey is inactive. May also fire depending on
     * events. See hotkeyManager.
     */
    onRelease(event: KeyboardEvent | null, interrupted: boolean, shouldFire: boolean): void;
    /**
     * Manually interrupt this hotkey, releasing it and setting a flag so that it will not fire until the next time
     * keys are pressed.
     */
    interrupt(): void;
    dispose(): void;
}
export {};
//# sourceMappingURL=Hotkey.d.ts.map