import { Ref } from 'vue';
import { Emitter } from 'mitt';
import { Reactive, ReadonlyRef } from '../../common/common';
import { Events, Layouts, Rectangle } from '../../common/types';
import { NodeStates } from '../../models/node';
import { EdgeStates } from '../../models/edge';
import { PathStates } from '../../models/path';
import { Configs } from '../../common/configs';
import { BoxSelectionOption } from './boxSelection';
type NodeEventHandler<T extends Event = PointerEvent> = (node: string, event: T) => void;
type EdgeEventHandler<T extends Event = PointerEvent> = (edge: string, event: T) => void;
type EdgesEventHandler<T extends Event = PointerEvent> = (edges: string[], event: T) => void;
type PathEventHandler<T extends Event = PointerEvent> = (path: string, event: T) => void;
interface MouseEventHandlers {
    selectedNodes: Reactive<Set<string>>;
    hoveredNodes: Reactive<Set<string>>;
    selectedEdges: Reactive<Set<string>>;
    hoveredEdges: Reactive<Set<string>>;
    selectedPaths: Reactive<Set<string>>;
    hoveredPaths: Reactive<Set<string>>;
    handleNodePointerDownEvent: NodeEventHandler;
    handleNodePointerOverEvent: NodeEventHandler;
    handleNodePointerOutEvent: NodeEventHandler;
    handleNodeClickEvent: NodeEventHandler<MouseEvent>;
    handleNodeDoubleClickEvent: NodeEventHandler<MouseEvent>;
    handleNodeContextMenu: NodeEventHandler<MouseEvent>;
    handleEdgePointerDownEvent: EdgeEventHandler;
    handleEdgePointerOverEvent: EdgeEventHandler;
    handleEdgePointerOutEvent: EdgeEventHandler;
    handleEdgeClickEvent: EdgeEventHandler<MouseEvent>;
    handleEdgeDoubleClickEvent: EdgeEventHandler<MouseEvent>;
    handleEdgeContextMenu: EdgeEventHandler<MouseEvent>;
    handleEdgesPointerDownEvent: EdgesEventHandler;
    handleEdgesPointerOverEvent: EdgesEventHandler;
    handleEdgesPointerOutEvent: EdgesEventHandler;
    handleEdgesClickEvent: EdgesEventHandler<MouseEvent>;
    handleEdgesDoubleClickEvent: EdgesEventHandler<MouseEvent>;
    handleEdgesContextMenu: EdgesEventHandler<MouseEvent>;
    handlePathPointerDownEvent: PathEventHandler;
    handlePathPointerOverEvent: PathEventHandler;
    handlePathPointerOutEvent: PathEventHandler;
    handlePathClickEvent: PathEventHandler<MouseEvent>;
    handlePathDoubleClickEvent: PathEventHandler<MouseEvent>;
    handlePathContextMenu: PathEventHandler<MouseEvent>;
    isBoxSelectionMode: Ref<boolean>;
    selectionBox: Ref<Rectangle>;
    startBoxSelection: (options?: Partial<BoxSelectionOption>) => void;
    stopBoxSelection: () => void;
}
export declare function provideMouseOperation(container: Ref<SVGElement | undefined>, layouts: Readonly<Layouts>, zoomLevel: ReadonlyRef<number>, nodeStates: NodeStates, edgeStates: EdgeStates, pathStates: PathStates, selectedNodes: Reactive<Set<string>>, selectedEdges: Reactive<Set<string>>, selectedPaths: Reactive<Set<string>>, hoveredNodes: Reactive<Set<string>>, hoveredEdges: Reactive<Set<string>>, hoveredPaths: Reactive<Set<string>>, isInCompatibilityModeForPath: Ref<boolean>, isSvgWheelZoomEnabled: Ref<boolean>, configs: Configs, emitter: Emitter<Events>): MouseEventHandlers;
export declare function useMouseOperation(): MouseEventHandlers;
export {};
