/**
 *
 *  Copyright (c) "Neo4j"
 *  Neo4j Sweden AB [http://neo4j.com]
 *
 *  This file is part of Neo4j.
 *
 *  Neo4j is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
import { type HitTargets, type Node, type Relationship } from '@neo4j-nvl/base';
import { type MouseEventCallbacks } from '@neo4j-nvl/react';
import { type Gesture, type GraphSelection, type InteractionMode } from './graph-visualization-context';
export type ManagedSelectionArgs = {
    selected: GraphSelection;
    setSelected: (newSelection: GraphSelection) => void;
    gesture: Gesture;
    interactionMode: InteractionMode;
    setInteractionMode: (newInteractionMode: InteractionMode) => void;
    mouseEventCallbacks: MouseEventCallbacks;
    nvlGraph: {
        nodes: Node[];
        rels: Relationship[];
    };
};
export declare function useManagedSelectionState({ selected, setSelected, gesture, interactionMode, setInteractionMode, mouseEventCallbacks, nvlGraph, }: ManagedSelectionArgs): {
    nodesWithSelection: {
        selected: boolean;
        size?: number;
        pinned?: boolean;
        x?: number;
        y?: number;
        activated?: boolean;
        icon?: string;
        html?: HTMLElement;
        id: string;
        color?: string;
        caption?: string;
        disabled?: boolean;
        hovered?: boolean;
        captionSize?: number;
        captionAlign?: "top" | "bottom" | "center";
        captions?: import("@neo4j-nvl/base").StyledCaption[];
        overlayIcon?: {
            url: string;
            position?: number[];
            size?: number;
        };
    }[];
    relsWithSelection: {
        selected: boolean;
        from: string;
        to: string;
        type?: string;
        width?: number;
        captionHtml?: HTMLElement;
        id: string;
        color?: string;
        caption?: string;
        disabled?: boolean;
        hovered?: boolean;
        captionSize?: number;
        captionAlign?: "top" | "bottom" | "center";
        captions?: import("@neo4j-nvl/base").StyledCaption[];
        overlayIcon?: {
            url: string;
            position?: number[];
            size?: number;
        };
    }[];
    wrappedMouseEventCallbacks: {
        onBoxSelect: boolean | (({ nodes, rels }: {
            nodes: Node[];
            rels: Relationship[];
        }, evt: MouseEvent) => void);
        onBoxStarted: boolean | ((event: MouseEvent) => void) | undefined;
        onCanvasClick: boolean | ((evt: MouseEvent) => void);
        onDragEnd: boolean | ((draggedNodes: Node[], evt: MouseEvent) => void);
        onDragStart: boolean | ((draggedNodes: Node[], evt: MouseEvent) => void);
        onDrawEnded: boolean | ((newRelationshipToAdd: Relationship | null, newTargetNodeToAdd: Node | null, event: MouseEvent) => void);
        onDrawStarted: boolean | ((evt: MouseEvent) => void);
        onHover: boolean | ((element: Node | Relationship, hitElements: HitTargets, event: MouseEvent) => void) | undefined;
        onHoverNodeMargin: boolean | ((hoveredNode: Node | null, evt: MouseEvent) => void) | undefined;
        onLassoSelect: boolean | (({ nodes, rels }: {
            nodes: Node[];
            rels: Relationship[];
        }, evt: MouseEvent) => void);
        onLassoStarted: boolean | ((event: MouseEvent) => void) | undefined;
        onNodeClick: boolean | ((node: Node, hitElements: HitTargets, evt: MouseEvent) => void);
        onNodeDoubleClick: boolean | ((node: Node, hitElements: HitTargets, evt: MouseEvent) => void);
        onPan: boolean | ((panning: {
            x: number;
            y: number;
        }, event: MouseEvent) => void);
        onRelationshipClick: boolean | ((relationship: Relationship, hitElements: HitTargets, evt: MouseEvent) => void);
        onRelationshipDoubleClick: boolean | ((relationship: Relationship, hitElements: HitTargets, evt: MouseEvent) => void);
        onZoom: boolean | ((zoomLevel: number, event: WheelEvent) => void);
        onCanvasDoubleClick?: ((event: MouseEvent) => void) | boolean;
        onCanvasRightClick?: ((event: MouseEvent) => void) | boolean;
        onNodeRightClick?: ((node: Node, hitElements: HitTargets, event: MouseEvent) => void) | boolean;
        onRelationshipRightClick?: ((relationship: Relationship, hitElements: HitTargets, event: MouseEvent) => void) | boolean;
        onDrag?: ((nodes: Node[], evt: MouseEvent) => void) | boolean;
    };
};
