styles

package
v0.183.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 28, 2026 License: Apache-2.0 Imports: 13 Imported by: 0

Documentation

Index

Constants

View Source
const InlineDiffContextLines = 2

InlineDiffContextLines is the unchanged-context line count shown above/below each change in the *inline* diffs: the Edit approval preview and the post-run Edit/MultiEdit diffs in the conversation. The full /diff viewer keeps the wider diffview default so it stays a full-file review surface.

Variables

This section is empty.

Functions

func IsLightTheme

func IsLightTheme(theme tui.Theme) bool

isLightTheme classifies the theme by the luminance of its assistant (primary text) color. Dark themes have light text (high luminance); light themes have dark text (low luminance).

func RenderTraceTree

func RenderTraceTree(roots []*telemetry.TraceSpan, style TreeStyle) string

RenderTraceTree renders the span tree via lipgloss/v2/tree with durations right-aligned in a column:

session (standard, success)          42.1s
├── chat deepseek/deepseek-v4-flash   3.2s
╰── execute_tool Bash                27.5s

Failed spans carry a trailing [error: <type>] marker.

func SnippetStartLine

func SnippetStartLine(filePath, oldString string) int

func ThemeIsDark

func ThemeIsDark(sp *Provider) bool

themeIsDark reports whether the active theme is dark, defaulting to dark when no theme is set. Used to pick the embedded editor's background.

Types

type CharmTheme

type CharmTheme struct{}

CharmTheme is built on the official Charm palette (charmtone). It's the modern, on-brand option that uses the same semantic tokens Crush ships with - Sapphire as the primary blue, Cherry for errors, Julep for success, Smoke/Iron as neutrals over a Pepper base.

func NewCharmTheme

func NewCharmTheme() *CharmTheme

func (*CharmTheme) GetAccentColor

func (t *CharmTheme) GetAccentColor() string

func (*CharmTheme) GetAssistantColor

func (t *CharmTheme) GetAssistantColor() string

func (*CharmTheme) GetBorderColor

func (t *CharmTheme) GetBorderColor() string

func (*CharmTheme) GetDiffAddColor

func (t *CharmTheme) GetDiffAddColor() string

func (*CharmTheme) GetDiffRemoveColor

func (t *CharmTheme) GetDiffRemoveColor() string

func (*CharmTheme) GetDimColor

func (t *CharmTheme) GetDimColor() string

func (*CharmTheme) GetErrorColor

func (t *CharmTheme) GetErrorColor() string

func (*CharmTheme) GetStatusColor

func (t *CharmTheme) GetStatusColor() string

func (*CharmTheme) GetSuccessColor

func (t *CharmTheme) GetSuccessColor() string

func (*CharmTheme) GetUserColor

func (t *CharmTheme) GetUserColor() string

func (*CharmTheme) GetWarningColor added in v0.182.0

func (t *CharmTheme) GetWarningColor() string

type DiffInfo

type DiffInfo struct {
	FilePath   string
	OldContent string
	NewContent string
	Title      string
}

DiffInfo carries the inputs for a single diff render.

type DiffRenderer

type DiffRenderer struct {
	// contains filtered or unexported fields
}

DiffRenderer is a thin adapter that preserves the legacy public surface (RenderEditToolArguments / RenderMultiEditToolArguments / RenderWriteToolArguments / RenderDiff / RenderColoredDiff) and delegates the actual diff rendering to the diffview package. The internal renderer there uses go-udiff for a correct LCS-based diff algorithm and optional chroma syntax highlighting.

func NewDiffRenderer

func NewDiffRenderer(styleProvider *Provider) *DiffRenderer

NewDiffRenderer creates a new diff renderer with colored output.

func NewToolDiffRenderer

func NewToolDiffRenderer(styleProvider *Provider) *DiffRenderer

NewToolDiffRenderer creates a tool diff renderer (alias for NewDiffRenderer).

func (*DiffRenderer) RenderColoredDiff

func (d *DiffRenderer) RenderColoredDiff(oldContent, newContent string) string

RenderColoredDiff is a minimal compatibility wrapper that renders a simple diff with a placeholder title and file path.

func (*DiffRenderer) RenderDiff

func (d *DiffRenderer) RenderDiff(info DiffInfo) string

RenderDiff renders a full diff between OldContent and NewContent with a title, file header with addition/removal stats, and the underlying DiffView body. Empty contents are handled gracefully (new file, deleted file).

func (*DiffRenderer) RenderEditToolArguments

func (d *DiffRenderer) RenderEditToolArguments(args map[string]any) string

RenderEditToolArguments renders Edit tool arguments as a diff. When the target file can be read and old_string is found in it, it diffs the real file content so the configured context lines surround the change with actual neighbouring file lines; otherwise it falls back to a snippet diff of old_string vs new_string.

func (*DiffRenderer) RenderMultiEditToolArguments

func (d *DiffRenderer) RenderMultiEditToolArguments(args map[string]any) string

RenderMultiEditToolArguments renders MultiEdit tool arguments as a sequence of snippet diffs (one per edit).

func (*DiffRenderer) RenderWriteToolArguments

func (d *DiffRenderer) RenderWriteToolArguments(args map[string]any) string

RenderWriteToolArguments renders Write tool arguments. If the target file already exists, the rendered output is a full diff against the new content; otherwise it's a NEW FILE badge plus a numbered preview of the first lines.

func (*DiffRenderer) SetContextLines

func (d *DiffRenderer) SetContextLines(n int) *DiffRenderer

SetContextLines overrides the number of unchanged context lines shown above and below each change. Pass 0 (the default) to keep the diffview default. Returns the renderer for chaining.

func (*DiffRenderer) SetMaxLines

func (d *DiffRenderer) SetMaxLines(n int) *DiffRenderer

SetMaxLines overrides the new-file preview line cap: 0 keeps the default, a positive n caps at n, and a negative n renders every line (for callers that bound the height themselves, like the scrollable approval box). Chains.

func (*DiffRenderer) SetStartLine

func (d *DiffRenderer) SetStartLine(n int) *DiffRenderer

SetStartLine tells the renderer that the diffed content is a snippet whose first line is line n in the real file (1-based), so gutter line numbers show the actual file positions instead of counting from 1. Pass 0 (the default) when the content is already whole-file. Chains.

func (*DiffRenderer) SetWidth

func (d *DiffRenderer) SetWidth(w int) *DiffRenderer

SetWidth tells the renderer the available terminal width so the underlying DiffView can pick a width-adaptive layout (split when >= 160 cols).

type DiffStats

type DiffStats struct {
	LinesAdded   int
	LinesRemoved int
	LinesChanged int
}

DiffStats represents statistics about a diff.

type DraculaTheme

type DraculaTheme struct{}

DraculaTheme provides the popular Dracula color scheme

func NewDraculaTheme

func NewDraculaTheme() *DraculaTheme

func (*DraculaTheme) GetAccentColor

func (t *DraculaTheme) GetAccentColor() string

func (*DraculaTheme) GetAssistantColor

func (t *DraculaTheme) GetAssistantColor() string

func (*DraculaTheme) GetBorderColor

func (t *DraculaTheme) GetBorderColor() string

func (*DraculaTheme) GetDiffAddColor

func (t *DraculaTheme) GetDiffAddColor() string

func (*DraculaTheme) GetDiffRemoveColor

func (t *DraculaTheme) GetDiffRemoveColor() string

func (*DraculaTheme) GetDimColor

func (t *DraculaTheme) GetDimColor() string

func (*DraculaTheme) GetErrorColor

func (t *DraculaTheme) GetErrorColor() string

func (*DraculaTheme) GetStatusColor

func (t *DraculaTheme) GetStatusColor() string

func (*DraculaTheme) GetSuccessColor

func (t *DraculaTheme) GetSuccessColor() string

func (*DraculaTheme) GetUserColor

func (t *DraculaTheme) GetUserColor() string

func (*DraculaTheme) GetWarningColor added in v0.182.0

func (t *DraculaTheme) GetWarningColor() string

type GithubLightTheme

type GithubLightTheme struct{}

GithubLightTheme provides a light theme similar to GitHub's interface

func NewGithubLightTheme

func NewGithubLightTheme() *GithubLightTheme

func (*GithubLightTheme) GetAccentColor

func (t *GithubLightTheme) GetAccentColor() string

func (*GithubLightTheme) GetAssistantColor

func (t *GithubLightTheme) GetAssistantColor() string

func (*GithubLightTheme) GetBorderColor

func (t *GithubLightTheme) GetBorderColor() string

func (*GithubLightTheme) GetDiffAddColor

func (t *GithubLightTheme) GetDiffAddColor() string

func (*GithubLightTheme) GetDiffRemoveColor

func (t *GithubLightTheme) GetDiffRemoveColor() string

func (*GithubLightTheme) GetDimColor

func (t *GithubLightTheme) GetDimColor() string

func (*GithubLightTheme) GetErrorColor

func (t *GithubLightTheme) GetErrorColor() string

func (*GithubLightTheme) GetStatusColor

func (t *GithubLightTheme) GetStatusColor() string

func (*GithubLightTheme) GetSuccessColor

func (t *GithubLightTheme) GetSuccessColor() string

func (*GithubLightTheme) GetUserColor

func (t *GithubLightTheme) GetUserColor() string

func (*GithubLightTheme) GetWarningColor added in v0.182.0

func (t *GithubLightTheme) GetWarningColor() string

type Provider

type Provider struct {
	// contains filtered or unexported fields
}

Provider centralizes all styling logic and provides complete abstraction from Lipgloss. Components should NEVER import lipgloss directly - they interact with styling through this provider.

func NewProvider

func NewProvider(themeService tui.ThemeService) *Provider

NewProvider creates a new style provider

func (*Provider) ClampToSize

func (p *Provider) ClampToSize(s string, width, height int) string

ClampToSize hard-truncates s to width columns and height rows (ANSI-aware) so a frame containing an over-wide or over-tall line cannot wrap and corrupt the inline (non-alt-screen) render. MaxWidth/MaxHeight truncate rather than pad or wrap.

func (*Provider) GetCurrentTheme

func (p *Provider) GetCurrentTheme() tui.Theme

GetCurrentTheme returns the active theme, exposing it for callers that need to derive colors outside of Provider's pre-baked render methods (e.g. the diffview Style selector).

func (*Provider) GetHeight

func (p *Provider) GetHeight(s string) int

GetHeight returns the rendered height of a string

func (*Provider) GetSpinnerStyle

func (p *Provider) GetSpinnerStyle() lipgloss.Style

GetSpinnerStyle returns a lipgloss.Style for use with third-party components like Bubbles spinner This is an exception to complete abstraction, needed for library compatibility

func (*Provider) GetThemeColor

func (p *Provider) GetThemeColor(colorName string) string

GetThemeColor returns a theme color for custom styling (use sparingly)

func (*Provider) GetThemeService

func (p *Provider) GetThemeService() tui.ThemeService

GetThemeService returns the underlying theme service for advanced integrations This is needed for components like the markdown renderer that need direct theme access

func (*Provider) GetWidth

func (p *Provider) GetWidth(s string) int

GetWidth returns the rendered width of a string

func (*Provider) JoinHorizontal

func (p *Provider) JoinHorizontal(strs ...string) string

JoinHorizontal joins strings horizontally

func (*Provider) JoinVertical

func (p *Provider) JoinVertical(strs ...string) string

JoinVertical joins strings vertically

func (*Provider) PlaceCenter

func (p *Provider) PlaceCenter(width, height int, content string) string

PlaceCenter places content in the center of the given dimensions

func (*Provider) PlaceCenterTop

func (p *Provider) PlaceCenterTop(width, height int, content string) string

PlaceCenterTop places content in the center-top of the given dimensions

func (*Provider) PlaceHorizontal

func (p *Provider) PlaceHorizontal(width int, left string, right string) string

PlaceHorizontal places two components horizontally with the second one on the right

func (*Provider) RenderApprovalButton

func (p *Provider) RenderApprovalButton(text string, selected bool, isApprove bool) string

RenderApprovalButton renders an approval-style button with custom colors and fixed width

func (*Provider) RenderAssistantText

func (p *Provider) RenderAssistantText(text string) string

RenderAssistantText renders text in the assistant color

func (*Provider) RenderBold

func (p *Provider) RenderBold(text string) string

RenderBold renders text with bold styling

func (*Provider) RenderBoldText

func (p *Provider) RenderBoldText(text string) string

RenderBoldText renders bold text

func (*Provider) RenderBordered

func (p *Provider) RenderBordered(content string, width int) string

RenderBordered renders content with a border

func (*Provider) RenderBorderedBox

func (p *Provider) RenderBorderedBox(text, borderColor string, paddingV, paddingH int) string

RenderBorderedBox renders text inside a rounded border with padding

func (*Provider) RenderButton

func (p *Provider) RenderButton(text string, selected bool) string

RenderButton renders a button or selectable option

func (*Provider) RenderCenteredBoldWithColor

func (p *Provider) RenderCenteredBoldWithColor(text, hexColor string, width int) string

RenderCenteredBoldWithColor renders text centered, bold, and with a specific color

func (*Provider) RenderCenteredBorderedBox

func (p *Provider) RenderCenteredBorderedBox(text, borderColor string, width, height, paddingV, paddingH int) string

RenderCenteredBorderedBox renders text in a centered bordered box with specified dimensions

func (*Provider) RenderCodeBlock

func (p *Provider) RenderCodeBlock(code string, width int) string

RenderCodeBlock renders a code block with subtle background

func (*Provider) RenderCreatedText

func (p *Provider) RenderCreatedText(text string) string

RenderCreatedText renders "created" status text (success color, bold)

func (*Provider) RenderCursor

func (p *Provider) RenderCursor(text string) string

RenderCursor renders text with cursor styling. It uses lipgloss Reverse, which swaps the foreground/background of whatever theme colours are in effect, so the cursor stays legible on every theme instead of relying on a hardcoded grey-on-black pair.

func (*Provider) RenderDiffAddition

func (p *Provider) RenderDiffAddition(content string) string

RenderDiffAddition renders a diff addition line

func (*Provider) RenderDiffRemoval

func (p *Provider) RenderDiffRemoval(content string) string

RenderDiffRemoval renders a diff removal line

func (*Provider) RenderDimText

func (p *Provider) RenderDimText(text string) string

RenderDimText renders text in a dimmed style

func (*Provider) RenderErrorIcon

func (p *Provider) RenderErrorIcon(text string) string

RenderErrorIcon renders an error icon (X mark, etc.)

func (*Provider) RenderErrorText

func (p *Provider) RenderErrorText(text string) string

RenderErrorText renders text in the error color

func (*Provider) RenderHeader

func (p *Provider) RenderHeader(text string, width int) string

RenderHeader renders a centered header

func (*Provider) RenderInputField

func (p *Provider) RenderInputField(content string, width int, focused bool, branchLabel string) string

RenderInputField renders an input field with border. When branchLabel is non-empty it is embedded in the top border, right-aligned, as a titled border (e.g. "╭──────── ⎇ main ─╮"); pass "" for a plain border.

func (*Provider) RenderInputPlaceholder

func (p *Provider) RenderInputPlaceholder(text string) string

RenderInputPlaceholder renders placeholder text

func (*Provider) RenderLeftAlignedBorderedBox

func (p *Provider) RenderLeftAlignedBorderedBox(text, borderColor string, width, height, paddingV, paddingH int) string

RenderLeftAlignedBorderedBox renders text in a left-aligned bordered box with specified dimensions

func (*Provider) RenderListItem

func (p *Provider) RenderListItem(content string, selected bool) string

RenderListItem renders a list item (selected or unselected)

func (*Provider) RenderListItemWithDescription

func (p *Provider) RenderListItemWithDescription(title, description string, selected bool) string

RenderListItemWithDescription renders a list item with a description

func (*Provider) RenderMetricText

func (p *Provider) RenderMetricText(text string) string

RenderMetricText renders metric/info text (e.g., byte counts, line counts)

func (*Provider) RenderModal

func (p *Provider) RenderModal(content string, width int) string

RenderModal renders a modal with rounded border

func (*Provider) RenderModalTitle

func (p *Provider) RenderModalTitle(title string) string

RenderModalTitle renders a modal title with emphasis

func (*Provider) RenderPathText

func (p *Provider) RenderPathText(text string) string

RenderPathText renders a file path with accent color and bold

func (*Provider) RenderSelectedIndicator

func (p *Provider) RenderSelectedIndicator(text string) string

RenderSelectedIndicator renders the status-bar indicator holding the selection as a padded pill: reverse video paints the cell background in the accent color with the terminal background as text color, which works on any theme (Theme exposes no background color). The one-column side padding adds two columns of width - splitPartsIntoLines accounts for it.

func (*Provider) RenderSeparator

func (p *Provider) RenderSeparator(width int, char string) string

RenderSeparator renders a horizontal separator line

func (*Provider) RenderSpinner

func (p *Provider) RenderSpinner(frame string) string

RenderSpinner renders a spinner with status color

func (*Provider) RenderStatusBadge

func (p *Provider) RenderStatusBadge(text string, positive bool) string

RenderStatusBadge renders a status badge (e.g., "ENABLED", "DISABLED")

func (*Provider) RenderStatusLine

func (p *Provider) RenderStatusLine(content string) string

RenderStatusLine renders a status line with no padding

func (*Provider) RenderStyledText

func (p *Provider) RenderStyledText(text string, opts StyleOptions) string

RenderStyledText renders text with custom Lipgloss-compatible styling This is an escape hatch for complex styling not covered by other methods

func (*Provider) RenderSuccessIcon

func (p *Provider) RenderSuccessIcon(text string) string

RenderSuccessIcon renders a success icon (checkmark, etc.)

func (*Provider) RenderSuccessText

func (p *Provider) RenderSuccessText(text string) string

RenderSuccessText renders text in the success color

func (*Provider) RenderTitledCard

func (p *Provider) RenderTitledCard(content, title, borderColor, titleColor string, width int) string

RenderTitledCard renders content in a rounded, width-set, padded box with title spliced into the top border (right-aligned). Reuses the same top-border splice as RenderInputField. Pass "" for title to get a plain bordered box at the given width.

func (*Provider) RenderTopAlignedBorderedBox

func (p *Provider) RenderTopAlignedBorderedBox(text, borderColor string, width, height, paddingV, paddingH int) string

RenderTopAlignedBorderedBox renders text in a top-left aligned bordered box with specified dimensions

func (*Provider) RenderUpdatedText

func (p *Provider) RenderUpdatedText(text string) string

RenderUpdatedText renders "updated" status text (status/warning color, bold)

func (*Provider) RenderUserText

func (p *Provider) RenderUserText(text string) string

RenderUserText renders text in the user color

func (*Provider) RenderWarningText

func (p *Provider) RenderWarningText(text string) string

RenderWarningText renders text in the warning/status color

func (*Provider) RenderWithColor

func (p *Provider) RenderWithColor(text, hexColor string) string

RenderWithColor renders text with a specific hex color

func (*Provider) RenderWithColorAndBold

func (p *Provider) RenderWithColorAndBold(text, hexColor string) string

RenderWithColorAndBold renders text with color and bold

func (*Provider) ToolTitleColor

func (p *Provider) ToolTitleColor(toolName string) string

ToolTitleColor returns the accent hex color used to differentiate a tool type on its card's titled border (AC8, no emoji): shells, file mutations, A2A, and generic each get a distinct theme color.

type StyleOptions

type StyleOptions struct {
	Foreground   string
	Background   string
	Bold         bool
	Italic       bool
	Faint        bool
	Width        int
	Padding      [2]int
	MarginBottom int
	MarginTop    int
}

StyleOptions provides options for custom text styling

type ThemeProvider

type ThemeProvider struct {
	// contains filtered or unexported fields
}

ThemeProvider implements tui.ThemeService and manages available themes

func NewThemeProvider

func NewThemeProvider() *ThemeProvider

NewThemeProvider creates a new theme provider with default themes

func (*ThemeProvider) GetCurrentTheme

func (tp *ThemeProvider) GetCurrentTheme() tui.Theme

GetCurrentTheme returns the currently active theme (implements tui.ThemeService interface)

func (*ThemeProvider) GetCurrentThemeName

func (tp *ThemeProvider) GetCurrentThemeName() string

GetCurrentThemeName returns the name of the currently active theme (implements tui.ThemeService interface)

func (*ThemeProvider) GetTheme

func (tp *ThemeProvider) GetTheme(name string) (tui.Theme, error)

GetTheme returns the theme by name, or the current theme if name is empty

func (*ThemeProvider) ListThemes

func (tp *ThemeProvider) ListThemes() []string

ListThemes returns all available theme names (implements tui.ThemeService interface)

func (*ThemeProvider) SetCurrentTheme

func (tp *ThemeProvider) SetCurrentTheme(name string) error

SetCurrentTheme is an alias for SetTheme for backward compatibility

func (*ThemeProvider) SetTheme

func (tp *ThemeProvider) SetTheme(name string) error

SetTheme sets the current theme by name (implements tui.ThemeService interface)

type TokyoNightTheme

type TokyoNightTheme struct{}

TokyoNightTheme is the default theme (same as DefaultTheme)

func NewTokyoNightTheme

func NewTokyoNightTheme() *TokyoNightTheme

func (*TokyoNightTheme) GetAccentColor

func (t *TokyoNightTheme) GetAccentColor() string

func (*TokyoNightTheme) GetAssistantColor

func (t *TokyoNightTheme) GetAssistantColor() string

func (*TokyoNightTheme) GetBorderColor

func (t *TokyoNightTheme) GetBorderColor() string

func (*TokyoNightTheme) GetDiffAddColor

func (t *TokyoNightTheme) GetDiffAddColor() string

func (*TokyoNightTheme) GetDiffRemoveColor

func (t *TokyoNightTheme) GetDiffRemoveColor() string

func (*TokyoNightTheme) GetDimColor

func (t *TokyoNightTheme) GetDimColor() string

func (*TokyoNightTheme) GetErrorColor

func (t *TokyoNightTheme) GetErrorColor() string

func (*TokyoNightTheme) GetStatusColor

func (t *TokyoNightTheme) GetStatusColor() string

func (*TokyoNightTheme) GetSuccessColor

func (t *TokyoNightTheme) GetSuccessColor() string

func (*TokyoNightTheme) GetUserColor

func (t *TokyoNightTheme) GetUserColor() string

func (*TokyoNightTheme) GetWarningColor added in v0.182.0

func (t *TokyoNightTheme) GetWarningColor() string

type TreeStyle

type TreeStyle struct {
	Enumerator lipgloss.Style // tree connector glyphs
	Duration   lipgloss.Style
	Error      lipgloss.Style // the [error: ...] marker
}

TreeStyle colorizes the rendered tree segments. The zero value renders plain text, which suits markdown/code-fence output.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL