import { ImportProjectOptions, PythonEditorWorkspaceRequest, PythonProject } from './common.js';
export declare const createPythonEditorURL: (version: string, lang: string | undefined, controller: 1 | 2 | undefined, queryParams: Record<string, string> | undefined) => string;
export interface Options {
    /**
     * A function that provides the initial set of projects to be used.
     *
     * This will also be used if the iframe reloads itself.
     *
     */
    initialProjects: () => Promise<PythonProject[]>;
    /**
     * Set this to a value representing your app.
     */
    controllerId?: string;
    /**
     * Called when the workspace is ready to sync.
     */
    onWorkspaceSync?(event: PythonEditorWorkspaceRequest): void;
    /**
     * Called when the workspace sync is complete.
     */
    onWorkspaceLoaded?(event: PythonEditorWorkspaceRequest): void;
    /**
     * Implement this to update the data store that `initialProjects` reads from.
     */
    onWorkspaceSave?(event: PythonEditorWorkspaceRequest): void;
}
export declare class PythonEditorFrameDriver {
    private options;
    private iframe;
    private ready;
    private messageQueue;
    private nextId;
    private pendingResponses;
    constructor(options: Options, iframe: () => HTMLIFrameElement | undefined);
    initialize(): void;
    dispose(): void;
    setOptions(options: Options): void;
    private _expectedOrigin;
    private expectedOrigin;
    private listener;
    /**
     * Import a project.
     */
    importProject(options: ImportProjectOptions): Promise<void>;
    private sendRequest;
    private sendMessage;
    private sendMessageNoReadyCheck;
    private handleWorkspaceSync;
}
