agent_m/agentm/theme/palette.py

95 lines
2.9 KiB
Python

from typing import Literal, Optional
class ThemeManager:
def __init__(self, theme: Literal["dark", "light"] = "dark"):
self.use_theme(theme)
def use_theme(self, theme: str):
if theme == "dark":
self.ACCENT = "#ed7d3a"
self.ACCENT_HOVER = "rgb(236, 194, 169)"
self.BACKGROUND = "#0e0e0e"
self.FOREGROUND = "#f0f0f0"
self.BORDER = "#3a9bed"
self.SURFACE_MUTED = "#8b8b8b"
self.SUCCESS = "#4cd964"
self.ERROR = "red"
self.DISABLED = "#999999"
self.DISABLED_BG = "#444444"
self.DISABLED_BORDER = "#666666"
else:
self.ACCENT = "#004488"
self.ACCENT_HOVER = "#0077cc"
self.BACKGROUND = "#ffffff"
self.FOREGROUND = "#000000"
self.BORDER = "#003366"
self.SURFACE_MUTED = "#dddddd"
self.SUCCESS = "#007f00"
self.ERROR = "#cc0000"
self.DISABLED = "#cccccc"
self.DISABLED_BG = "#f0f0f0"
self.DISABLED_BORDER = "#aaaaaa"
# Shared base + primary + tonal
self.DARK = "#000000"
self.LIGHT = "#ffffff"
self.PRIMARY_0 = "#6e1106"
self.PRIMARY_10 = "#812f1f"
self.PRIMARY_20 = "#934937"
self.PRIMARY_30 = "#a46251"
self.PRIMARY_40 = "#b57b6b"
self.PRIMARY_50 = "#c59487"
self.SURFACE_0 = "#121212"
self.SURFACE_10 = "#282828"
self.SURFACE_20 = "#3f3f3f"
self.SURFACE_30 = "#575757"
self.SURFACE_40 = "#717171"
self.SURFACE_50 = "#8b8b8b"
self.TONAL_0 = "#1d1411"
self.TONAL_10 = "#322927"
self.TONAL_20 = "#48403e"
self.TONAL_30 = "#605856"
self.TONAL_40 = "#787270"
self.TONAL_50 = "#928c8b"
self.COMPONENT_CLASSES = {
"palette--foreground",
"palette--background",
"palette--accent",
"palette--accent-hover",
"palette--border",
"palette--surface-muted",
"palette--primary-0",
"palette--primary-10",
"palette--primary-20",
"palette--primary-30",
"palette--primary-40",
"palette--primary-50",
"palette--surface-0",
"palette--surface-10",
"palette--surface-20",
"palette--surface-30",
"palette--surface-40",
"palette--surface-50",
"palette--success",
"palette--error",
"palette--disabled",
"palette-bg--accent",
"palette-bg--background",
"palette-bg--surface",
}
# === Singleton-style global instance ===
_theme_instance: Optional[ThemeManager] = None
def get_theme(theme: Literal["dark", "light"] = "dark") -> ThemeManager:
global _theme_instance
if _theme_instance is None:
_theme_instance = ThemeManager(theme)
return _theme_instance