import { Changeable } from "@khanacademy/perseus";
import * as React from "react";
import type { Coords, MarkingsType } from "@khanacademy/perseus-core";
type Props = {
    editableSettings: ReadonlyArray<"canvas" | "graph" | "snap" | "image" | "measure">;
    box: readonly number[];
    labels: readonly string[];
    range: Coords;
    step: [number, number];
    gridStep: [number, number];
    snapStep: [number, number];
    valid: boolean;
    backgroundImage: any;
    markings: MarkingsType;
    showProtractor?: boolean;
    showRuler?: boolean;
    showTooltips?: boolean;
    rulerLabel: string;
    rulerTicks: number;
} & Changeable.ChangeableProps;
type DefaultProps = {
    editableSettings: Props["editableSettings"];
    box: Props["box"];
    labels: Props["labels"];
    range: Props["range"];
    step: Props["step"];
    gridStep: Props["gridStep"];
    snapStep: Props["snapStep"];
    valid: Props["valid"];
    backgroundImage: Props["backgroundImage"];
    markings: Props["markings"];
    rulerLabel: Props["rulerLabel"];
    rulerTicks: Props["rulerTicks"];
    showProtractor?: Props["showProtractor"];
    showRuler?: Props["showRuler"];
    showTooltips?: Props["showTooltips"];
};
type State = {
    labelsTextbox: string[];
    gridStepTextbox: number[];
    snapStepTextbox: number[];
    stepTextbox: number[];
    rangeTextbox: any[];
    backgroundImage: any;
};
declare class GraphSettings extends React.Component<Props, State> {
    static displayName: "GraphSettings";
    static defaultProps: DefaultProps;
    _isMounted: boolean;
    constructor(props: any);
    getInitialState(): {
        labelsTextbox: any;
        gridStepTextbox: any;
        snapStepTextbox: any;
        stepTextbox: any;
        rangeTextbox: any;
        backgroundImage: any;
    };
    componentDidMount(): void;
    UNSAFE_componentWillReceiveProps(nextProps: any): void;
    componentWillUnmount(): void;
    stateFromProps(props: any): {
        labelsTextbox: any;
        gridStepTextbox: any;
        snapStepTextbox: any;
        stepTextbox: any;
        rangeTextbox: any;
        backgroundImage: any;
    };
    change(...args: any[]): any;
    changeRulerLabel(e: any): void;
    changeRulerTicks(e: any): void;
    changeBackgroundUrl(e: any): void;
    renderLabelChoices(choices: any): React.JSX.Element[];
    validRange(range: any): true | "Range must be a valid number" | "Range must have a higher number on the right";
    validateStepValue(settings: any): string | true;
    validSnapStep(step: any, range: any): string | true;
    validGridStep(step: any, range: any): string | true;
    validStep(step: any, range: any): string | true;
    validBackgroundImageSize(image: any): true | "Image must be smaller than 450px x 450px.";
    validateGraphSettings(range: any, step: any, gridStep: any, snapStep: any, image: any): any;
    changeLabel(i: any, e: any): void;
    changeRange(i: any, values: any): void;
    changeStep(step: any): void;
    changeSnapStep(snapStep: any): void;
    changeGridStep(gridStep: any): void;
    changeGraph(): void;
    render(): React.JSX.Element;
}
export default GraphSettings;
