diff options
| author | Fuwn <[email protected]> | 2026-01-30 07:32:54 +0000 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2026-01-30 07:32:54 +0000 |
| commit | 5f3eba126201e4d679539aa2517bf6a132f29cd0 (patch) | |
| tree | 961afe2ae1d6ca0f23bdbb30930e37bc88884146 /internal/ui | |
| download | faustus-5f3eba126201e4d679539aa2517bf6a132f29cd0.tar.xz faustus-5f3eba126201e4d679539aa2517bf6a132f29cd0.zip | |
feat: Initial commit
Diffstat (limited to 'internal/ui')
| -rw-r--r-- | internal/ui/keys.go | 126 | ||||
| -rw-r--r-- | internal/ui/styles.go | 159 |
2 files changed, 285 insertions, 0 deletions
diff --git a/internal/ui/keys.go b/internal/ui/keys.go new file mode 100644 index 0000000..81692ca --- /dev/null +++ b/internal/ui/keys.go @@ -0,0 +1,126 @@ +package ui + +import "github.com/charmbracelet/bubbles/key" + +type KeyMap struct { + Up key.Binding + Down key.Binding + Left key.Binding + Right key.Binding + Enter key.Binding + Delete key.Binding + Restore key.Binding + Rename key.Binding + Search key.Binding + DeepSearch key.Binding + NextMatch key.Binding + PrevMatch key.Binding + Tab key.Binding + Clear key.Binding + Quit key.Binding + Help key.Binding + Escape key.Binding + Confirm key.Binding + HalfUp key.Binding + HalfDown key.Binding + Top key.Binding + Bottom key.Binding + Preview key.Binding +} + +func DefaultKeyMap() KeyMap { + return KeyMap{ + Up: key.NewBinding( + key.WithKeys("k", "up"), + key.WithHelp("k", "move up"), + ), + Down: key.NewBinding( + key.WithKeys("j", "down"), + key.WithHelp("j", "move down"), + ), + Left: key.NewBinding( + key.WithKeys("h", "left"), + key.WithHelp("h", "previous tab"), + ), + Right: key.NewBinding( + key.WithKeys("l", "right"), + key.WithHelp("l", "next tab"), + ), + HalfUp: key.NewBinding( + key.WithKeys("ctrl+u"), + key.WithHelp("ctrl+u", "page up"), + ), + HalfDown: key.NewBinding( + key.WithKeys("ctrl+d"), + key.WithHelp("ctrl+d", "page down"), + ), + Top: key.NewBinding( + key.WithKeys("g", "home"), + key.WithHelp("gg", "jump to top"), + ), + Bottom: key.NewBinding( + key.WithKeys("G", "end"), + key.WithHelp("G", "jump to bottom"), + ), + Enter: key.NewBinding( + key.WithKeys("enter"), + key.WithHelp("return", "select"), + ), + Delete: key.NewBinding( + key.WithKeys("d", "x"), + key.WithHelp("d", "move to bin"), + ), + Restore: key.NewBinding( + key.WithKeys("u"), + key.WithHelp("u", "restore"), + ), + Rename: key.NewBinding( + key.WithKeys("c"), + key.WithHelp("c", "rename"), + ), + Search: key.NewBinding( + key.WithKeys("/"), + key.WithHelp("/", "filter"), + ), + DeepSearch: key.NewBinding( + key.WithKeys("s"), + key.WithHelp("s", "search"), + ), + NextMatch: key.NewBinding( + key.WithKeys("n"), + key.WithHelp("n", "next match"), + ), + PrevMatch: key.NewBinding( + key.WithKeys("N"), + key.WithHelp("N", "previous match"), + ), + Tab: key.NewBinding( + key.WithKeys("tab"), + key.WithHelp("tab", "switch focus"), + ), + Clear: key.NewBinding( + key.WithKeys("D"), + key.WithHelp("D", "empty bin"), + ), + Quit: key.NewBinding( + key.WithKeys("q", "ctrl+c"), + key.WithHelp("q", "quit"), + ), + Help: key.NewBinding( + key.WithKeys("?"), + key.WithHelp("?", "help"), + ), + Escape: key.NewBinding( + key.WithKeys("esc"), + key.WithHelp("esc", "cancel"), + ), + Confirm: key.NewBinding( + key.WithKeys("y", "Y"), + key.WithHelp("y", "confirm"), + ), + Preview: key.NewBinding( + key.WithKeys("p"), + key.WithHelp("p", "toggle preview"), + ), + } +} diff --git a/internal/ui/styles.go b/internal/ui/styles.go new file mode 100644 index 0000000..e615f6d --- /dev/null +++ b/internal/ui/styles.go @@ -0,0 +1,159 @@ +package ui + +import "github.com/charmbracelet/lipgloss" + +var ( + Primary = lipgloss.Color("#6B50FF") + Secondary = lipgloss.Color("#FF60FF") + Tertiary = lipgloss.Color("#68FFD6") + Accent = lipgloss.Color("#E8FE96") + BgBase = lipgloss.Color("#201F26") + BgLighter = lipgloss.Color("#2D2C35") + BgSubtle = lipgloss.Color("#3A3943") + BgOverlay = lipgloss.Color("#4D4C57") + FgBase = lipgloss.Color("#DFDBDD") + FgMuted = lipgloss.Color("#858392") + FgHalfMute = lipgloss.Color("#BFBCC8") + FgSubtle = lipgloss.Color("#605F6B") + FgBright = lipgloss.Color("#F1EFEF") + Success = lipgloss.Color("#00FFB2") + Error = lipgloss.Color("#EB4268") + Warning = lipgloss.Color("#E8FE96") + Info = lipgloss.Color("#00A4FF") + Blue = lipgloss.Color("#00A4FF") + Green = lipgloss.Color("#00FFB2") + GreenDark = lipgloss.Color("#12C78F") + Red = lipgloss.Color("#FF577D") + RedDark = lipgloss.Color("#EB4268") + Yellow = lipgloss.Color("#E8FE96") + Orange = lipgloss.Color("#FF985A") + Purple = lipgloss.Color("#8B75FF") + Cyan = lipgloss.Color("#0ADCD9") + Pink = lipgloss.Color("#FF60FF") + BaseStyle = lipgloss.NewStyle(). + Foreground(FgBase) + MutedStyle = lipgloss.NewStyle(). + Foreground(FgMuted) + SubtleStyle = lipgloss.NewStyle(). + Foreground(FgSubtle) + HeaderStyle = lipgloss.NewStyle(). + Foreground(Primary). + Bold(true) + LogoStyle = lipgloss.NewStyle(). + Foreground(Secondary). + Bold(true) + TabStyle = lipgloss.NewStyle(). + Foreground(FgMuted). + Padding(0, 2) + ActiveTabStyle = lipgloss.NewStyle(). + Foreground(Primary). + Bold(true). + Padding(0, 2) + ItemStyle = lipgloss.NewStyle(). + Foreground(FgBase). + PaddingLeft(2) + SelectedItemStyle = lipgloss.NewStyle(). + Foreground(FgBright). + Background(BgSubtle). + Bold(true). + PaddingLeft(1). + PaddingRight(1) + CursorStyle = lipgloss.NewStyle(). + Foreground(Tertiary). + Bold(true) + TitleStyle = lipgloss.NewStyle(). + Foreground(FgBase). + Bold(true) + SummaryStyle = lipgloss.NewStyle(). + Foreground(FgHalfMute). + Italic(true) + MetaStyle = lipgloss.NewStyle(). + Foreground(FgSubtle) + ProjectStyle = lipgloss.NewStyle(). + Foreground(Tertiary) + TrashStyle = lipgloss.NewStyle(). + Foreground(Error). + Bold(true) + ActiveStyle = lipgloss.NewStyle(). + Foreground(Success) + SearchStyle = lipgloss.NewStyle(). + Foreground(Accent). + Bold(true) + SearchInputStyle = lipgloss.NewStyle(). + BorderStyle(lipgloss.RoundedBorder()). + BorderForeground(Primary). + Padding(0, 1) + HelpStyle = lipgloss.NewStyle(). + Foreground(FgSubtle) + HelpKeyStyle = lipgloss.NewStyle(). + Foreground(FgMuted) + ModalStyle = lipgloss.NewStyle(). + BorderStyle(lipgloss.RoundedBorder()). + BorderForeground(Primary). + Background(BgLighter). + Padding(1, 2) + ConfirmStyle = lipgloss.NewStyle(). + Foreground(Warning). + Bold(true) + StatusBarStyle = lipgloss.NewStyle(). + Foreground(FgBase). + Background(BgSubtle). + Padding(0, 1) + CountStyle = lipgloss.NewStyle(). + Foreground(Tertiary). + Bold(true) + PreviewStyle = lipgloss.NewStyle(). + BorderStyle(lipgloss.RoundedBorder()). + BorderForeground(FgSubtle). + Padding(0, 1) + PreviewFocusedStyle = lipgloss.NewStyle(). + BorderStyle(lipgloss.RoundedBorder()). + BorderForeground(Primary). + Padding(0, 1) + ListBoxStyle = lipgloss.NewStyle(). + BorderStyle(lipgloss.RoundedBorder()). + BorderForeground(FgSubtle). + Padding(0, 1) + ListBoxFocusedStyle = lipgloss.NewStyle(). + BorderStyle(lipgloss.RoundedBorder()). + BorderForeground(Primary). + Padding(0, 1) + PreviewHeaderStyle = lipgloss.NewStyle(). + Foreground(Primary). + Bold(true) + PreviewDividerStyle = lipgloss.NewStyle(). + Foreground(FgSubtle) + UserRoleStyle = lipgloss.NewStyle(). + Foreground(Blue). + Bold(true) + UserContentStyle = lipgloss.NewStyle(). + Foreground(FgBase) + AssistantRoleStyle = lipgloss.NewStyle(). + Foreground(GreenDark). + Bold(true) + AssistantContentStyle = lipgloss.NewStyle(). + Foreground(FgHalfMute) + ToolRoleStyle = lipgloss.NewStyle(). + Foreground(Orange). + Bold(true) + ToolContentStyle = lipgloss.NewStyle(). + Foreground(FgMuted). + Italic(true) + ThinkingRoleStyle = lipgloss.NewStyle(). + Foreground(Purple). + Bold(true) + ThinkingContentStyle = lipgloss.NewStyle(). + Foreground(FgSubtle). + Italic(true) + HighlightStyle = lipgloss.NewStyle(). + Background(Accent). + Foreground(BgBase). + Bold(true) + SearchResultStyle = lipgloss.NewStyle(). + Foreground(FgBase) + SearchMatchStyle = lipgloss.NewStyle(). + Foreground(Accent). + Bold(true) + SearchContextStyle = lipgloss.NewStyle(). + Foreground(FgHalfMute) +) |