import * as React from "react";
import { Graphie as GraphieDrawingContext } from "../util/graphie";
import type { Coord } from "../interactive2/types";
import type { Range, Size } from "@khanacademy/perseus-core";
type Props = {
    addMouseLayer?: boolean;
    box: Size;
    range: [Coord, Coord];
    ranges?: [Range, Range];
    gridStep?: [number, number];
    step?: [number, number];
    scale?: [number, number];
    isMobile?: boolean;
    responsive?: boolean;
    children?: React.ReactNode;
    options: any;
    setDrawingAreaAvailable?: (boolean: any) => void;
    setup: (graphie: any, options: {
        range: [Coord, Coord];
        scale: [number, number];
    }) => void;
    onClick?: (at: Coord) => void;
    onMouseDown?: (at: Coord) => void;
    onMouseMove?: (at: Coord) => void;
};
type DefaultProps = {
    range: Props["range"];
    options: Props["options"];
    responsive: Props["responsive"];
    addMouseLayer: Props["addMouseLayer"];
};
interface Movable {
    remove(): void;
    props: unknown;
    modify(graphie: GraphieDrawingContext): "reordered" | undefined;
    toFront(): void;
}
declare class Graphie extends React.Component<Props> {
    graphieDivRef: React.RefObject<HTMLDivElement>;
    _graphie: GraphieDrawingContext;
    _movables: Record<string, Movable>;
    movables: Record<string, Movable>;
    static defaultProps: DefaultProps;
    componentDidMount(): void;
    shouldComponentUpdate(nextProps: Props): boolean;
    componentDidUpdate(prevProps: Props): void;
    componentWillUnmount(): void;
    /**
     * Allow parents of the <Graphie> component to grab a reference to the
     * underlying graphie object using
     * `this.refs.graphieComponent.getGraphie()`
     *
     * This shouldn't be necessary for 90% of cases, but the power is there.
     * Use it for good and not evil.
     */
    getGraphie: () => any;
    _range: () => [Coord, Coord];
    _box: () => Size;
    _scale: () => Coord;
    _setupGraphie: () => void;
    _removeMovables: () => void;
    _renderMovables: (children: ReadonlyArray<any>, arg2: {
        nextKey: number;
        graphie: GraphieDrawingContext;
        oldMovables: Record<string, Movable>;
        newMovables: Record<string, Movable>;
    }) => React.ReactElement;
    _updateMovables: () => void;
    render(): React.ReactNode;
}
export default Graphie;
