aboutsummaryrefslogtreecommitdiff
path: root/internal/ui
diff options
context:
space:
mode:
authorFuwn <[email protected]>2026-01-30 07:32:54 +0000
committerFuwn <[email protected]>2026-01-30 07:32:54 +0000
commit5f3eba126201e4d679539aa2517bf6a132f29cd0 (patch)
tree961afe2ae1d6ca0f23bdbb30930e37bc88884146 /internal/ui
downloadfaustus-5f3eba126201e4d679539aa2517bf6a132f29cd0.tar.xz
faustus-5f3eba126201e4d679539aa2517bf6a132f29cd0.zip
feat: Initial commit
Diffstat (limited to 'internal/ui')
-rw-r--r--internal/ui/keys.go126
-rw-r--r--internal/ui/styles.go159
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)
+)