import { vec } from "mafs";
import type { SnapTo } from "./types";
import type { Coord } from "../../interactive2/types";
import type { AxisLabelLocation, CollinearTuple, LockedFigureColor, LockedFigureFillType, LockedLineStyle, MarkingsType, PerseusRenderer, StrokeWeight } from "@khanacademy/perseus-core";
export type LockedFunctionOptions = {
    color?: LockedFigureColor;
    strokeStyle?: LockedLineStyle;
    weight?: StrokeWeight;
    directionalAxis?: "x" | "y";
    domain?: [min: number, max: number];
    labels?: LockedFigureLabelOptions[];
    ariaLabel?: string;
};
type LockedFigureLabelOptions = {
    text: string;
    coord?: Coord;
    size?: "small" | "medium" | "large";
};
export declare function interactiveGraphQuestionBuilder(): InteractiveGraphQuestionBuilder;
declare class InteractiveGraphQuestionBuilder {
    private content;
    private fullGraphAriaLabel?;
    private fullGraphAriaDescription?;
    private backgroundImage?;
    private gridStep;
    private labels;
    private labelLocation;
    private markings;
    private xRange;
    private yRange;
    private showAxisArrows;
    private snapStep;
    private tickStep;
    private showProtractor;
    private showTooltips;
    private interactiveFigureConfig;
    private lockedFigures;
    private snapTo;
    private staticMode;
    build(): PerseusRenderer;
    withContent(content: string): InteractiveGraphQuestionBuilder;
    withFullGraphAriaLabel(label: string): InteractiveGraphQuestionBuilder;
    withFullGraphAriaDescription(description: string): InteractiveGraphQuestionBuilder;
    withTooltips(showTooltips: boolean): InteractiveGraphQuestionBuilder;
    withStaticMode(staticMode: boolean): InteractiveGraphQuestionBuilder;
    withBackgroundImage(url: string, height: number, width: number, options?: {
        scale?: number;
        bottom?: number;
        left?: number;
        right?: number;
        top?: number;
    }): InteractiveGraphQuestionBuilder;
    withGridStep(x: number, y: number): InteractiveGraphQuestionBuilder;
    withAxisLabels(x: string, y: string): InteractiveGraphQuestionBuilder;
    withLabelLocation(labelLocation: AxisLabelLocation): InteractiveGraphQuestionBuilder;
    withMarkings(markings: MarkingsType): InteractiveGraphQuestionBuilder;
    withXRange(min: number, max: number): InteractiveGraphQuestionBuilder;
    withYRange(min: number, max: number): InteractiveGraphQuestionBuilder;
    withShowAxisArrows({ xMin, xMax, yMin, yMax, }: {
        xMin?: boolean;
        xMax?: boolean;
        yMin?: boolean;
        yMax?: boolean;
    }): InteractiveGraphQuestionBuilder;
    withSnapStep(x: number, y: number): InteractiveGraphQuestionBuilder;
    withTickStep(x: number, y: number): InteractiveGraphQuestionBuilder;
    withProtractor(): InteractiveGraphQuestionBuilder;
    withSegments(options?: {
        numSegments?: number;
        startCoords?: CollinearTuple[];
        coords?: CollinearTuple[];
    }): InteractiveGraphQuestionBuilder;
    withNoInteractiveFigure(): this;
    withLinear(options?: {
        coords?: CollinearTuple;
        startCoords?: CollinearTuple;
    }): InteractiveGraphQuestionBuilder;
    withLinearSystem(options?: {
        coords?: CollinearTuple[];
        startCoords?: CollinearTuple[];
    }): InteractiveGraphQuestionBuilder;
    withRay(options?: {
        coords?: CollinearTuple;
        startCoords?: CollinearTuple;
    }): InteractiveGraphQuestionBuilder;
    withCircle(options?: {
        center?: Coord;
        radius?: number;
        startCoords?: {
            center: Coord;
            radius: number;
        };
    }): InteractiveGraphQuestionBuilder;
    withQuadratic(options?: {
        coords?: [Coord, Coord, Coord];
        startCoords?: [Coord, Coord, Coord];
    }): InteractiveGraphQuestionBuilder;
    withSinusoid(options?: {
        coords?: [Coord, Coord];
        startCoords?: [Coord, Coord];
    }): InteractiveGraphQuestionBuilder;
    withPolygon(snapTo?: SnapTo, options?: {
        match?: "similar" | "congruent" | "approx";
        numSides?: number | "unlimited";
        showAngles?: boolean;
        showSides?: boolean;
        coords?: Coord[];
        startCoords?: Coord[];
    }): InteractiveGraphQuestionBuilder;
    withPoints(numPoints: number | "unlimited", options?: {
        coords?: Coord[];
        startCoords?: Coord[];
    }): InteractiveGraphQuestionBuilder;
    withAngle(options?: {
        coords?: [Coord, Coord, Coord];
        startCoords?: [Coord, Coord, Coord];
        showAngles?: boolean;
        allowReflexAngles?: boolean;
        angleOffsetDeg?: number;
        snapDegrees?: number;
        match?: "congruent";
    }): InteractiveGraphQuestionBuilder;
    addLockedPointAt(x: number, y: number, options?: {
        color?: LockedFigureColor;
        filled?: boolean;
        labels?: LockedFigureLabelOptions[];
        ariaLabel?: string;
    }): InteractiveGraphQuestionBuilder;
    addLockedLine(point1: vec.Vector2, point2: vec.Vector2, options?: {
        kind?: "line" | "ray" | "segment";
        lineStyle?: LockedLineStyle;
        color?: LockedFigureColor;
        filled?: [boolean, boolean];
        showPoint1?: boolean;
        showPoint2?: boolean;
        weight?: StrokeWeight;
        labels?: LockedFigureLabelOptions[];
        ariaLabel?: string;
    }): InteractiveGraphQuestionBuilder;
    addLockedVector(tail: vec.Vector2, tip: vec.Vector2, options?: {
        color?: LockedFigureColor;
        labels?: LockedFigureLabelOptions[];
        weight?: StrokeWeight;
        ariaLabel?: string;
    }): InteractiveGraphQuestionBuilder;
    addLockedEllipse(center: vec.Vector2, radius: [x: number, y: number], options?: {
        angle?: number;
        color?: LockedFigureColor;
        fillStyle?: LockedFigureFillType;
        strokeStyle?: "solid" | "dashed";
        weight?: StrokeWeight;
        labels?: LockedFigureLabelOptions[];
        ariaLabel?: string;
    }): InteractiveGraphQuestionBuilder;
    addLockedPolygon(points: vec.Vector2[], options?: {
        color?: LockedFigureColor;
        showVertices?: boolean;
        fillStyle?: LockedFigureFillType;
        strokeStyle?: LockedLineStyle;
        weight?: StrokeWeight;
        labels?: LockedFigureLabelOptions[];
        ariaLabel?: string;
    }): InteractiveGraphQuestionBuilder;
    addLockedFunction(equation: string, options?: LockedFunctionOptions): this;
    addLockedLabel(text: string, coord: Coord, options?: {
        color?: LockedFigureColor;
        size?: "small" | "medium" | "large";
    }): this;
    private createLockedPoint;
    private addLockedFigure;
}
export {};
