import { AnsiTerminalDisplay } from "./ansi.ts"; import { UIConfig } from "./config.ts"; import { Display } from "./display.ts"; import { TextUI } from "./ui.ts"; import { CanvasTerminalDisplay, DivTerminalDisplay } from "./web.ts"; export const UI_DISPLAY_TYPES = { autodetect: undefined, ansi: AnsiTerminalDisplay, web_div: DivTerminalDisplay, web_canvas: CanvasTerminalDisplay, dummy: Display, } as const; export async function createTextUI( config: Partial, display_type: keyof typeof UI_DISPLAY_TYPES = "autodetect", ): Promise { if (display_type == "autodetect") { if (typeof (window as any).document != "undefined") { display_type = "web_canvas"; // TODO if canvas is not available, fall back to div } else if (typeof (Deno as any) != "undefined") { display_type = "ansi"; } else { const message = "Cannot initialize display"; if (typeof alert == "function") { alert(message); } throw new Error(message); } } var display = new UI_DISPLAY_TYPES[display_type](); var ui = new TextUI(display, config); await ui.init(); return ui; }