/**
 * ToggleSwitch is a switch for toggling between 2 values, similar to iOS' UISwitch, used in iOS `'Settings' app.
 *
 * Interaction behavior is as follows:
 * Drag the thumb to change the value, or click anywhere to toggle the value.
 * If you click without dragging, it's a toggle.
 * If you drag but don't cross the midpoint of the track, then it's a toggle.
 * If you drag past the midpoint of the track, releasing the thumb snaps to whichever end the thumb is closest to.
 * If you drag the thumb far enough to the side (outside of the switch), it will immediately toggle the model behavior.
 *
 * @author Chris Malley (PixelZoom, Inc.)
 * @author Jonathan Olson (PhET Interactive Simulations)
 */
import '../../globals.js';
import type Property from '../../axon/js/Property.js';
import type TEmitter from '../../axon/js/TEmitter.js';
import Dimension2 from '../../dot/js/Dimension2.js';
import { type TrimParallelDOMOptions } from '../../scenery/js/accessibility/pdom/ParallelDOM.js';
import { type VoicingOptions } from '../../scenery/js/accessibility/voicing/Voicing.js';
import Node, { type NodeOptions } from '../../scenery/js/nodes/Node.js';
import type TPaint from '../../scenery/js/util/TPaint.js';
import type TSoundPlayer from '../../tambo/js/TSoundPlayer.js';
import { type TAlertable } from '../../utterance-queue/js/Utterance.js';
type SelfOptions = {
    size?: Dimension2;
    toggleWhileDragging?: null | boolean;
    dragThreshold?: number;
    toggleThreshold?: number;
    thumbFill?: TPaint;
    thumbStroke?: TPaint;
    thumbTouchAreaXDilation?: number;
    thumbTouchAreaYDilation?: number;
    thumbMouseAreaXDilation?: number;
    thumbMouseAreaYDilation?: number;
    trackFillLeft?: TPaint;
    trackFillRight?: TPaint;
    trackStroke?: TPaint;
    switchToLeftSoundPlayer?: TSoundPlayer;
    switchToRightSoundPlayer?: TSoundPlayer;
    leftValueContextResponse?: TAlertable;
    rightValueContextResponse?: TAlertable;
    accessibleSwitch?: boolean;
};
type ParentOptions = VoicingOptions & NodeOptions;
export type ToggleSwitchOptions = SelfOptions & TrimParallelDOMOptions<ParentOptions>;
declare const ToggleSwitch_base: typeof Node & import("../../phet-core.js").Constructor<import("../../scenery/js/accessibility/voicing/Voicing.js").TVoicing<Node>>;
export default class ToggleSwitch<T> extends ToggleSwitch_base {
    private readonly disposeToggleSwitch;
    readonly switchToLeftSoundPlayer: TSoundPlayer;
    readonly switchToRightSoundPlayer: TSoundPlayer;
    readonly onInputEmitter: TEmitter;
    /**
     * @param property
     * @param leftValue - value when the switch is in the left position
     * @param rightValue - value when the switch is in the right position
     * @param providedOptions
     */
    constructor(property: Property<T>, leftValue: T, rightValue: T, providedOptions?: ToggleSwitchOptions);
    dispose(): void;
}
export {};
//# sourceMappingURL=ToggleSwitch.d.ts.map