summaryrefslogtreecommitdiffhomepage
path: root/packages/tui/internal/styles
diff options
context:
space:
mode:
authorDax Raad <[email protected]>2025-11-02 18:43:17 -0500
committerDax Raad <[email protected]>2025-11-02 18:43:33 -0500
commitf68374ad2223ddc213bdea9519ca6a699819ee0e (patch)
tree04f0fe21b8e12cd62d7274961bb0cff64f966f40 /packages/tui/internal/styles
parent5e86c9b7916f75c7ad227b80eab18c7c54fc8ffe (diff)
downloadopencode-f68374ad2223ddc213bdea9519ca6a699819ee0e.tar.gz
opencode-f68374ad2223ddc213bdea9519ca6a699819ee0e.zip
DELETE GO BUBBLETEA CRAP HOORAY
Diffstat (limited to 'packages/tui/internal/styles')
-rw-r--r--packages/tui/internal/styles/background.go17
-rw-r--r--packages/tui/internal/styles/markdown.go326
-rw-r--r--packages/tui/internal/styles/styles.go10
-rw-r--r--packages/tui/internal/styles/utilities.go295
4 files changed, 0 insertions, 648 deletions
diff --git a/packages/tui/internal/styles/background.go b/packages/tui/internal/styles/background.go
deleted file mode 100644
index 99b05b456..000000000
--- a/packages/tui/internal/styles/background.go
+++ /dev/null
@@ -1,17 +0,0 @@
-package styles
-
-import "image/color"
-
-type TerminalInfo struct {
- Background color.Color
- BackgroundIsDark bool
-}
-
-var Terminal *TerminalInfo
-
-func init() {
- Terminal = &TerminalInfo{
- Background: color.Black,
- BackgroundIsDark: true,
- }
-}
diff --git a/packages/tui/internal/styles/markdown.go b/packages/tui/internal/styles/markdown.go
deleted file mode 100644
index d73c14101..000000000
--- a/packages/tui/internal/styles/markdown.go
+++ /dev/null
@@ -1,326 +0,0 @@
-package styles
-
-import (
- "github.com/charmbracelet/glamour"
- "github.com/charmbracelet/glamour/ansi"
- "github.com/charmbracelet/lipgloss/v2"
- "github.com/charmbracelet/lipgloss/v2/compat"
- "github.com/lucasb-eyer/go-colorful"
- "github.com/sst/opencode/internal/theme"
-)
-
-const defaultMargin = 1
-
-// Helper functions for style pointers
-func boolPtr(b bool) *bool { return &b }
-func stringPtr(s string) *string { return &s }
-func uintPtr(u uint) *uint { return &u }
-
-// returns a glamour TermRenderer configured with the current theme
-func GetMarkdownRenderer(width int, backgroundColor compat.AdaptiveColor) *glamour.TermRenderer {
- r, _ := glamour.NewTermRenderer(
- glamour.WithStyles(generateMarkdownStyleConfig(backgroundColor)),
- glamour.WithWordWrap(width),
- glamour.WithChromaFormatter("terminal16m"),
- )
- return r
-}
-
-// creates an ansi.StyleConfig for markdown rendering
-// using adaptive colors from the provided theme.
-func generateMarkdownStyleConfig(backgroundColor compat.AdaptiveColor) ansi.StyleConfig {
- t := theme.CurrentTheme()
- background := AdaptiveColorToString(backgroundColor)
-
- return ansi.StyleConfig{
- Document: ansi.StyleBlock{
- StylePrimitive: ansi.StylePrimitive{
- BlockPrefix: "",
- BlockSuffix: "",
- BackgroundColor: background,
- Color: AdaptiveColorToString(t.MarkdownText()),
- },
- },
- BlockQuote: ansi.StyleBlock{
- StylePrimitive: ansi.StylePrimitive{
- Color: AdaptiveColorToString(t.MarkdownBlockQuote()),
- Italic: boolPtr(true),
- Prefix: "┃ ",
- },
- Indent: uintPtr(1),
- IndentToken: stringPtr(" "),
- },
- List: ansi.StyleList{
- LevelIndent: defaultMargin,
- StyleBlock: ansi.StyleBlock{
- IndentToken: stringPtr(" "),
- StylePrimitive: ansi.StylePrimitive{
- Color: AdaptiveColorToString(t.MarkdownText()),
- },
- },
- },
- Heading: ansi.StyleBlock{
- StylePrimitive: ansi.StylePrimitive{
- BlockSuffix: "\n",
- Color: AdaptiveColorToString(t.MarkdownHeading()),
- Bold: boolPtr(true),
- },
- },
- H1: ansi.StyleBlock{
- StylePrimitive: ansi.StylePrimitive{
- Prefix: "# ",
- Color: AdaptiveColorToString(t.MarkdownHeading()),
- Bold: boolPtr(true),
- },
- },
- H2: ansi.StyleBlock{
- StylePrimitive: ansi.StylePrimitive{
- Prefix: "## ",
- Color: AdaptiveColorToString(t.MarkdownHeading()),
- Bold: boolPtr(true),
- },
- },
- H3: ansi.StyleBlock{
- StylePrimitive: ansi.StylePrimitive{
- Prefix: "### ",
- Color: AdaptiveColorToString(t.MarkdownHeading()),
- Bold: boolPtr(true),
- },
- },
- H4: ansi.StyleBlock{
- StylePrimitive: ansi.StylePrimitive{
- Prefix: "#### ",
- Color: AdaptiveColorToString(t.MarkdownHeading()),
- Bold: boolPtr(true),
- },
- },
- H5: ansi.StyleBlock{
- StylePrimitive: ansi.StylePrimitive{
- Prefix: "##### ",
- Color: AdaptiveColorToString(t.MarkdownHeading()),
- Bold: boolPtr(true),
- },
- },
- H6: ansi.StyleBlock{
- StylePrimitive: ansi.StylePrimitive{
- Prefix: "###### ",
- Color: AdaptiveColorToString(t.MarkdownHeading()),
- Bold: boolPtr(true),
- },
- },
- Strikethrough: ansi.StylePrimitive{
- CrossedOut: boolPtr(true),
- Color: AdaptiveColorToString(t.TextMuted()),
- },
- Emph: ansi.StylePrimitive{
- Color: AdaptiveColorToString(t.MarkdownEmph()),
- Italic: boolPtr(true),
- },
- Strong: ansi.StylePrimitive{
- Bold: boolPtr(true),
- Color: AdaptiveColorToString(t.MarkdownStrong()),
- },
- HorizontalRule: ansi.StylePrimitive{
- Color: AdaptiveColorToString(t.MarkdownHorizontalRule()),
- Format: "\n─────────────────────────────────────────\n",
- },
- Item: ansi.StylePrimitive{
- BlockPrefix: "• ",
- Color: AdaptiveColorToString(t.MarkdownListItem()),
- },
- Enumeration: ansi.StylePrimitive{
- BlockPrefix: ". ",
- Color: AdaptiveColorToString(t.MarkdownListEnumeration()),
- },
- Task: ansi.StyleTask{
- Ticked: "[✓] ",
- Unticked: "[ ] ",
- },
- Link: ansi.StylePrimitive{
- Color: AdaptiveColorToString(t.MarkdownLink()),
- Underline: boolPtr(true),
- },
- LinkText: ansi.StylePrimitive{
- Color: AdaptiveColorToString(t.MarkdownLinkText()),
- Bold: boolPtr(true),
- },
- Image: ansi.StylePrimitive{
- Color: AdaptiveColorToString(t.MarkdownImage()),
- Underline: boolPtr(true),
- Format: "🖼 {{.text}}",
- },
- ImageText: ansi.StylePrimitive{
- Color: AdaptiveColorToString(t.MarkdownImageText()),
- Format: "{{.text}}",
- },
- Code: ansi.StyleBlock{
- StylePrimitive: ansi.StylePrimitive{
- BackgroundColor: background,
- Color: AdaptiveColorToString(t.MarkdownCode()),
- Prefix: "",
- Suffix: "",
- },
- },
- CodeBlock: ansi.StyleCodeBlock{
- StyleBlock: ansi.StyleBlock{
- StylePrimitive: ansi.StylePrimitive{
- BackgroundColor: background,
- Prefix: " ",
- Color: AdaptiveColorToString(t.MarkdownCodeBlock()),
- },
- },
- Chroma: &ansi.Chroma{
- Background: ansi.StylePrimitive{
- BackgroundColor: background,
- },
- Text: ansi.StylePrimitive{
- BackgroundColor: background,
- Color: AdaptiveColorToString(t.MarkdownText()),
- },
- Error: ansi.StylePrimitive{
- BackgroundColor: background,
- Color: AdaptiveColorToString(t.Error()),
- },
- Comment: ansi.StylePrimitive{
- BackgroundColor: background,
- Color: AdaptiveColorToString(t.SyntaxComment()),
- },
- CommentPreproc: ansi.StylePrimitive{
- BackgroundColor: background,
- Color: AdaptiveColorToString(t.SyntaxKeyword()),
- },
- Keyword: ansi.StylePrimitive{
- BackgroundColor: background,
- Color: AdaptiveColorToString(t.SyntaxKeyword()),
- },
- KeywordReserved: ansi.StylePrimitive{
- BackgroundColor: background,
- Color: AdaptiveColorToString(t.SyntaxKeyword()),
- },
- KeywordNamespace: ansi.StylePrimitive{
- BackgroundColor: background,
- Color: AdaptiveColorToString(t.SyntaxKeyword()),
- },
- KeywordType: ansi.StylePrimitive{
- BackgroundColor: background,
- Color: AdaptiveColorToString(t.SyntaxType()),
- },
- Operator: ansi.StylePrimitive{
- BackgroundColor: background,
- Color: AdaptiveColorToString(t.SyntaxOperator()),
- },
- Punctuation: ansi.StylePrimitive{
- BackgroundColor: background,
- Color: AdaptiveColorToString(t.SyntaxPunctuation()),
- },
- Name: ansi.StylePrimitive{
- BackgroundColor: background,
- Color: AdaptiveColorToString(t.SyntaxVariable()),
- },
- NameBuiltin: ansi.StylePrimitive{
- BackgroundColor: background,
- Color: AdaptiveColorToString(t.SyntaxVariable()),
- },
- NameTag: ansi.StylePrimitive{
- BackgroundColor: background,
- Color: AdaptiveColorToString(t.SyntaxKeyword()),
- },
- NameAttribute: ansi.StylePrimitive{
- BackgroundColor: background,
- Color: AdaptiveColorToString(t.SyntaxFunction()),
- },
- NameClass: ansi.StylePrimitive{
- BackgroundColor: background,
- Color: AdaptiveColorToString(t.SyntaxType()),
- },
- NameConstant: ansi.StylePrimitive{
- BackgroundColor: background,
- Color: AdaptiveColorToString(t.SyntaxVariable()),
- },
- NameDecorator: ansi.StylePrimitive{
- BackgroundColor: background,
- Color: AdaptiveColorToString(t.SyntaxFunction()),
- },
- NameFunction: ansi.StylePrimitive{
- BackgroundColor: background,
- Color: AdaptiveColorToString(t.SyntaxFunction()),
- },
- LiteralNumber: ansi.StylePrimitive{
- BackgroundColor: background,
- Color: AdaptiveColorToString(t.SyntaxNumber()),
- },
- LiteralString: ansi.StylePrimitive{
- BackgroundColor: background,
- Color: AdaptiveColorToString(t.SyntaxString()),
- },
- LiteralStringEscape: ansi.StylePrimitive{
- BackgroundColor: background,
- Color: AdaptiveColorToString(t.SyntaxKeyword()),
- },
- GenericDeleted: ansi.StylePrimitive{
- BackgroundColor: background,
- Color: AdaptiveColorToString(t.DiffRemoved()),
- },
- GenericEmph: ansi.StylePrimitive{
- BackgroundColor: background,
- Color: AdaptiveColorToString(t.MarkdownEmph()),
- Italic: boolPtr(true),
- },
- GenericInserted: ansi.StylePrimitive{
- BackgroundColor: background,
- Color: AdaptiveColorToString(t.DiffAdded()),
- },
- GenericStrong: ansi.StylePrimitive{
- BackgroundColor: background,
- Color: AdaptiveColorToString(t.MarkdownStrong()),
- Bold: boolPtr(true),
- },
- GenericSubheading: ansi.StylePrimitive{
- BackgroundColor: background,
- Color: AdaptiveColorToString(t.MarkdownHeading()),
- },
- },
- },
- Table: ansi.StyleTable{
- StyleBlock: ansi.StyleBlock{
- StylePrimitive: ansi.StylePrimitive{
- BlockSuffix: "\n",
- // TODO: find better way to fix markdown table renders
- BackgroundColor: stringPtr(""),
- },
- },
- CenterSeparator: stringPtr("┼"),
- ColumnSeparator: stringPtr("│"),
- RowSeparator: stringPtr("─"),
- },
- DefinitionDescription: ansi.StylePrimitive{
- BlockPrefix: "\n ❯ ",
- Color: AdaptiveColorToString(t.MarkdownLinkText()),
- },
- Text: ansi.StylePrimitive{
- Color: AdaptiveColorToString(t.MarkdownText()),
- },
- Paragraph: ansi.StyleBlock{
- StylePrimitive: ansi.StylePrimitive{
- Color: AdaptiveColorToString(t.MarkdownText()),
- },
- },
- }
-}
-
-// AdaptiveColorToString converts a compat.AdaptiveColor to the appropriate
-// hex color string based on the current terminal background
-func AdaptiveColorToString(color compat.AdaptiveColor) *string {
- if Terminal.BackgroundIsDark {
- if _, ok := color.Dark.(lipgloss.NoColor); ok {
- return nil
- }
- c1, _ := colorful.MakeColor(color.Dark)
- return stringPtr(c1.Hex())
- }
- if _, ok := color.Light.(lipgloss.NoColor); ok {
- return nil
- }
- c1, _ := colorful.MakeColor(color.Light)
- return stringPtr(c1.Hex())
-}
diff --git a/packages/tui/internal/styles/styles.go b/packages/tui/internal/styles/styles.go
deleted file mode 100644
index b8905f8e4..000000000
--- a/packages/tui/internal/styles/styles.go
+++ /dev/null
@@ -1,10 +0,0 @@
-package styles
-
-import (
- "github.com/charmbracelet/lipgloss/v2"
- "github.com/charmbracelet/lipgloss/v2/compat"
-)
-
-func WhitespaceStyle(bg compat.AdaptiveColor) lipgloss.WhitespaceOption {
- return lipgloss.WithWhitespaceStyle(NewStyle().Background(bg).Lipgloss())
-}
diff --git a/packages/tui/internal/styles/utilities.go b/packages/tui/internal/styles/utilities.go
deleted file mode 100644
index 29d10f5c5..000000000
--- a/packages/tui/internal/styles/utilities.go
+++ /dev/null
@@ -1,295 +0,0 @@
-package styles
-
-import (
- "image/color"
-
- "github.com/charmbracelet/lipgloss/v2"
- "github.com/charmbracelet/lipgloss/v2/compat"
-)
-
-// IsNoColor checks if a color is the special NoColor type
-func IsNoColor(c color.Color) bool {
- _, ok := c.(lipgloss.NoColor)
- return ok
-}
-
-// Style wraps lipgloss.Style to provide a fluent API for handling "none" colors
-type Style struct {
- lipgloss.Style
-}
-
-// NewStyle creates a new Style with proper handling of "none" colors
-func NewStyle() Style {
- return Style{lipgloss.NewStyle()}
-}
-
-func (s Style) Lipgloss() lipgloss.Style {
- return s.Style
-}
-
-// Foreground sets the foreground color, handling "none" appropriately
-func (s Style) Foreground(c compat.AdaptiveColor) Style {
- if IsNoColor(c.Dark) && IsNoColor(c.Light) {
- return Style{s.Style.UnsetForeground()}
- }
- return Style{s.Style.Foreground(c)}
-}
-
-// Background sets the background color, handling "none" appropriately
-func (s Style) Background(c compat.AdaptiveColor) Style {
- if IsNoColor(c.Dark) && IsNoColor(c.Light) {
- return Style{s.Style.UnsetBackground()}
- }
- return Style{s.Style.Background(c)}
-}
-
-// BorderForeground sets the border foreground color, handling "none" appropriately
-func (s Style) BorderForeground(c compat.AdaptiveColor) Style {
- if IsNoColor(c.Dark) && IsNoColor(c.Light) {
- return Style{s.Style.UnsetBorderForeground()}
- }
- return Style{s.Style.BorderForeground(c)}
-}
-
-// BorderBackground sets the border background color, handling "none" appropriately
-func (s Style) BorderBackground(c compat.AdaptiveColor) Style {
- if IsNoColor(c.Dark) && IsNoColor(c.Light) {
- return Style{s.Style.UnsetBorderBackground()}
- }
- return Style{s.Style.BorderBackground(c)}
-}
-
-// BorderTopForeground sets the border top foreground color, handling "none" appropriately
-func (s Style) BorderTopForeground(c compat.AdaptiveColor) Style {
- if IsNoColor(c.Dark) && IsNoColor(c.Light) {
- return Style{s.Style.UnsetBorderTopForeground()}
- }
- return Style{s.Style.BorderTopForeground(c)}
-}
-
-// BorderTopBackground sets the border top background color, handling "none" appropriately
-func (s Style) BorderTopBackground(c compat.AdaptiveColor) Style {
- if IsNoColor(c.Dark) && IsNoColor(c.Light) {
- return Style{s.Style.UnsetBorderTopBackground()}
- }
- return Style{s.Style.BorderTopBackground(c)}
-}
-
-// BorderBottomForeground sets the border bottom foreground color, handling "none" appropriately
-func (s Style) BorderBottomForeground(c compat.AdaptiveColor) Style {
- if IsNoColor(c.Dark) && IsNoColor(c.Light) {
- return Style{s.Style.UnsetBorderBottomForeground()}
- }
- return Style{s.Style.BorderBottomForeground(c)}
-}
-
-// BorderBottomBackground sets the border bottom background color, handling "none" appropriately
-func (s Style) BorderBottomBackground(c compat.AdaptiveColor) Style {
- if IsNoColor(c.Dark) && IsNoColor(c.Light) {
- return Style{s.Style.UnsetBorderBottomBackground()}
- }
- return Style{s.Style.BorderBottomBackground(c)}
-}
-
-// BorderLeftForeground sets the border left foreground color, handling "none" appropriately
-func (s Style) BorderLeftForeground(c compat.AdaptiveColor) Style {
- if IsNoColor(c.Dark) && IsNoColor(c.Light) {
- return Style{s.Style.UnsetBorderLeftForeground()}
- }
- return Style{s.Style.BorderLeftForeground(c)}
-}
-
-// BorderLeftBackground sets the border left background color, handling "none" appropriately
-func (s Style) BorderLeftBackground(c compat.AdaptiveColor) Style {
- if IsNoColor(c.Dark) && IsNoColor(c.Light) {
- return Style{s.Style.UnsetBorderLeftBackground()}
- }
- return Style{s.Style.BorderLeftBackground(c)}
-}
-
-// BorderRightForeground sets the border right foreground color, handling "none" appropriately
-func (s Style) BorderRightForeground(c compat.AdaptiveColor) Style {
- if IsNoColor(c.Dark) && IsNoColor(c.Light) {
- return Style{s.Style.UnsetBorderRightForeground()}
- }
- return Style{s.Style.BorderRightForeground(c)}
-}
-
-// BorderRightBackground sets the border right background color, handling "none" appropriately
-func (s Style) BorderRightBackground(c compat.AdaptiveColor) Style {
- if IsNoColor(c.Dark) && IsNoColor(c.Light) {
- return Style{s.Style.UnsetBorderRightBackground()}
- }
- return Style{s.Style.BorderRightBackground(c)}
-}
-
-// Render applies the style to a string
-func (s Style) Render(str string) string {
- return s.Style.Render(str)
-}
-
-// Common lipgloss.Style method delegations for seamless usage
-
-func (s Style) Bold(v bool) Style {
- return Style{s.Style.Bold(v)}
-}
-
-func (s Style) Italic(v bool) Style {
- return Style{s.Style.Italic(v)}
-}
-
-func (s Style) Underline(v bool) Style {
- return Style{s.Style.Underline(v)}
-}
-
-func (s Style) Strikethrough(v bool) Style {
- return Style{s.Style.Strikethrough(v)}
-}
-
-func (s Style) Blink(v bool) Style {
- return Style{s.Style.Blink(v)}
-}
-
-func (s Style) Faint(v bool) Style {
- return Style{s.Style.Faint(v)}
-}
-
-func (s Style) Reverse(v bool) Style {
- return Style{s.Style.Reverse(v)}
-}
-
-func (s Style) Width(i int) Style {
- return Style{s.Style.Width(i)}
-}
-
-func (s Style) Height(i int) Style {
- return Style{s.Style.Height(i)}
-}
-
-func (s Style) Padding(i ...int) Style {
- return Style{s.Style.Padding(i...)}
-}
-
-func (s Style) PaddingTop(i int) Style {
- return Style{s.Style.PaddingTop(i)}
-}
-
-func (s Style) PaddingBottom(i int) Style {
- return Style{s.Style.PaddingBottom(i)}
-}
-
-func (s Style) PaddingLeft(i int) Style {
- return Style{s.Style.PaddingLeft(i)}
-}
-
-func (s Style) PaddingRight(i int) Style {
- return Style{s.Style.PaddingRight(i)}
-}
-
-func (s Style) Margin(i ...int) Style {
- return Style{s.Style.Margin(i...)}
-}
-
-func (s Style) MarginTop(i int) Style {
- return Style{s.Style.MarginTop(i)}
-}
-
-func (s Style) MarginBottom(i int) Style {
- return Style{s.Style.MarginBottom(i)}
-}
-
-func (s Style) MarginLeft(i int) Style {
- return Style{s.Style.MarginLeft(i)}
-}
-
-func (s Style) MarginRight(i int) Style {
- return Style{s.Style.MarginRight(i)}
-}
-
-func (s Style) Border(b lipgloss.Border, sides ...bool) Style {
- return Style{s.Style.Border(b, sides...)}
-}
-
-func (s Style) BorderStyle(b lipgloss.Border) Style {
- return Style{s.Style.BorderStyle(b)}
-}
-
-func (s Style) BorderTop(v bool) Style {
- return Style{s.Style.BorderTop(v)}
-}
-
-func (s Style) BorderBottom(v bool) Style {
- return Style{s.Style.BorderBottom(v)}
-}
-
-func (s Style) BorderLeft(v bool) Style {
- return Style{s.Style.BorderLeft(v)}
-}
-
-func (s Style) BorderRight(v bool) Style {
- return Style{s.Style.BorderRight(v)}
-}
-
-func (s Style) Align(p ...lipgloss.Position) Style {
- return Style{s.Style.Align(p...)}
-}
-
-func (s Style) AlignHorizontal(p lipgloss.Position) Style {
- return Style{s.Style.AlignHorizontal(p)}
-}
-
-func (s Style) AlignVertical(p lipgloss.Position) Style {
- return Style{s.Style.AlignVertical(p)}
-}
-
-func (s Style) Inline(v bool) Style {
- return Style{s.Style.Inline(v)}
-}
-
-func (s Style) MaxWidth(n int) Style {
- return Style{s.Style.MaxWidth(n)}
-}
-
-func (s Style) MaxHeight(n int) Style {
- return Style{s.Style.MaxHeight(n)}
-}
-
-func (s Style) TabWidth(n int) Style {
- return Style{s.Style.TabWidth(n)}
-}
-
-func (s Style) UnsetBold() Style {
- return Style{s.Style.UnsetBold()}
-}
-
-func (s Style) UnsetItalic() Style {
- return Style{s.Style.UnsetItalic()}
-}
-
-func (s Style) UnsetUnderline() Style {
- return Style{s.Style.UnsetUnderline()}
-}
-
-func (s Style) UnsetStrikethrough() Style {
- return Style{s.Style.UnsetStrikethrough()}
-}
-
-func (s Style) UnsetBlink() Style {
- return Style{s.Style.UnsetBlink()}
-}
-
-func (s Style) UnsetFaint() Style {
- return Style{s.Style.UnsetFaint()}
-}
-
-func (s Style) UnsetReverse() Style {
- return Style{s.Style.UnsetReverse()}
-}
-
-func (s Style) Copy() Style {
- return Style{s.Style}
-}
-
-func (s Style) Inherit(i Style) Style {
- return Style{s.Style.Inherit(i.Style)}
-}