import '../../chipper/js/browser/initialize-globals.js';
import '../../assert/js/assert.js';
import '../../globals.js';
/**
 * FaucetNode is a faucet with a pinball machine 'shooter' that behaves like a slider.
 * When the faucet is disabled, the flow rate is set to zero and the shooter is disabled.
 * The origin is at the bottom-center of the spout.
 *
 * The shooter is optionally interactive. When it's not interactive, the shooter and track are hidden.
 * When the shooter is interactive, it has the following features:
 *
 * (1) Close-on-release mode: When the user drags the slider, releasing it sets the flow to zero.
 * See options.closeToRelease: true.
 *
 * (2) Slider mode: When the user drags the slider, releasing it will leave the shooter wherever it is
 * released, and (if in the on position) the flow will continue. See options.closeToRelease: false.
 *
 * (3) Tap-to-dispense: When the user taps on the shooter without dragging, it's on/off state toggles.
 * If the shooter was in the off state when tapped, it opens and dispenses a configurable amount of fluid.
 * This feature can be enabled simultaneously with (1) and (2) above. See the various tapToDispense* options.
 *
 * @author Chris Malley (PixelZoom, Inc.)
 */
import Property from '../../axon/js/Property.js';
import TReadOnlyProperty from '../../axon/js/TReadOnlyProperty.js';
import StrictOmit from '../../phet-core/js/types/StrictOmit.js';
import { HotkeyData, Node, NodeOptions } from '../../scenery/js/imports.js';
import { AccessibleSliderOptions } from '../../sun/js/accessibility/AccessibleSlider.js';
import IOType from '../../tandem/js/types/IOType.js';
type SelfOptions = {
    horizontalPipeLength?: number;
    verticalPipeLength?: number;
    tapToDispenseEnabled?: boolean;
    tapToDispenseAmount?: number;
    tapToDispenseInterval?: number;
    closeOnRelease?: boolean;
    interactiveProperty?: TReadOnlyProperty<boolean>;
    rasterizeHorizontalPipeNode?: boolean;
    shooterOptions?: ShooterNodeOptions;
};
type ParentOptions = AccessibleSliderOptions & NodeOptions;
export type FaucetNodeOptions = SelfOptions & StrictOmit<ParentOptions, 'interactiveHighlightEnabled' | 'enabledRangeProperty' | 'valueProperty'>;
declare const FaucetNode_base: typeof Node & import("../../phet-core/js/types/Constructor.js").default<{
    startDrag: (event: import("../../scenery/js/imports.js").SceneryEvent) => void;
    drag: (event: import("../../scenery/js/imports.js").SceneryEvent) => void;
    endDrag: (event: import("../../scenery/js/imports.js").SceneryEvent | null) => void;
} & {
    startInput: import("../../scenery/js/imports.js").SceneryListenerFunction;
    onInput: (event: import("../../scenery/js/imports.js").SceneryEvent, oldValue: number) => void;
    endInput: (event: import("../../scenery/js/imports.js").SceneryEvent | null) => void;
    constrainValue: ((value: number) => number);
    panTargetNode: Node | null;
    roundToStepSize: boolean;
    pdomMapPDOMValue: ((value: number) => number);
    pdomMapValue: ((newValue: number, previousValue: number) => number);
    pdomRepeatEqualValueText: boolean;
    pdomCreateAriaValueText: {
        (pdomMappedValue: number, newValue: number, valueOnStart: number | null): import("../../scenery/js/imports.js").PDOMValueType | null;
        reset?: () => void;
    };
    pdomCreateContextResponseAlert: {
        (pdomMappedValue: number, newValue: number, valueOnStart: number | null): import("../../scenery/js/imports.js").PDOMValueType | null;
        reset?: () => void;
    } | null;
    contextResponsePerValueChangeDelay: number;
    contextResponseMaxDelay: number;
    voicingOnEndResponseOptions: import("../../sun/js/accessibility/AccessibleValueHandler.js").VoicingOnEndResponseOptions;
    setPDOMDependencies(dependencies: TReadOnlyProperty<import("../../phet-core/js/types/IntentionalAny.js").default>[]): void;
    getPDOMDependencies(): TReadOnlyProperty<import("../../phet-core/js/types/IntentionalAny.js").default>[];
    pdomDependencies: TReadOnlyProperty<import("../../phet-core/js/types/IntentionalAny.js").default>[];
    alertContextResponse(): void;
    reset(): void;
    getAccessibleValueHandlerInputListener(): import("../../scenery/js/imports.js").TInputListener;
    handleKeyDown(event: import("../../scenery/js/imports.js").SceneryEvent<KeyboardEvent>): void;
    handleKeyUp(event: import("../../scenery/js/imports.js").SceneryEvent<KeyboardEvent>): void;
    handleChange(event: import("../../scenery/js/imports.js").SceneryEvent): void;
    handleInput(event: import("../../scenery/js/imports.js").SceneryEvent): void;
    handleBlur(event: import("../../scenery/js/imports.js").SceneryEvent<FocusEvent>): void;
    setKeyboardStep(keyboardStep: number): void;
    keyboardStep: number;
    getKeyboardStep(): number;
    setShiftKeyboardStep(shiftKeyboardStep: number): void;
    shiftKeyboardStep: number;
    getShiftKeyboardStep(): number;
    getShiftKeyDown(): boolean;
    readonly shiftKeyDown: boolean;
    setPageKeyboardStep(pageKeyboardStep: number): void;
    pageKeyboardStep: number;
    getPageKeyboardStep(): number;
    setAriaOrientation(orientation: import("../../phet-core.js").Orientation): void;
    ariaOrientation: import("../../phet-core.js").Orientation;
    getAriaOrientation(): import("../../phet-core.js").Orientation;
    voicingOnEndResponse(valueOnStart: number, providedOptions?: import("../../sun/js/accessibility/AccessibleValueHandler.js").VoicingOnEndResponseOptions): void;
} & import("../../scenery/js/imports.js").TVoicing<Node>>;
export default class FaucetNode extends FaucetNode_base {
    private readonly disposeFaucetNode;
    constructor(maxFlowRate: number, flowRateProperty: Property<number>, enabledProperty: TReadOnlyProperty<boolean>, providedOptions?: FaucetNodeOptions);
    dispose(): void;
    static readonly CLOSE_FAUCET_HOTKEY_DATA: HotkeyData;
    static readonly TAP_TO_DISPENSE_HOTKEY_DATA: HotkeyData;
    static FaucetNodeIO: IOType<any, any, any>;
}
type ShooterNodeSelfOptions = {
    knobScale?: number;
    touchAreaXDilation?: number;
    touchAreaYDilation?: number;
    mouseAreaXDilation?: number;
    mouseAreaYDilation?: number;
};
type ShooterNodeOptions = ShooterNodeSelfOptions;
export {};
//# sourceMappingURL=FaucetNode.d.ts.map