import { vec } from "mafs";
import * as React from "react";
import type { AriaLive } from "../../types";
import type { Interval } from "mafs";
type Props = {
    points: Readonly<[vec.Vector2, vec.Vector2]>;
    ariaLabels?: {
        point1AriaLabel?: string;
        point2AriaLabel?: string;
        grabHandleAriaLabel?: string;
    };
    ariaDescribedBy?: string;
    ariaLive?: AriaLive;
    extend?: {
        start: boolean;
        end: boolean;
    };
    onMovePoint?: (endpointIndex: number, destination: vec.Vector2) => unknown;
    onMoveLine?: (newStart: vec.Vector2) => unknown;
};
export declare const MovableLine: (props: Props) => React.JSX.Element;
export declare const getMovableLineKeyboardConstraint: (line: [vec.Vector2, vec.Vector2], snapStep: vec.Vector2, pointIndex: number) => {
    up: vec.Vector2;
    down: vec.Vector2;
    left: vec.Vector2;
    right: vec.Vector2;
};
export declare function trimRange(range: [Interval, Interval], graphDimensionsInPixels: vec.Vector2): [Interval, Interval];
/**
 * Returns `tip` pulled back toward `tail` by GRAPH_EDGE_INSET_PX, measured
 * in pixel space (not graph units) so the inset looks the same regardless
 * of axis scale. Used to keep arrowhead glyphs from being clipped by the
 * viewport edge.
 */
export declare function insetTipAlongRay(tail: vec.Vector2, tip: vec.Vector2, range: [Interval, Interval], graphDimensionsInPixels: vec.Vector2): vec.Vector2;
export {};
