import type { CrosshairClickEvent, CrosshairValue } from './TimeSeriesChart';
import type { Range } from './providers/RangeSelectionProvider';
import type { PlotRenderer, PlotUtilitiesFn } from './renderers/types';
export type CursorState = {
    state: 'off' | 'hover';
    cursor: {
        /** left in pixels, relative to `cursorEl` */
        left: number;
        /** top in pixels, relative to `cursorEl` */
        top: number;
        /** time index */
        index: number;
    } | null;
    /** selection */
    selection: {
        left: number;
        width: number;
    } | null;
    /** series index */
    seriesIndex: number | null;
    /** active plot that user is interacting with */
    active: boolean;
};
type CursorPluginFactoryOptions = {
    id: string;
    plotUtilitiesFn: PlotUtilitiesFn;
    plotRenderer: PlotRenderer;
    cursorEl?: HTMLElement;
    onChange: (state: CursorState) => void;
    onCrosshairChange?: (crosshairValue?: CrosshairValue) => void;
    onCrosshairClick?: (event: CrosshairClickEvent) => void;
    onRangeSelection?: (range: Range, e: MouseEvent) => void;
};
type CursorPluginFactoryResponse = {
    setCrosshairValue: (crosshairValue?: CrosshairValue) => void;
    cleanupEventListeners: () => void;
    setupEventListeners: () => void;
};
export declare function cursorPluginFactory({ id, plotUtilitiesFn, plotRenderer, cursorEl, onChange, onCrosshairChange, onCrosshairClick, onRangeSelection, }: CursorPluginFactoryOptions): CursorPluginFactoryResponse;
type UseCursorPluginParams = {
    id: string;
    plotUtilitiesFn: PlotUtilitiesFn;
    plotRenderer: PlotRenderer;
    cursorEl?: HTMLElement;
    crosshairValue?: CrosshairValue;
    onCrosshairChange?: (crosshairValue?: CrosshairValue) => void;
    onCrosshairClick?: (event: CrosshairClickEvent) => void;
    onRangeSelection?: (range: Range) => void;
};
type UseCursorPluginResponse = {
    cursorState?: CursorState;
};
export declare const useCursorPlugin: ({ id, plotUtilitiesFn, plotRenderer, cursorEl, crosshairValue, onCrosshairChange, onCrosshairClick, onRangeSelection, }: UseCursorPluginParams) => UseCursorPluginResponse;
export {};
