import { App } from "vue";
export type TerminalMessageClass = 'success' | 'error' | 'info' | 'warning' | 'system';
export type TerminalMessageType = 'cmdLine' | 'normal' | 'json' | 'code' | 'table' | 'html' | 'ansi';
export type TerminalCursorStyle = 'block' | 'underline' | 'bar' | 'none';
export interface VueWebTerminal {
    install: (app: App) => void;
    /**
     * 自定义主题设置，也可以覆盖默认的 dark 和 light 主题
     * @param theme 主题名
     * @param css 主题css内容
     */
    configTheme: (theme: string, css: string) => void;
    /**
     * 配置 local storage 存储名
     * @param name 存储名
     */
    configStoreName: (name: string) => void;
    /**
     * 配置每个Terminal实力存储的指令记录数量
     * @param count
     */
    configMaxStoredCommandCountPerInstance: (count: number) => void;
}
export interface EditorConfig {
    open: boolean;
    focus: boolean;
    value: string;
    onClose: null | Function;
    onFocus?: Function;
    onBlur?: Function;
}
export type Position = {
    x: number;
    y: number;
};
export type DragConfig = {
    width: number | string;
    height: number | string;
    zIndex?: number;
    init?: Position;
    pinned?: boolean;
};
export type ScreenType = {
    xs?: boolean;
    sm?: boolean;
    md?: boolean;
    lg?: boolean;
    xl?: boolean;
};
export type Command = {
    key: string;
    title?: string;
    group?: string;
    usage?: string;
    description?: string;
    example?: Array<CommandExample>;
};
export type CommandExample = {
    cmd: string;
    des?: string;
};
export type CmdHistory = {
    cmdLog: string[];
    cmdIdx: number;
};
export type TerminalConfiguration = {
    storeName: string;
    maxStoredCommandCountPerInstance: number;
    themes: Record<string, string>;
};
export type MessageContentTable = {
    head: string[];
    rows: string[][];
};
export type MessageGroup = {
    fold: boolean;
    logs: Message[];
    tag?: string;
};
export type Message = {
    type?: TerminalMessageType;
    content: string | number | object | MessageContentTable | Array<any>;
    class?: TerminalMessageClass;
    tag?: string;
    depth?: number;
};
export type AskConfig = {
    isPassword: boolean;
    question: string;
    autoReview: boolean;
    callback?: (value: string) => void;
};
export type InputTipItem = {
    content: string;
    description?: string;
    command?: Command;
};
export type CharWidth = {
    en?: number;
    cn?: number;
};
export type TerminalElementInfo = {
    pos: Position;
    screenWidth: number;
    screenHeight: number;
    clientWidth: number;
    clientHeight: number;
    charWidth: CharWidth;
};
export type CommandSortHandlerFunc = (a: any, b: any) => number;
export type InputFilterFunc = (str1: string, str2: string, event: InputEvent | CompositionEvent) => string | null;
export type CommandFormatterFunc = (cmd: string) => string;
export type TerminalApiListenerFunc = (type: string, options?: any) => any | void;
export type SuccessFunc = (message?: Message | Array<Message> | string | TerminalFlash | TerminalAsk) => void;
export type FailedFunc = (message: string) => void;
export type PushMessageBeforeFunc = (message: Message, name: String) => void;
/**
 * 提示选择处理函数
 *
 * @param command       当前用户输入的完整命令行
 * @param cursorIndex   当前光标所处位置
 * @param item          用户选择提示项
 * @param callback      填充结束后需调用此函数返回新的命令行
 */
export type InputTipsSelectHandlerFunc = (command: string, cursorIndex: number, item: InputTipItem, callback: (cmd: string) => void) => void;
/**
 * 用户自定义命令搜索提示实现
 *
 * @param command       当前用户输入的完整命令行
 * @param cursorIndex   当前光标所处位置
 * @param commandStore  命令集合
 * @param callback      搜索结束回调，回调格式为一个数组
 */
export type InputTipsSearchHandlerFunc = (command: string, cursorIndex: number, commandStore: Command[], callback: (tips: InputTipItem[], openTips?: boolean) => void) => void;
declare class TerminalCallback {
    onFinishListener: Function;
    finish(): void;
    onFinish(callback: Function): void;
}
export declare class TerminalAsk extends TerminalCallback {
    handler: Function;
    ask(options: AskConfig): void;
    onAsk(callback: (config: AskConfig) => void): void;
}
export declare class TerminalFlash extends TerminalCallback {
    handler: Function;
    flush(msg: string): void;
    onFlush(callback: (msg: string) => void): void;
}
export interface TerminalApiData {
    pool: {
        [key: string]: TerminalApiListenerFunc;
    };
    configuration: TerminalConfiguration;
}
export declare class TerminalApi {
    data: TerminalApiData;
    constructor(data: TerminalApiData);
    post(name: string, event: string, options?: any): any;
    pushMessage(name: string, message: Message | Array<Message> | string): void;
    appendMessage(name: string, message: string): void;
    fullscreen(name: string): void;
    isFullscreen(name: string): boolean;
    dragging(name: string, position: Position): void;
    /**
     * Simulate trigger execution instructions
     *
     * @param name name of terminal
     * @param command content of the command
     * @return { boolean } Trigger success
     */
    execute(name: string, command: string): boolean;
    focus(name: string, enforce?: boolean): void;
    elementInfo(name: string): TerminalElementInfo;
    textEditorOpen(name: string, setting?: EditorSetting): void;
    textEditorClose(name: string, closeCallbackParams?: any): string | undefined;
    clearLog(name: string, clearHistory?: boolean): void;
    getCommand(name: string): string;
    setCommand(name: string, newCommand: string): void;
    switchAllFoldState(name: string, foldStat: boolean): number;
    jumpToBottom(name: string, enforce: boolean): void;
    getOutputs(name: string): MessageGroup[];
}
export interface EditorSetting {
    content: string;
    onClose: Function;
}
export {};
