/// <reference path="../../localtypings/pxteditor.d.ts" />
import { IframeDriver } from "./iframeDriver";
declare const MessageReceivedEvent = "message";
declare const MessageSentEvent = "sent";
export interface IframeWorkspaceStatus {
    projects: pxt.workspace.Project[];
    editor?: pxt.editor.EditorSyncState;
    controllerId?: string;
}
export interface IFrameWorkspaceHost {
    saveProject(project: pxt.workspace.Project): Promise<void>;
    getWorkspaceProjects(): Promise<IframeWorkspaceStatus>;
    resetWorkspace(): Promise<void>;
    onWorkspaceLoaded?(): Promise<void>;
}
/**
 * Manages communication with the editor iframe.
 */
export declare class EditorDriver extends IframeDriver {
    iframe: HTMLIFrameElement;
    host?: IFrameWorkspaceHost;
    constructor(iframe: HTMLIFrameElement, host?: IFrameWorkspaceHost);
    switchEditorLanguage(lang: "typescript" | "blocks" | "python"): Promise<void>;
    setLanguageRestriction(restriction: pxt.editor.LanguageRestriction): Promise<void>;
    startSimulator(): Promise<void>;
    stopSimulator(unload?: boolean): Promise<void>;
    restartSimulator(): Promise<void>;
    hideSimulator(): Promise<void>;
    showSimulator(): Promise<void>;
    setSimulatorFullscreen(on: boolean): Promise<void>;
    closeFlyout(): Promise<void>;
    unloadProject(): Promise<void>;
    saveProject(): Promise<void>;
    compile(): Promise<void>;
    undo(): Promise<void>;
    redo(): Promise<void>;
    setHighContrast(on: boolean): Promise<void>;
    showThemePicker(): Promise<void>;
    toggleHighContrast(): Promise<void>;
    toggleGreenScreen(): Promise<void>;
    toggleAccessibleBlocks(): Promise<void>;
    toggleSloMo(intervalSpeed?: number): Promise<void>;
    setSloMoEnabled(enabled: boolean, intervalSpeed?: number): Promise<void>;
    printProject(): Promise<void>;
    getInfo(): Promise<pxt.editor.InfoMessage>;
    newProject(options: pxt.editor.ProjectCreationOptions): Promise<void>;
    importProject(project: pxt.workspace.Project, filters?: pxt.editor.ProjectFilters, searchBar?: boolean): Promise<void>;
    importExternalProject(project: pxt.workspace.Project): Promise<string>;
    openHeader(headerId: string): Promise<void>;
    shareHeader(headerId: string, projectName: string): Promise<pxt.editor.ShareData>;
    startActivity(activityType: "tutorial" | "example" | "recipe", path: string, title?: string, previousProjectHeaderId?: string, carryoverPreviousCode?: boolean): Promise<void>;
    importTutorial(markdown: string): Promise<void>;
    pair(): Promise<void>;
    decompileToBlocks(ts: string, snippetMode?: boolean, layout?: pxt.editor.BlockLayout): Promise<pxt.editor.EditorMessageRenderBlocksResponse>;
    decompileToPython(ts: string): Promise<string>;
    renderXml(xml: string): Promise<any>;
    renderByBlockId(blockId: string): Promise<any>;
    getToolboxCategories(advanced?: boolean): Promise<pxt.editor.ToolboxCategoryDefinition[]>;
    getBlockAsText(blockId: string): Promise<pxt.editor.BlockAsText | undefined>;
    runValidatorPlan(validatorPlan: pxt.blocks.ValidatorPlan, planLib: pxt.blocks.ValidatorPlan[]): Promise<pxt.blocks.EvaluationResult>;
    saveLocalProjectsToCloud(headerIds: string[]): Promise<pxt.editor.EditorMessageSaveLocalProjectsToCloudResponse>;
    convertCloudProjectsToLocal(userId: string): Promise<void>;
    requestProjectCloudStatus(headerIds: string[]): Promise<void>;
    precacheTutorial(data: pxt.github.GHTutorialResponse): Promise<void>;
    setColorTheme(colorThemeId: string, savePreference: boolean): Promise<void>;
    addEventListener(event: typeof MessageSentEvent, handler: (ev: pxt.editor.EditorMessage) => void): void;
    addEventListener(event: typeof MessageReceivedEvent, handler: (ev: pxt.editor.EditorMessage) => void): void;
    addEventListener(event: "event", handler: (ev: pxt.editor.EditorMessageEventRequest) => void): void;
    addEventListener(event: "simevent", handler: (ev: pxt.editor.EditorSimulatorEvent) => void): void;
    addEventListener(event: "tutorialevent", handler: (ev: pxt.editor.EditorMessageTutorialEventRequest) => void): void;
    addEventListener(event: "workspacesave", handler: (ev: pxt.editor.EditorWorkspaceSaveRequest) => void): void;
    addEventListener(event: "workspaceevent", handler: (ev: pxt.editor.EditorWorkspaceEvent) => void): void;
    addEventListener(event: "workspacereset", handler: (ev: pxt.editor.EditorWorkspaceSyncRequest) => void): void;
    addEventListener(event: "workspacesync", handler: (ev: pxt.editor.EditorWorkspaceSyncRequest) => void): void;
    addEventListener(event: "workspaceloaded", handler: (ev: pxt.editor.EditorWorkspaceSyncRequest) => void): void;
    addEventListener(event: "workspacediagnostics", handler: (ev: pxt.editor.EditorWorkspaceDiagnostics) => void): void;
    addEventListener(event: "editorcontentloaded", handler: (ev: pxt.editor.EditorContentLoadedRequest) => void): void;
    addEventListener(event: "projectcloudstatus", handler: (ev: pxt.editor.EditorMessageProjectCloudStatus) => void): void;
    addEventListener(event: "serviceworkerregistered", handler: (ev: pxt.editor.EditorMessageServiceWorkerRegisteredRequest) => void): void;
    sendMessage(message: pxt.editor.EditorMessageRequest): Promise<pxt.editor.EditorMessageResponse>;
    protected handleMessage(event: MessageEvent): void;
    protected handleWorkspaceSync(event: pxt.editor.EditorWorkspaceSyncRequest | pxt.editor.EditorWorkspaceSaveRequest): Promise<void>;
}
export {};
