diff options
| author | Dax Raad <[email protected]> | 2025-11-02 18:43:17 -0500 |
|---|---|---|
| committer | Dax Raad <[email protected]> | 2025-11-02 18:43:33 -0500 |
| commit | f68374ad2223ddc213bdea9519ca6a699819ee0e (patch) | |
| tree | 04f0fe21b8e12cd62d7274961bb0cff64f966f40 /packages/tui/internal/styles | |
| parent | 5e86c9b7916f75c7ad227b80eab18c7c54fc8ffe (diff) | |
| download | opencode-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.go | 17 | ||||
| -rw-r--r-- | packages/tui/internal/styles/markdown.go | 326 | ||||
| -rw-r--r-- | packages/tui/internal/styles/styles.go | 10 | ||||
| -rw-r--r-- | packages/tui/internal/styles/utilities.go | 295 |
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)} -} |
