feat(v0.3): M3 themes/font settings + M7 session dashboard

- M3: settings.ts (⚙ panel: dark/light/solarized theme + font size A-/A+),
  persisted to localStorage; terminal-session.applyTheme; TabApp.applySettings
  applies to all + new tabs
- M7: dashboard.ts (▦ overlay listing every tab with connection dot + folder +
  Claude status; click a row to focus; live re-render while open);
  TabApp.snapshot()/focusTab()
- Browser-verified: light theme renders + persists; dashboard lists tabs and
  focuses on click. 208 tests green, typechecks + build ok.
This commit is contained in:
Yaojia Wang
2026-06-18 05:40:35 +02:00
parent dcb1bf4845
commit f79f14b89d
6 changed files with 384 additions and 0 deletions

View File

@@ -9,6 +9,7 @@
*/
import { Terminal } from '@xterm/xterm'
import type { ITheme } from '@xterm/xterm'
import { FitAddon } from '@xterm/addon-fit'
import { SearchAddon } from '@xterm/addon-search'
import { WebLinksAddon } from '@xterm/addon-web-links'
@@ -302,6 +303,16 @@ export class TerminalSession {
this.searchAddon.clearDecorations()
}
/** Apply a theme + font size (M3) and re-fit if visible. */
applyTheme(theme: ITheme, fontSize: number): void {
this.term.options.theme = theme
this.term.options.fontSize = fontSize
if (this.el.style.display !== 'none') {
const dims = this.safefit()
if (dims !== null) this.sendResize(dims.cols, dims.rows)
}
}
/** Make this pane visible, fit it, and focus it. */
show(): void {
this.el.style.display = 'block'