import { JSX as JSX_2 } from 'react/jsx-runtime';

declare class File_2 {
    filename: string;
    code: string;
    constructor(filename: string, code: string);
    get language(): "typescript" | "javascript";
}

declare interface ImportMap {
    imports?: Record<string, string | undefined>;
    scopes?: Record<string, Record<string, string>>;
}

export declare const Repl: (props: ReplProps) => JSX_2.Element;

export declare interface ReplProps {
    /**
     * 全局数据
     */
    store?: ReplStore;
    /**
     * 是否自动保存
     * @default true
     */
    autoSave?: boolean;
    /**
     * 主题色
     * @default "light"
     */
    theme?: Theme;
    /**
     * 布局
     * @default 'horizontal'
     */
    layout?: "horizontal" | "vertical";
}

export declare class ReplStore {
    /**
     * file system
     */
    files: StoreParams["files"];
    mainFile: StoreParams["mainFile"];
    activeFilename: StoreParams["activeFilename"];
    template: StoreParams["template"];
    useTs: StoreParams["useTs"];
    version: number;
    private update;
    constructor({ files, template, mainFile, activeFilename, builtinImportMap, useTs, }: Partial<StoreParams> | undefined, update: Subscribe);
    get activeFile(): File_2;
    addFile: (fileOrFilename: string | File_2) => void;
    deleteFile: (filename: string) => void;
    renameFile: (oldFilename: string, newFilename: string) => void;
    updateFile: (code: string) => void;
    setActive: (filename: string) => void;
    getImportMap: () => ImportMap;
    setImportMap: (map: ImportMap) => void;
    serialize: () => string;
    deserialize: (serializedState: string) => void;
}

declare type StoreParams = {
    /** file system */
    files: Record<string, File_2>;
    template: {
        welcomeCode: string;
        templateCode: string;
    };
    mainFile: string;
    activeFilename: string;
    builtinImportMap: ImportMap;
    useTs: boolean;
};

declare type Subscribe = () => void;

declare type Theme = "light" | "dark";

export declare function useStore(storeParams?: Partial<StoreParams>, serializedState?: string): ReplStore;

export { }
