import { type Handle, type InternalNode, type Node, Position, type ReactFlowState, type XYPosition } from '../xyflow/react.ts';
export declare const selectIsConnecting: (state: ReactFlowState) => boolean;
export declare const getAbsolutePosition: (node: Node, nodes: Node[]) => {
    x: number;
    y: number;
};
export declare function getNonOverlappingPositionForDirection(nodes: Node[], newNodePosition: XYPosition, newNodeStyle: {
    width: number;
    height: number;
}, direction: 'left' | 'right' | 'top' | 'bottom', offset?: number, ignoredNodeTypes?: string[], overflowDirection?: {
    x: 'left' | 'right';
    y: 'up' | 'down';
}): XYPosition;
export declare const snapToGrid: (value: number) => number;
export declare const snapUpToGrid: (value: number) => number;
export declare const snapDownToGrid: (value: number) => number;
export declare const clamp: (value: number, min: number, max: number) => number;
export type CollisionAlgorithmOptions = {
    maxIterations?: number;
    overlapThreshold?: number;
    margin?: number;
    ignoredNodeTypes?: string[];
    getNodeDimensions?: (node: Node) => {
        width: number;
        height: number;
    };
};
export type CollisionAlgorithm = (nodes: Node[], options?: CollisionAlgorithmOptions) => Node[];
export declare const resolveCollisions: CollisionAlgorithm;
export type HandleContext = {
    anchor: {
        x: number;
        y: number;
    };
    index: number | null;
    count: number;
};
export type HandleBoundaryResolver = (handleId: string) => 'outer' | 'inner' | undefined;
export interface ResolveHandleContextOptions {
    boundaryOf?: HandleBoundaryResolver;
}
export declare function resolveHandleContext(internalNode: InternalNode, handleId: string, handlePosition: Position, options?: ResolveHandleContextOptions): HandleContext | undefined;
export declare function getHandleIndex(handleId: string, position: Position, allHandles: Handle[]): number | null;
//# sourceMappingURL=NodeUtils.d.ts.map