UNPKG

vue-web-terminal

Version:

A beautiful web-side command line window plugin (native simulation). 一个漂亮的网页命令行插件(原生模拟)

189 lines (188 loc) 6.07 kB
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 {};