import React, { CSSProperties } from "react";
import { FileMap, PrismaQuery, ThemeName } from "../editor";
export declare type EditorProps = {
    /** (Controlled) Value of the editor.
     *
     * Typically, you should only react to changes to the value by subscribing to `onChange`, and let the editor own the `value`.
     * Changing this value on your own will force the editor to be redrawn from scratch.
     */
    value?: string;
    /** Controls if the editor is readonly */
    readonly?: boolean;
    /** Theme for the editor */
    theme?: ThemeName;
    /** Additional styles for the editor container */
    style?: CSSProperties;
    /** Additional classes for the editor container */
    className?: string;
    /** Callback called when the value of the editor changes (debounced) */
    onChange?: (value: string) => void;
} & ({
    /** Language to syntax highlight text as */
    lang: "ts";
    /** Additional Typescript types to load into the editor */
    types?: FileMap;
    /** Callback called when the user requests a query to be run */
    onExecuteQuery?: (query: PrismaQuery) => void;
    /** Callback called every time the user's cursor moves inside a query */
    onEnterQuery?: (query: PrismaQuery) => void;
    /** Callback called every time the user's cursor moves outside a query */
    onLeaveQuery?: () => void;
} | {
    lang: "json";
} | {
    lang: "sql";
} | {
    lang: "prisma";
});
export declare class Editor extends React.Component<EditorProps> {
    private ref;
    private editor?;
    private resizeObserver?;
    componentDidMount(): void;
    shouldComponentUpdate(nextProps: EditorProps): boolean;
    componentDidUpdate(prevProps: EditorProps): void;
    componentWillUnmount(): void;
    render(): JSX.Element;
}
