import { EventEmitter } from "eventemitter3";
import { EditorView } from "@codemirror/view";
import { Compartment } from "@codemirror/state";
import { type Diagnostic } from "@codemirror/lint";
import { type ServerResponseCallback } from "@gdquest/codemirror-lsp";
import { type GdExerciseFile } from "../utils.mjs";
export interface CodeControllerFile {
    file: GdExerciseFile;
    diagnostics: Diagnostic[];
}
export interface CodeControllerEvents {
    ready: () => void;
    clientLspCommand: (jsonRpc: string) => void;
    save: (file: GdExerciseFile) => void;
}
export declare class CodeController extends EventEmitter<CodeControllerEvents> {
    projectId: string;
    projectUrl: string;
    project: string;
    parent: HTMLElement | null;
    language: Compartment;
    lsp: Compartment;
    freeze: Compartment;
    tabSize: Compartment;
    theme: Compartment;
    highlight: Compartment;
    view: EditorView | null;
    emitServerCommand: ServerResponseCallback | null;
    loadedFiles: CodeControllerFile[];
    currentFile: CodeControllerFile | null;
    snippet: string;
    get isSnippet(): boolean;
    set isSnippet(_: boolean);
    _darkMode: boolean;
    get darkMode(): boolean;
    set darkMode(val: boolean);
    get currentDoc(): string;
    set currentDoc(doc: string);
    get editorDoc(): string;
    constructor(projectId: string, project: string, projectUrl: string, files: GdExerciseFile[], darkMode?: boolean, snippet?: string);
    _loadFiles(filesToLoad: GdExerciseFile[]): void;
    /**
     * Load dynamically GDScript to reduce load size
     */
    _importGdScript(): Promise<void>;
    /**
     * Load dynamically LSP to reduce load size
     */
    _importLsp(): Promise<void>;
    /**
     * Load dynamically freeze to reduce load size
     */
    _importFreeze(): Promise<void>;
    _onClientCommand(jsonRpc: string): void;
    init(): Promise<void>;
    changeFile(file?: CodeControllerFile | null): void;
    saveDoc(doc: string): void;
    getOriginalDoc(): string;
    revertDoc(): void;
    handleError(message: string): Promise<void>;
    dispose(): void;
}
//# sourceMappingURL=code.d.mts.map