2026-04-06 05:07:36 +08:00
|
|
|
package tui
|
|
|
|
|
|
|
|
|
|
import (
|
2026-04-06 05:10:00 +08:00
|
|
|
"github.com/charmbracelet/bubbles/textinput"
|
2026-04-06 05:07:36 +08:00
|
|
|
"github.com/charmbracelet/bubbletea"
|
2026-04-06 05:10:00 +08:00
|
|
|
"github.com/charmbracelet/lipgloss"
|
2026-04-06 05:07:36 +08:00
|
|
|
"github.com/titor/fanyi/internal/config"
|
|
|
|
|
"github.com/titor/fanyi/internal/translator"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type model struct {
|
|
|
|
|
config *config.Config
|
|
|
|
|
translator *translator.Translator
|
2026-04-06 05:10:00 +08:00
|
|
|
textInput textinput.Model
|
2026-04-06 05:07:36 +08:00
|
|
|
}
|
|
|
|
|
|
2026-04-06 05:10:00 +08:00
|
|
|
var (
|
|
|
|
|
inputStyle = lipgloss.NewStyle().
|
|
|
|
|
Foreground(lipgloss.Color("#FAFAFA")).
|
|
|
|
|
Background(lipgloss.Color("#1A1A2E"))
|
|
|
|
|
focusedStyle = lipgloss.NewStyle().
|
|
|
|
|
Foreground(lipgloss.Color("#FAFAFA")).
|
|
|
|
|
Background(lipgloss.Color("#16213E"))
|
|
|
|
|
)
|
|
|
|
|
|
2026-04-06 05:07:36 +08:00
|
|
|
func NewApp(cfg *config.Config, t *translator.Translator) *tea.Program {
|
2026-04-06 05:10:00 +08:00
|
|
|
ti := textinput.New()
|
|
|
|
|
ti.Placeholder = "输入要翻译的文本..."
|
|
|
|
|
ti.Focus()
|
|
|
|
|
ti.Prompt = "> "
|
|
|
|
|
ti.TextStyle = inputStyle
|
|
|
|
|
|
2026-04-06 05:07:36 +08:00
|
|
|
return tea.NewProgram(model{
|
|
|
|
|
config: cfg,
|
|
|
|
|
translator: t,
|
2026-04-06 05:10:00 +08:00
|
|
|
textInput: ti,
|
2026-04-06 05:07:36 +08:00
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (m model) Init() tea.Cmd {
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
2026-04-06 05:10:00 +08:00
|
|
|
var cmd tea.Cmd
|
|
|
|
|
|
|
|
|
|
switch msg := msg.(type) {
|
|
|
|
|
case tea.KeyMsg:
|
|
|
|
|
switch msg.Type {
|
|
|
|
|
case tea.KeyEnter:
|
|
|
|
|
// 回车键处理,后续模块会添加翻译逻辑
|
|
|
|
|
case tea.KeyCtrlC, tea.KeyEsc:
|
|
|
|
|
return m, tea.Quit
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
m.textInput, cmd = m.textInput.Update(msg)
|
|
|
|
|
return m, cmd
|
2026-04-06 05:07:36 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (m model) View() string {
|
2026-04-06 05:10:00 +08:00
|
|
|
return "\n" +
|
|
|
|
|
" YOYO翻译\n" +
|
|
|
|
|
" ─────────────────────\n\n" +
|
|
|
|
|
" " + m.textInput.View() + "\n\n" +
|
|
|
|
|
" 按 Ctrl+C 退出\n"
|
2026-04-06 05:07:36 +08:00
|
|
|
}
|