Documentation
¶
Overview ¶
Package herald provides a reusable TUI typography library inspired by CSS frameworks such as Tailwind Typography, Bootstrap, and Pico CSS.
It offers HTML-analogous rendering functions (H1-H6, P, Blockquote, lists, inline styles, etc.) that output styled strings via lipgloss v2.
Quick start:
ty := herald.New() // default theme
fmt.Println(ty.H1("Hello, World!"))
fmt.Println(ty.P("Some body text."))
fmt.Println(ty.UL("Apples", "Bananas", "Cherries"))
Customization via functional options:
ty := herald.New(
herald.WithHRWidth(60),
herald.WithBulletChar("-"),
herald.WithH1Style(lipgloss.NewStyle().Bold(true).Foreground(lipgloss.Color("#FF0000"))),
)
Index ¶
- Constants
- Variables
- type ColorPalette
- type ListItem
- type ListKind
- type Option
- func WithAbbrStyle(s lipgloss.Style) Option
- func WithBlockquoteBar(c string) Option
- func WithBlockquoteStyle(s lipgloss.Style) Option
- func WithBoldStyle(s lipgloss.Style) Option
- func WithBulletChar(c string) Option
- func WithCodeBlockStyle(s lipgloss.Style) Option
- func WithCodeFormatter(fn func(code, language string) string) Option
- func WithCodeInlineStyle(s lipgloss.Style) Option
- func WithDDStyle(s lipgloss.Style) Option
- func WithDTStyle(s lipgloss.Style) Option
- func WithH1Style(s lipgloss.Style) Option
- func WithH1UnderlineChar(c string) Option
- func WithH2Style(s lipgloss.Style) Option
- func WithH2UnderlineChar(c string) Option
- func WithH3Style(s lipgloss.Style) Option
- func WithH3UnderlineChar(c string) Option
- func WithH4Style(s lipgloss.Style) Option
- func WithH5Style(s lipgloss.Style) Option
- func WithH6Style(s lipgloss.Style) Option
- func WithHRChar(c string) Option
- func WithHRStyle(s lipgloss.Style) Option
- func WithHRWidth(w int) Option
- func WithHeadingBarChar(c string) Option
- func WithHierarchicalNumbers(enabled bool) Option
- func WithItalicStyle(s lipgloss.Style) Option
- func WithKbdStyle(s lipgloss.Style) Option
- func WithLinkStyle(s lipgloss.Style) Option
- func WithListBulletStyle(s lipgloss.Style) Option
- func WithListIndent(n int) Option
- func WithListItemStyle(s lipgloss.Style) Option
- func WithMarkStyle(s lipgloss.Style) Option
- func WithNestedBulletChars(chars []string) Option
- func WithPalette(p ColorPalette) Option
- func WithParagraphStyle(s lipgloss.Style) Option
- func WithSmallStyle(s lipgloss.Style) Option
- func WithStrikethroughStyle(s lipgloss.Style) Option
- func WithTheme(t Theme) Option
- func WithUnderlineStyle(s lipgloss.Style) Option
- type Theme
- type Typography
- func (t *Typography) Abbr(abbr string, desc ...string) string
- func (t *Typography) Blockquote(text string) string
- func (t *Typography) Bold(text string) string
- func (t *Typography) Code(text string, lang ...string) string
- func (t *Typography) CodeBlock(text string, lang ...string) string
- func (t *Typography) DD(text string) string
- func (t *Typography) DL(pairs [][2]string) string
- func (t *Typography) DT(text string) string
- func (t *Typography) H1(text string) string
- func (t *Typography) H2(text string) string
- func (t *Typography) H3(text string) string
- func (t *Typography) H4(text string) string
- func (t *Typography) H5(text string) string
- func (t *Typography) H6(text string) string
- func (t *Typography) HR() string
- func (t *Typography) Italic(text string) string
- func (t *Typography) Kbd(text string) string
- func (t *Typography) Link(label string, url ...string) string
- func (t *Typography) Mark(text string) string
- func (t *Typography) NestOL(items ...ListItem) string
- func (t *Typography) NestUL(items ...ListItem) string
- func (t *Typography) OL(items ...string) string
- func (t *Typography) P(text string) string
- func (t *Typography) Small(text string) string
- func (t *Typography) Strikethrough(text string) string
- func (t *Typography) Sub(text string) string
- func (t *Typography) Sup(text string) string
- func (t *Typography) Theme() Theme
- func (t *Typography) UL(items ...string) string
- func (t *Typography) Underline(text string) string
Constants ¶
const ( DefaultH1UnderlineChar = "═" DefaultH2UnderlineChar = "─" DefaultH3UnderlineChar = "·" DefaultHeadingBarChar = "▎" DefaultBulletChar = "•" DefaultListIndent = 2 DefaultHRChar = "─" DefaultHRWidth = 40 DefaultBlockquoteBar = "│" )
Default token values used by DefaultTheme and ThemeFromPalette.
Variables ¶
var DefaultNestedBulletChars = []string{"•", "◦", "▪", "▹"}
DefaultNestedBulletChars is the default set of bullet characters that cycle through nesting levels in nested unordered lists.
Functions ¶
This section is empty.
Types ¶
type ColorPalette ¶ added in v0.2.0
type ColorPalette struct {
Primary color.Color // main text, H1 headings
Secondary color.Color // H2, list bullets, accents
Tertiary color.Color // H3, links
Accent color.Color // H4, marks/highlights
Highlight color.Color // H5, abbreviations
Muted color.Color // H6, comments, sub/sup, blockquote, DD, HR
Text color.Color // default body text, paragraphs, list items, DT
Surface color.Color // background for code inline, kbd
Base color.Color // background for code blocks, mark foreground
}
ColorPalette defines a minimal set of colors from which a full Theme can be derived. This allows users to share a single color palette across herald and other Charm ecosystem libraries (e.g. huh).
type ListItem ¶ added in v0.2.0
type ListItem struct {
Text string
Children []ListItem
Kind ListKind // how Children are rendered (UL vs OL)
}
ListItem represents a single entry in a nested list. It may contain children to create hierarchical lists.
func ItemWithChildren ¶ added in v0.2.0
ItemWithChildren creates a ListItem whose children are rendered as an unordered sub-list.
func ItemWithOLChildren ¶ added in v0.2.0
ItemWithOLChildren creates a ListItem whose children are rendered as an ordered sub-list.
type ListKind ¶ added in v0.2.0
type ListKind int
ListKind determines whether a list is rendered as unordered or ordered.
type Option ¶
type Option func(*Typography)
Option is a functional option for configuring a Typography instance.
func WithAbbrStyle ¶
WithAbbrStyle overrides the abbreviation style.
func WithBlockquoteBar ¶
WithBlockquoteBar sets the left-bar character for blockquotes.
func WithBlockquoteStyle ¶
WithBlockquoteStyle overrides the blockquote style.
func WithBoldStyle ¶
WithBoldStyle overrides the bold style.
func WithBulletChar ¶
WithBulletChar sets the bullet character for unordered lists.
func WithCodeBlockStyle ¶
WithCodeBlockStyle overrides the code block style.
func WithCodeFormatter ¶ added in v0.2.0
WithCodeFormatter sets a callback that receives raw code and a language hint, returning syntax-highlighted text. The highlighted text is then wrapped in the CodeInline or CodeBlock style for consistent padding/margins.
func WithCodeInlineStyle ¶
WithCodeInlineStyle overrides the inline code style.
func WithDDStyle ¶
WithDDStyle overrides the definition description style.
func WithDTStyle ¶
WithDTStyle overrides the definition term style.
func WithH1Style ¶
WithH1Style overrides the H1 heading style.
func WithH1UnderlineChar ¶
WithH1UnderlineChar sets the character used for the H1 underline.
func WithH2Style ¶
WithH2Style overrides the H2 heading style.
func WithH2UnderlineChar ¶
WithH2UnderlineChar sets the character used for the H2 underline.
func WithH3Style ¶
WithH3Style overrides the H3 heading style.
func WithH3UnderlineChar ¶
WithH3UnderlineChar sets the character used for the H3 underline.
func WithH4Style ¶
WithH4Style overrides the H4 heading style.
func WithH5Style ¶
WithH5Style overrides the H5 heading style.
func WithH6Style ¶
WithH6Style overrides the H6 heading style.
func WithHRChar ¶
WithHRChar sets the character used for horizontal rules.
func WithHRStyle ¶
WithHRStyle overrides the horizontal rule style.
func WithHRWidth ¶
WithHRWidth sets the width of horizontal rules in characters.
func WithHeadingBarChar ¶
WithHeadingBarChar sets the bar prefix character for H4-H6.
func WithHierarchicalNumbers ¶ added in v0.2.0
WithHierarchicalNumbers enables hierarchical numbering for nested ordered lists (e.g. 1., 1.1, 1.2, 2., 2.1). When false (default), each nested sub-list restarts numbering at 1.
func WithItalicStyle ¶
WithItalicStyle overrides the italic style.
func WithKbdStyle ¶
WithKbdStyle overrides the keyboard key style.
func WithLinkStyle ¶
WithLinkStyle overrides the link style.
func WithListBulletStyle ¶
WithListBulletStyle overrides the bullet/number marker style.
func WithListIndent ¶ added in v0.2.0
WithListIndent sets the number of spaces per nesting level for nested lists.
func WithListItemStyle ¶
WithListItemStyle overrides the list item text style.
func WithMarkStyle ¶
WithMarkStyle overrides the highlight/mark style.
func WithNestedBulletChars ¶ added in v0.2.0
WithNestedBulletChars sets the bullet characters that cycle through nesting levels in nested unordered lists.
func WithPalette ¶ added in v0.2.0
func WithPalette(p ColorPalette) Option
WithPalette derives a complete theme from a ColorPalette and sets it. It is a convenience shortcut for WithTheme(ThemeFromPalette(p)).
func WithParagraphStyle ¶
WithParagraphStyle overrides the paragraph style.
func WithSmallStyle ¶
WithSmallStyle overrides the small/faint style.
func WithStrikethroughStyle ¶
WithStrikethroughStyle overrides the strikethrough style.
func WithUnderlineStyle ¶
WithUnderlineStyle overrides the underline style.
type Theme ¶
type Theme struct {
// Headings H1-H6
H1 lipgloss.Style
H2 lipgloss.Style
H3 lipgloss.Style
H4 lipgloss.Style
H5 lipgloss.Style
H6 lipgloss.Style
// Text block elements
Paragraph lipgloss.Style
Blockquote lipgloss.Style
CodeInline lipgloss.Style
CodeBlock lipgloss.Style
HR lipgloss.Style
// List elements
ListBullet lipgloss.Style // style for the bullet/number marker
ListItem lipgloss.Style // style for list item text
// Inline styles
Bold lipgloss.Style
Italic lipgloss.Style
Underline lipgloss.Style
Strikethrough lipgloss.Style
Small lipgloss.Style
Mark lipgloss.Style
Link lipgloss.Style
Kbd lipgloss.Style
Abbr lipgloss.Style
Sub lipgloss.Style
Sup lipgloss.Style
// Definition list
DT lipgloss.Style // definition term
DD lipgloss.Style // definition description
// Callbacks
CodeFormatter func(code, language string) string // optional syntax highlighter
// Heading decoration
H1UnderlineChar string // character repeated under H1 (e.g. "═")
H2UnderlineChar string // character repeated under H2 (e.g. "─")
H3UnderlineChar string // character repeated under H3 (e.g. "·")
HeadingBarChar string // left-bar prefix for H4-H6 (e.g. "▎")
// Configurable tokens
BulletChar string // character used for unordered list bullets
NestedBulletChars []string // bullet chars cycling per depth for nested lists
ListIndent int // spaces per nesting level for nested lists
HierarchicalNumbers bool // use hierarchical numbering (e.g. 2.1, 2.2) for nested OL
HRChar string // character repeated for horizontal rules
HRWidth int // width of horizontal rule in characters
BlockquoteBar string // left-bar character for blockquotes
}
Theme holds all style definitions used by Typography to render elements. Each field corresponds to a visual element and is a lipgloss.Style.
func Base16Theme ¶ added in v0.2.0
func Base16Theme() Theme
Base16Theme returns a Theme based on ANSI base16 terminal colors. Colors match huh's ThemeBase16. Base16 uses standard ANSI color indices; adaptive colors are used for API consistency.
func CatppuccinTheme ¶ added in v0.2.0
func CatppuccinTheme() Theme
CatppuccinTheme returns a Theme based on the Catppuccin color palette. Adapts to the terminal background: Mocha on dark, Latte on light. Colors match huh's ThemeCatppuccin.
func CharmTheme ¶ added in v0.2.0
func CharmTheme() Theme
CharmTheme returns a Theme based on Charm's brand color palette. Auto-detects terminal background for light/dark variants. Colors match huh's ThemeCharm.
func DefaultTheme ¶
func DefaultTheme() Theme
DefaultTheme returns a Theme based on the Rose Pine color palette.
func DraculaTheme ¶ added in v0.2.0
func DraculaTheme() Theme
DraculaTheme returns a Theme based on the Dracula color palette. Colors match huh's ThemeDracula. Dracula is a dark-only palette; adaptive colors are used for API consistency.
func ThemeFromPalette ¶ added in v0.2.0
func ThemeFromPalette(p ColorPalette) Theme
ThemeFromPalette constructs a complete Theme by mapping palette colors to all style fields. Configurable tokens use the same defaults as DefaultTheme.
type Typography ¶
type Typography struct {
// contains filtered or unexported fields
}
Typography is the central renderer. It holds a Theme and exposes methods for every supported typographic element.
func New ¶
func New(opts ...Option) *Typography
New creates a new Typography instance with the default theme, then applies any provided functional options.
func (*Typography) Abbr ¶
func (t *Typography) Abbr(abbr string, desc ...string) string
Abbr renders an abbreviation. If a description is provided it is shown in parentheses after the abbreviation.
func (*Typography) Blockquote ¶
func (t *Typography) Blockquote(text string) string
Blockquote renders a blockquote with a left border bar. Multi-line text is handled by prepending the bar to every line.
func (*Typography) Code ¶
func (t *Typography) Code(text string, lang ...string) string
Code renders inline code. If a language is provided and a CodeFormatter is set on the theme, the formatter is applied before wrapping in the style.
func (*Typography) CodeBlock ¶
func (t *Typography) CodeBlock(text string, lang ...string) string
CodeBlock renders a fenced code block. If a language is provided and a CodeFormatter is set on the theme, the formatter is applied before wrapping in the style.
func (*Typography) DD ¶
func (t *Typography) DD(text string) string
DD renders a single definition description.
func (*Typography) DL ¶
func (t *Typography) DL(pairs [][2]string) string
DL renders a definition list from term-description pairs. Each pair is a two-element array: [term, description]. Odd-length slices ignore the last unpaired element.
func (*Typography) DT ¶
func (t *Typography) DT(text string) string
DT renders a single definition term.
func (*Typography) H1 ¶
func (t *Typography) H1(text string) string
H1 renders text as a level-1 heading with a double-line underline.
func (*Typography) H2 ¶
func (t *Typography) H2(text string) string
H2 renders text as a level-2 heading with a single-line underline.
func (*Typography) H3 ¶
func (t *Typography) H3(text string) string
H3 renders text as a level-3 heading with a dotted underline.
func (*Typography) H4 ¶
func (t *Typography) H4(text string) string
H4 renders text as a level-4 heading with a bar prefix.
func (*Typography) H5 ¶
func (t *Typography) H5(text string) string
H5 renders text as a level-5 heading with a bar prefix.
func (*Typography) H6 ¶
func (t *Typography) H6(text string) string
H6 renders text as a level-6 heading with a bar prefix.
func (*Typography) Italic ¶
func (t *Typography) Italic(text string) string
Italic renders italic text.
func (*Typography) Kbd ¶
func (t *Typography) Kbd(text string) string
Kbd renders a keyboard key indicator.
func (*Typography) Link ¶
func (t *Typography) Link(label string, url ...string) string
Link renders a styled URL or link text. If both label and url are provided, it renders as "label (url)". If only one argument is given, it is treated as both the label and the URL.
func (*Typography) Mark ¶
func (t *Typography) Mark(text string) string
Mark renders highlighted text.
func (*Typography) NestOL ¶ added in v0.2.0
func (t *Typography) NestOL(items ...ListItem) string
NestOL renders a nested ordered list from the provided ListItems.
func (*Typography) NestUL ¶ added in v0.2.0
func (t *Typography) NestUL(items ...ListItem) string
NestUL renders a nested unordered list from the provided ListItems.
func (*Typography) OL ¶
func (t *Typography) OL(items ...string) string
OL renders an ordered (numbered) list from the provided items.
func (*Typography) Small ¶
func (t *Typography) Small(text string) string
Small renders small/faint text.
func (*Typography) Strikethrough ¶
func (t *Typography) Strikethrough(text string) string
Strikethrough renders strikethrough text.
func (*Typography) Sub ¶
func (t *Typography) Sub(text string) string
Sub renders a subscript marker. In a terminal we prefix with an underscore to visually indicate subscript.
func (*Typography) Sup ¶
func (t *Typography) Sup(text string) string
Sup renders a superscript marker. In a terminal we prefix with a caret to visually indicate superscript.
func (*Typography) Theme ¶
func (t *Typography) Theme() Theme
Theme returns a copy of the current theme.
func (*Typography) UL ¶
func (t *Typography) UL(items ...string) string
UL renders an unordered (bulleted) list from the provided items.
func (*Typography) Underline ¶
func (t *Typography) Underline(text string) string
Underline renders underlined text.
Source Files
¶
Directories
¶
| Path | Synopsis |
|---|---|
|
examples
|
|
|
basic
command
Basic usage of herald with the default Rose Pine theme.
|
Basic usage of herald with the default Rose Pine theme. |
|
builtin-themes
command
Using herald's built-in named themes that match huh's color palettes.
|
Using herald's built-in named themes that match huh's color palettes. |
|
custom-options
command
Customizing herald with functional options: override individual styles, decoration characters, and tokens without replacing the entire theme.
|
Customizing herald with functional options: override individual styles, decoration characters, and tokens without replacing the entire theme. |
|
lists
command
Demonstrates flat lists, nested lists, mixed nesting, and hierarchical numbering.
|
Demonstrates flat lists, nested lists, mixed nesting, and hierarchical numbering. |
|
palette
command
Using ColorPalette to create a consistent theme from just 8 colors.
|
Using ColorPalette to create a consistent theme from just 8 colors. |