mirror of
https://github.com/Gouryella/drip.git
synced 2026-02-24 05:10:43 +00:00
enhancements - Add adaptive HTTP response handling with automatic streaming for large responses (>1MB) - Implement zero-copy streaming using buffer pools for better performance - Add compression module for reduced bandwidth usage - Add GitHub Container Registry workflow for automated Docker builds - Add production-optimized Dockerfile and docker-compose configuration - Simplify background mode with -d flag and improved daemon management - Update documentation with new command syntax and deployment guides - Clean up unused code and improve error handling - Fix lipgloss style usage (remove unnecessary .Copy() calls)
189 lines
4.0 KiB
Go
189 lines
4.0 KiB
Go
package ui
|
|
|
|
import (
|
|
"github.com/charmbracelet/lipgloss"
|
|
)
|
|
|
|
var (
|
|
// Colors inspired by Vercel CLI
|
|
successColor = lipgloss.Color("#0070F3")
|
|
warningColor = lipgloss.Color("#F5A623")
|
|
errorColor = lipgloss.Color("#E00")
|
|
mutedColor = lipgloss.Color("#888")
|
|
highlightColor = lipgloss.Color("#0070F3")
|
|
cyanColor = lipgloss.Color("#50E3C2")
|
|
|
|
// Box styles - Vercel-like clean box
|
|
boxStyle = lipgloss.NewStyle().
|
|
Border(lipgloss.RoundedBorder()).
|
|
Padding(1, 2).
|
|
MarginTop(1).
|
|
MarginBottom(1)
|
|
|
|
successBoxStyle = boxStyle.BorderForeground(successColor)
|
|
|
|
warningBoxStyle = boxStyle.BorderForeground(warningColor)
|
|
|
|
errorBoxStyle = boxStyle.BorderForeground(errorColor)
|
|
|
|
// Text styles
|
|
titleStyle = lipgloss.NewStyle().
|
|
Bold(true)
|
|
|
|
subtitleStyle = lipgloss.NewStyle().
|
|
Foreground(mutedColor)
|
|
|
|
successStyle = lipgloss.NewStyle().
|
|
Foreground(successColor).
|
|
Bold(true)
|
|
|
|
errorStyle = lipgloss.NewStyle().
|
|
Foreground(errorColor).
|
|
Bold(true)
|
|
|
|
warningStyle = lipgloss.NewStyle().
|
|
Foreground(warningColor).
|
|
Bold(true)
|
|
|
|
mutedStyle = lipgloss.NewStyle().
|
|
Foreground(mutedColor)
|
|
|
|
highlightStyle = lipgloss.NewStyle().
|
|
Foreground(highlightColor).
|
|
Bold(true)
|
|
|
|
cyanStyle = lipgloss.NewStyle().
|
|
Foreground(cyanColor)
|
|
|
|
urlStyle = lipgloss.NewStyle().
|
|
Foreground(highlightColor).
|
|
Underline(true).
|
|
Bold(true)
|
|
|
|
labelStyle = lipgloss.NewStyle().
|
|
Foreground(mutedColor).
|
|
Width(12)
|
|
|
|
valueStyle = lipgloss.NewStyle().
|
|
Bold(true)
|
|
|
|
// Table styles
|
|
tableHeaderStyle = lipgloss.NewStyle().
|
|
Foreground(mutedColor).
|
|
Bold(true).
|
|
PaddingRight(2)
|
|
|
|
tableCellStyle = lipgloss.NewStyle().
|
|
PaddingRight(2)
|
|
)
|
|
|
|
// Success returns a styled success message
|
|
func Success(text string) string {
|
|
return successStyle.Render("✓ " + text)
|
|
}
|
|
|
|
// Error returns a styled error message
|
|
func Error(text string) string {
|
|
return errorStyle.Render("✗ " + text)
|
|
}
|
|
|
|
// Warning returns a styled warning message
|
|
func Warning(text string) string {
|
|
return warningStyle.Render("⚠ " + text)
|
|
}
|
|
|
|
// Muted returns a styled muted text
|
|
func Muted(text string) string {
|
|
return mutedStyle.Render(text)
|
|
}
|
|
|
|
// Highlight returns a styled highlighted text
|
|
func Highlight(text string) string {
|
|
return highlightStyle.Render(text)
|
|
}
|
|
|
|
// Cyan returns a styled cyan text
|
|
func Cyan(text string) string {
|
|
return cyanStyle.Render(text)
|
|
}
|
|
|
|
// URL returns a styled URL
|
|
func URL(text string) string {
|
|
return urlStyle.Render(text)
|
|
}
|
|
|
|
// Title returns a styled title
|
|
func Title(text string) string {
|
|
return titleStyle.Render(text)
|
|
}
|
|
|
|
// Subtitle returns a styled subtitle
|
|
func Subtitle(text string) string {
|
|
return subtitleStyle.Render(text)
|
|
}
|
|
|
|
// KeyValue returns a styled key-value pair
|
|
func KeyValue(key, value string) string {
|
|
return labelStyle.Render(key+":") + " " + valueStyle.Render(value)
|
|
}
|
|
|
|
// Info renders an info box (Vercel-style)
|
|
func Info(title string, lines ...string) string {
|
|
content := titleStyle.Render(title)
|
|
if len(lines) > 0 {
|
|
content += "\n\n"
|
|
for i, line := range lines {
|
|
if i > 0 {
|
|
content += "\n"
|
|
}
|
|
content += line
|
|
}
|
|
}
|
|
return boxStyle.Render(content)
|
|
}
|
|
|
|
// SuccessBox renders a success box
|
|
func SuccessBox(title string, lines ...string) string {
|
|
content := successStyle.Render("✓ " + title)
|
|
if len(lines) > 0 {
|
|
content += "\n\n"
|
|
for i, line := range lines {
|
|
if i > 0 {
|
|
content += "\n"
|
|
}
|
|
content += line
|
|
}
|
|
}
|
|
return successBoxStyle.Render(content)
|
|
}
|
|
|
|
// WarningBox renders a warning box
|
|
func WarningBox(title string, lines ...string) string {
|
|
content := warningStyle.Render("⚠ " + title)
|
|
if len(lines) > 0 {
|
|
content += "\n\n"
|
|
for i, line := range lines {
|
|
if i > 0 {
|
|
content += "\n"
|
|
}
|
|
content += line
|
|
}
|
|
}
|
|
return warningBoxStyle.Render(content)
|
|
}
|
|
|
|
// ErrorBox renders an error box
|
|
func ErrorBox(title string, lines ...string) string {
|
|
content := errorStyle.Render("✗ " + title)
|
|
if len(lines) > 0 {
|
|
content += "\n\n"
|
|
for i, line := range lines {
|
|
if i > 0 {
|
|
content += "\n"
|
|
}
|
|
content += line
|
|
}
|
|
}
|
|
return errorBoxStyle.Render(content)
|
|
}
|