diff options
| author | Paul Buetow <paul@buetow.org> | 2026-03-05 19:20:18 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-03-05 19:20:18 +0200 |
| commit | bab716a6a5931c211fad2f17ee2f67e8d182a7fc (patch) | |
| tree | 89b16ed3bf85198dd63751d2e1e54537c9340a1b /internal/tui/tui.go | |
| parent | 96225fb6159212a8851043a08d781aba721b4e78 (diff) | |
feat(tui): migrate Bubble Tea stack to charm.land v2
Diffstat (limited to 'internal/tui/tui.go')
| -rw-r--r-- | internal/tui/tui.go | 44 |
1 files changed, 25 insertions, 19 deletions
diff --git a/internal/tui/tui.go b/internal/tui/tui.go index bdd3ab5..24a8ba5 100644 --- a/internal/tui/tui.go +++ b/internal/tui/tui.go @@ -20,10 +20,10 @@ import ( "sync" "time" - "github.com/charmbracelet/bubbles/key" - "github.com/charmbracelet/bubbles/spinner" - tea "github.com/charmbracelet/bubbletea" - "github.com/charmbracelet/lipgloss" + "charm.land/bubbles/v2/key" + "charm.land/bubbles/v2/spinner" + tea "charm.land/bubbletea/v2" + "charm.land/lipgloss/v2" ) // Screen identifies the currently active TUI screen. @@ -144,7 +144,7 @@ func Run() error { func RunWithTraceStarter(starter TraceStarter) error { cfg := flags.Get() model := newModelWithRuntimeConfig(cfg.PidFilter, cfg.PidFilter, cfg.TUIExportEnable, starter) - program := tea.NewProgram(model, tea.WithAltScreen()) + program := tea.NewProgram(model) _, err := program.Run() return err } @@ -227,9 +227,9 @@ func newModelWithRuntimeConfig(initialPID, startupPidFilter int, exportEnabled b func (m Model) Init() tea.Cmd { sizeCmd := initialWindowSizeCmd() if m.screen == ScreenDashboard && m.attaching { - return tea.Batch(sizeCmd, tea.WindowSize(), m.spin.Tick, m.beginTraceCmd()) + return tea.Batch(sizeCmd, tea.RequestWindowSize, m.spin.Tick, m.beginTraceCmd()) } - return tea.Batch(sizeCmd, tea.WindowSize(), m.pidPicker.Init()) + return tea.Batch(sizeCmd, tea.RequestWindowSize, m.pidPicker.Init()) } func initialWindowSizeCmd() tea.Cmd { @@ -455,40 +455,40 @@ func (m *Model) stopTrace() { } // View renders the currently active screen and startup overlay state. -func (m Model) View() string { +func (m Model) View() tea.View { if m.quitting { - return "" + return altScreenView("") } width, height := common.EffectiveViewport(m.width, m.height) if m.attaching { line := fmt.Sprintf("%s Attaching tracepoints...", m.spin.View()) - return placeToViewport(width, height, ScreenStyle.Render(PanelStyle.Render(line))) + return altScreenView(placeToViewport(width, height, ScreenStyle.Render(PanelStyle.Render(line)))) } if m.lastErr != nil { - return placeToViewport(width, height, ScreenStyle.Render(ErrorStyle.Render(m.lastErr.Error()))) + return altScreenView(placeToViewport(width, height, ScreenStyle.Render(ErrorStyle.Render(m.lastErr.Error())))) } switch m.screen { case ScreenPIDPicker: - base := m.pidPicker.View() + base := m.pidPicker.View().Content if m.exporter.Visible() { - return placeToViewport(width, height, m.exporter.View(width, height)+"\n"+base) + return altScreenView(placeToViewport(width, height, m.exporter.View(width, height)+"\n"+base)) } - return placeToViewport(width, height, base) + return altScreenView(placeToViewport(width, height, base)) case ScreenDashboard: - base := m.dashboard.View() + base := m.dashboard.View().Content if m.probeModal.Visible() { - return placeToViewport(width, height, m.probeModal.View(width, height)) + return altScreenView(placeToViewport(width, height, m.probeModal.View(width, height))) } if m.exporter.Visible() { - return placeToViewport(width, height, m.exporter.View(width, height)+"\n"+base) + return altScreenView(placeToViewport(width, height, m.exporter.View(width, height)+"\n"+base)) } - return placeToViewport(width, height, base) + return altScreenView(placeToViewport(width, height, base)) default: - return "" + return altScreenView("") } } @@ -657,3 +657,9 @@ func placeToViewport(width, height int, content string) string { } return lipgloss.Place(width, height, lipgloss.Left, lipgloss.Top, content) } + +func altScreenView(content string) tea.View { + view := tea.NewView(content) + view.AltScreen = true + return view +} |
