import type { ViewModel } from '../../main/view-model.js';
import type { Suggestion } from '../../main/query-suggestions.js';
import { Emitter } from '../../core/emitter.js';
import CodeMirror from 'codemirror';
import 'codemirror/mode/javascript/javascript.js';
import './editors-hint.js';
export type EditorOptions = {
    mode: string | {
        name: string;
        isDiscoveryViewDefined?: (name: string) => boolean;
    };
    placeholder: string;
    hint: EditorHintOptions['hint'];
};
export type EditorHintOptions = {
    closeOnUnfocus: boolean;
    container: HTMLElement;
    hint(cm: CodeMirror): null | EditorHintResult;
};
export type EditorHintResult = {
    list: EditorHintSuggestion[];
};
export type EditorHintSuggestion = {
    entry: Suggestion;
    text: string;
    render(el: HTMLElement, result: EditorHintResult, suggestion: EditorHintSuggestion): void;
    from: number;
    to: number;
};
export declare class Editor extends Emitter<{
    change: [newValue: string];
}> {
    static CodeMirror: any;
    el: HTMLElement;
    cm: CodeMirror;
    get container(): HTMLElement | null;
    constructor({ hint, mode, placeholder }: Partial<EditorOptions>);
    getValue(): any;
    setValue(value: string | undefined): boolean;
    focus(): void;
}
export declare class QueryEditor extends Editor {
    private queryData;
    private queryContext;
    inputPanelEl: HTMLElement;
    outputPanelEl: HTMLElement;
    constructor(getSuggestions: (value: string, offset: number, data: unknown, context: unknown) => Suggestion[] | null);
    setValue(value: string | undefined, data?: unknown, context?: unknown): boolean;
}
export declare class ViewEditor extends Editor {
    constructor();
    isViewDefined(name: string): boolean;
}
export default function (host: ViewModel): void;
