UNPKG

@owloops/claude-powerline

Version:

Beautiful vim-style powerline statusline for Claude Code with real-time usage tracking, git integration, and custom themes

159 lines (149 loc) 3.81 kB
import { darkTheme, darkAnsi256Theme, darkAnsiTheme } from "./dark"; import { lightTheme, lightAnsi256Theme, lightAnsiTheme } from "./light"; import { nordTheme, nordAnsi256Theme, nordAnsiTheme } from "./nord"; import { tokyoNightTheme, tokyoNightAnsi256Theme, tokyoNightAnsiTheme, } from "./tokyo-night"; import { rosePineTheme, rosePineAnsi256Theme, rosePineAnsiTheme, } from "./rose-pine"; import { gruvboxTheme, gruvboxAnsi256Theme, gruvboxAnsiTheme } from "./gruvbox"; export interface SegmentColor { bg: string; fg: string; bold?: boolean; } export interface ColorTheme { directory: SegmentColor; git: SegmentColor; model: SegmentColor; session: SegmentColor; block: SegmentColor; today: SegmentColor; tmux: SegmentColor; context: SegmentColor; contextWarning: SegmentColor; contextCritical: SegmentColor; metrics: SegmentColor; version: SegmentColor; env: SegmentColor; weekly: SegmentColor; agent: SegmentColor; thinking: SegmentColor; cacheTimer: SegmentColor; } export interface PowerlineColors { reset: string; modeBg: string; modeFg: string; modeBold: boolean; gitBg: string; gitFg: string; gitBold: boolean; modelBg: string; modelFg: string; modelBold: boolean; sessionBg: string; sessionFg: string; sessionBold: boolean; blockBg: string; blockFg: string; blockBold: boolean; todayBg: string; todayFg: string; todayBold: boolean; tmuxBg: string; tmuxFg: string; tmuxBold: boolean; contextBg: string; contextFg: string; contextBold: boolean; contextWarningBg: string; contextWarningFg: string; contextWarningBold: boolean; contextCriticalBg: string; contextCriticalFg: string; contextCriticalBold: boolean; metricsBg: string; metricsFg: string; metricsBold: boolean; versionBg: string; versionFg: string; versionBold: boolean; envBg: string; envFg: string; envBold: boolean; weeklyBg: string; weeklyFg: string; weeklyBold: boolean; agentBg: string; agentFg: string; agentBold: boolean; thinkingBg: string; thinkingFg: string; thinkingBold: boolean; cacheTimerBg: string; cacheTimerFg: string; cacheTimerBold: boolean; partFg: Record<string, string>; } export const BUILT_IN_THEMES: Record<string, ColorTheme> = { dark: darkTheme, "dark-ansi256": darkAnsi256Theme, "dark-ansi": darkAnsiTheme, light: lightTheme, "light-ansi256": lightAnsi256Theme, "light-ansi": lightAnsiTheme, nord: nordTheme, "nord-ansi256": nordAnsi256Theme, "nord-ansi": nordAnsiTheme, "tokyo-night": tokyoNightTheme, "tokyo-night-ansi256": tokyoNightAnsi256Theme, "tokyo-night-ansi": tokyoNightAnsiTheme, "rose-pine": rosePineTheme, "rose-pine-ansi256": rosePineAnsi256Theme, "rose-pine-ansi": rosePineAnsiTheme, gruvbox: gruvboxTheme, "gruvbox-ansi256": gruvboxAnsi256Theme, "gruvbox-ansi": gruvboxAnsiTheme, }; export function getTheme( themeName: string, colorSupport?: "none" | "ansi" | "ansi256" | "truecolor", ): ColorTheme | null { const baseTheme = BUILT_IN_THEMES[themeName]; if (!baseTheme) return null; if (colorSupport === "none" || colorSupport === "ansi") { const ansiVariant = BUILT_IN_THEMES[`${themeName}-ansi`]; if (ansiVariant) return ansiVariant; } if (colorSupport === "ansi256") { const ansi256Variant = BUILT_IN_THEMES[`${themeName}-ansi256`]; if (ansi256Variant) return ansi256Variant; } return baseTheme; } export { darkTheme, darkAnsi256Theme, darkAnsiTheme, lightTheme, lightAnsi256Theme, lightAnsiTheme, nordTheme, nordAnsi256Theme, nordAnsiTheme, tokyoNightTheme, tokyoNightAnsi256Theme, tokyoNightAnsiTheme, rosePineTheme, rosePineAnsi256Theme, rosePineAnsiTheme, gruvboxTheme, gruvboxAnsi256Theme, gruvboxAnsiTheme, };