import '../../chipper/js/initialize-globals.js';
import '../../assert/js/assert.js';
import '../../globals.js';
import TReadOnlyProperty from '../../axon/js/TReadOnlyProperty.js';
import Enumeration from '../../phet-core/js/Enumeration.js';
import EnumerationValue from '../../phet-core/js/EnumerationValue.js';
export declare class Intensity extends EnumerationValue {
    static readonly HIGH: Intensity;
    static readonly LOW: Intensity;
    static readonly enumeration: Enumeration<Intensity>;
}
declare class VibrationManager {
    private readonly enabledProperty;
    private readonly vibratingProperty;
    private readonly intensityProperty;
    private _runningVibration;
    private _vibrationPattern;
    private _intensityDuration;
    private _timeRunningCurrentInterval;
    private _patternTimeLimit;
    private _timeRunningCurrentPattern;
    private _currentIntervalIndex;
    private _vibrationIntensityPattern;
    private _navigatorVibrationCallback;
    private expandedPatternInterval;
    /**
     * Initialize the vibrationManager by setting initial state variables and attaching listeners.
     * NOTE: This should eventually be called in Sim.js (or other framework) only when vibration is required.
     */
    initialize(simVisibleProperty: TReadOnlyProperty<boolean>, simActiveProperty: TReadOnlyProperty<boolean>): void;
    /**
     * Initiate vibration with navigator.vibrate at the correct intervals for vibration intensity.
     */
    controlNavigator(): void;
    /**
     * Begins vibration. Optionally provide a pattern sequence for the vibration. Vibration will continue with the pattern
     * sequence until stopVibrate is called.
     */
    startVibrate(pattern: number[]): void;
    /**
     * Stops all vibration immediately.
     */
    stopVibrate(): void;
    /**
     * Start a vibration. Optionally provide a pattern sequence for the vibration. Vibration will proceed for
     * time in ms and then stop.
     * @param time - in ms, how long the vibration should run
     * @param pattern - optional, pattern for the vibration, uses default vibration pattern if not defined
     */
    startTimedVibrate(time: number, pattern: number[]): void;
    /**
     * Start a vibration using the specified pattern.
     * @param pattern - An array of integer values where even indexes represent on time and odd represent off times.
     *                  Times are in milliseconds.
     * TODO: This is an experimental method that expands a pattern in order to take advantage of the HTML5 vibration API,
     *       and not have to do as much pattern timing in our own code.  See https://github.com/phetsims/tappi/issues/13.
     */
    startRepeatingVibrationPattern(pattern: number[]): void;
    /**
     * Stop a current repeating-pattern vibration.
     * TODO: This is an experimental method that stops patterns started using startRepeatingVibrationPattern, and not
     *       other vibrational patterns.  See https://github.com/phetsims/tappi/issues/13.
     */
    stopRepeatingVibrationPattern(): void;
    /**
     * Shortcut to determine whether we are currently vibrating. This should accurately indicate whether the device is
     * actually vibrating.
     */
    isVibrating(): boolean;
    /**
     * Returns true if the VibrationManager is active with a vibration pattern. The device may or may not be actually
     * vibrating as this will return true even during downtime within a pattern.
     */
    isRunningPattern(): boolean;
    /**
     * Set the intensity of vibration. Will change intensity of the running vibration if there is one, or set the
     * intensity for the next time startVibrate is called.
     */
    setVibrationIntensity(intensity: Intensity): void;
    /**
     * Reset all variables tracking time and where we are in the vibration sequence.
     */
    private resetTimingVariables;
    /**
     * Vibrate at the intervals and intensity specified. To be called on the animation frame.
     */
    step(dt: number): void;
}
declare const vibrationManager: VibrationManager;
export default vibrationManager;
//# sourceMappingURL=vibrationManager.d.ts.map