import '../../../globals.js';
/**
 * A drag listener that supports both pointer and keyboard input. It is composed with a DragListener and a
 * KeyboardDragListener to support pointer input and alternative input. In the future it can support other
 * input modalities or PhET-specific features.
 *
 * Be sure to dispose of this listener when it is no longer needed.
 *
 * Options that are common to both listeners are provided directly to this listener. Options that are specific to
 * a particular listener can be provided through the dragListenerOptions or keyboardDragListenerOptions.
 *
 * Typical PhET usage will use a position Property in a model coordinate frame and look like this:
 *
 *     // A focusable Node that can be dragged with pointer or keyboard.
 *     const draggableNode = new Node( {
 *       tagName: 'div',
 *       focusable: true
 *     } );
 *
 *     const richDragListener = new RichDragListener( {
 *       positionProperty: someObject.positionProperty,
 *       transform: modelViewTransform
 *     } );
 *
 *     draggableNode.addInputListener( richDragListener );
 *
 * This listener works by implementing TInputListener and forwarding input events to the specific listeners. This is
 * how we support adding this listener through the scenery input listener API.
 *
 * @author Jesse Greenberg
 */
import { AllDragListenerOptions, DragListener, DragListenerOptions, Hotkey, KeyboardDragListener, KeyboardDragListenerOptions, PressListenerDOMEvent, PressListenerEvent, SceneryEvent, TInputListener } from '../imports.js';
import TReadOnlyProperty from '../../../axon/js/TReadOnlyProperty.js';
import { KeyboardDragListenerDOMEvent } from './KeyboardDragListener.js';
type SelfOptions = AllDragListenerOptions<DragListener | KeyboardDragListener, PressListenerDOMEvent | KeyboardDragListenerDOMEvent> & {
    dragListenerOptions?: DragListenerOptions;
    keyboardDragListenerOptions?: KeyboardDragListenerOptions;
};
export type RichDragListenerOptions = SelfOptions;
export default class RichDragListener implements TInputListener {
    readonly dragListener: DragListener;
    readonly keyboardDragListener: KeyboardDragListener;
    readonly isPressedProperty: TReadOnlyProperty<boolean>;
    readonly hotkeys: Hotkey[];
    constructor(providedOptions?: RichDragListenerOptions);
    get isPressed(): boolean;
    dispose(): void;
    /**
     * ********************************************************************
     * Forward input to both listeners
     * ********************************************************************
     */
    interrupt(): void;
    /**
     * ********************************************************************
     * Forward to the KeyboardListener
     * ********************************************************************
     */
    keydown(event: SceneryEvent<KeyboardEvent>): void;
    focusout(event: SceneryEvent): void;
    focusin(event: SceneryEvent): void;
    cancel(): void;
    /**
     * ********************************************************************
     * Forward to the DragListener
     * ********************************************************************
     */
    click(event: SceneryEvent<MouseEvent>): void;
    touchenter(event: PressListenerEvent): void;
    touchmove(event: PressListenerEvent): void;
    focus(event: SceneryEvent<FocusEvent>): void;
    blur(): void;
    down(event: PressListenerEvent): void;
    up(event: PressListenerEvent): void;
    enter(event: PressListenerEvent): void;
    move(event: PressListenerEvent): void;
    exit(event: PressListenerEvent): void;
    pointerUp(event: PressListenerEvent): void;
    pointerCancel(event: PressListenerEvent): void;
    pointerMove(event: PressListenerEvent): void;
    pointerInterrupt(): void;
}
export {};
//# sourceMappingURL=RichDragListener.d.ts.map