import * as solid_js from 'solid-js';
import { ConfigurableEventFilter, MaybeAccessor } from '@solidjs-use/shared';
import { Position } from '../types.js';
import { ConfigurableWindow } from '../_configurable.js';

type UseMouseCoordType = 'page' | 'client' | 'screen' | 'movement';
type UseMouseSourceType = 'mouse' | 'touch' | null;
type UseMouseEventExtractor = (event: MouseEvent | Touch) => [x: number, y: number] | null | undefined;
interface UseMouseOptions extends ConfigurableWindow, ConfigurableEventFilter {
    /**
     * Mouse position based by page, client, screen, or relative to previous position
     *
     * @default 'page'
     */
    type?: UseMouseCoordType | UseMouseEventExtractor;
    /**
     * Listen events on `target` element
     *
     * @default 'Window'
     */
    target?: MaybeAccessor<Window | EventTarget | null | undefined>;
    /**
     * Listen to `touchmove` events
     *
     * @default true
     */
    touch?: boolean;
    /**
     * Reset to initial value when `touchend` event fired
     *
     * @default false
     */
    resetOnTouchEnds?: boolean;
    /**
     * Initial values
     */
    initialValue?: Position;
}
/**
 * Reactive mouse position.
 *
 * @see https://solidjs-use.github.io/solidjs-use/core/useMouse
 */
declare function useMouse(options?: UseMouseOptions): {
    x: solid_js.Accessor<number>;
    y: solid_js.Accessor<number>;
    setX: solid_js.Setter<number>;
    setY: solid_js.Setter<number>;
    sourceType: solid_js.Accessor<UseMouseSourceType>;
};
type UseMouseReturn = ReturnType<typeof useMouse>;

export { UseMouseCoordType, UseMouseEventExtractor, UseMouseOptions, UseMouseReturn, UseMouseSourceType, useMouse };