/** * TUI config selector for `companion config` command */ import { ProcessTerminal, TUI } from "@mariozechner/companion-tui"; import type { ResolvedPaths } from "../core/package-manager.js"; import type { SettingsManager } from "../core/settings-manager.js"; import { ConfigSelectorComponent } from "../modes/interactive/components/config-selector.js"; import { initTheme, stopThemeWatcher, } from "../modes/interactive/theme/theme.js"; export interface ConfigSelectorOptions { resolvedPaths: ResolvedPaths; settingsManager: SettingsManager; cwd: string; agentDir: string; } /** Show TUI config selector and return when closed */ export async function selectConfig( options: ConfigSelectorOptions, ): Promise { // Initialize theme before showing TUI initTheme(options.settingsManager.getTheme(), true); return new Promise((resolve) => { const ui = new TUI(new ProcessTerminal()); let resolved = false; const selector = new ConfigSelectorComponent( options.resolvedPaths, options.settingsManager, options.cwd, options.agentDir, () => { if (!resolved) { resolved = true; ui.stop(); stopThemeWatcher(); resolve(); } }, () => { ui.stop(); stopThemeWatcher(); process.exit(0); }, () => ui.requestRender(), ); ui.addChild(selector); ui.setFocus(selector.getResourceList()); ui.start(); }); }