|
|
""" |
|
|
Gradio theme configurations for AnyCoder. |
|
|
Provides multiple theme options with different visual styles. |
|
|
""" |
|
|
import os |
|
|
import gradio as gr |
|
|
|
|
|
def get_saved_theme(): |
|
|
"""Get the saved theme preference from file""" |
|
|
try: |
|
|
if os.path.exists('.theme_preference'): |
|
|
with open('.theme_preference', 'r') as f: |
|
|
return f.read().strip() |
|
|
except: |
|
|
pass |
|
|
return "Developer" |
|
|
def save_theme_preference(theme_name): |
|
|
"""Save theme preference to file""" |
|
|
try: |
|
|
with open('.theme_preference', 'w') as f: |
|
|
f.write(theme_name) |
|
|
except: |
|
|
pass |
|
|
|
|
|
THEME_CONFIGS = { |
|
|
"Default": { |
|
|
"theme": gr.themes.Default(), |
|
|
"description": "Gradio's standard theme with clean orange accents" |
|
|
}, |
|
|
"Base": { |
|
|
"theme": gr.themes.Base( |
|
|
primary_hue="blue", |
|
|
secondary_hue="slate", |
|
|
neutral_hue="slate", |
|
|
text_size="sm", |
|
|
spacing_size="sm", |
|
|
radius_size="md" |
|
|
), |
|
|
"description": "Minimal foundation theme with blue accents" |
|
|
}, |
|
|
"Soft": { |
|
|
"theme": gr.themes.Soft( |
|
|
primary_hue="emerald", |
|
|
secondary_hue="emerald", |
|
|
neutral_hue="slate", |
|
|
text_size="sm", |
|
|
spacing_size="md", |
|
|
radius_size="lg" |
|
|
), |
|
|
"description": "Gentle rounded theme with soft emerald colors" |
|
|
}, |
|
|
"Monochrome": { |
|
|
"theme": gr.themes.Monochrome( |
|
|
primary_hue="slate", |
|
|
secondary_hue="slate", |
|
|
neutral_hue="slate", |
|
|
text_size="sm", |
|
|
spacing_size="sm", |
|
|
radius_size="sm" |
|
|
), |
|
|
"description": "Elegant black and white design" |
|
|
}, |
|
|
"Glass": { |
|
|
"theme": gr.themes.Glass( |
|
|
primary_hue="blue", |
|
|
secondary_hue="blue", |
|
|
neutral_hue="slate", |
|
|
text_size="sm", |
|
|
spacing_size="md", |
|
|
radius_size="lg" |
|
|
), |
|
|
"description": "Modern glassmorphism with blur effects" |
|
|
}, |
|
|
"Dark Ocean": { |
|
|
"theme": gr.themes.Base( |
|
|
primary_hue="blue", |
|
|
secondary_hue="slate", |
|
|
neutral_hue="slate", |
|
|
text_size="sm", |
|
|
spacing_size="sm", |
|
|
radius_size="md" |
|
|
).set( |
|
|
body_background_fill="#0f172a", |
|
|
body_background_fill_dark="#0f172a", |
|
|
background_fill_primary="#3b82f6", |
|
|
background_fill_secondary="#1e293b", |
|
|
border_color_primary="#334155", |
|
|
block_background_fill="#1e293b", |
|
|
block_border_color="#334155", |
|
|
body_text_color="#f1f5f9", |
|
|
body_text_color_dark="#f1f5f9", |
|
|
block_label_text_color="#f1f5f9", |
|
|
block_label_text_color_dark="#f1f5f9", |
|
|
block_title_text_color="#f1f5f9", |
|
|
block_title_text_color_dark="#f1f5f9", |
|
|
input_background_fill="#0f172a", |
|
|
input_background_fill_dark="#0f172a", |
|
|
input_border_color="#334155", |
|
|
input_border_color_dark="#334155", |
|
|
button_primary_background_fill="#3b82f6", |
|
|
button_primary_border_color="#3b82f6", |
|
|
button_secondary_background_fill="#334155", |
|
|
button_secondary_border_color="#475569" |
|
|
), |
|
|
"description": "Deep blue dark theme perfect for coding" |
|
|
}, |
|
|
"Cyberpunk": { |
|
|
"theme": gr.themes.Base( |
|
|
primary_hue="fuchsia", |
|
|
secondary_hue="cyan", |
|
|
neutral_hue="slate", |
|
|
text_size="sm", |
|
|
spacing_size="sm", |
|
|
radius_size="none", |
|
|
font="Orbitron" |
|
|
).set( |
|
|
body_background_fill="#0a0a0f", |
|
|
body_background_fill_dark="#0a0a0f", |
|
|
background_fill_primary="#ff10f0", |
|
|
background_fill_secondary="#1a1a2e", |
|
|
border_color_primary="#00f5ff", |
|
|
block_background_fill="#1a1a2e", |
|
|
block_border_color="#00f5ff", |
|
|
body_text_color="#00f5ff", |
|
|
body_text_color_dark="#00f5ff", |
|
|
block_label_text_color="#ff10f0", |
|
|
block_label_text_color_dark="#ff10f0", |
|
|
block_title_text_color="#ff10f0", |
|
|
block_title_text_color_dark="#ff10f0", |
|
|
input_background_fill="#0a0a0f", |
|
|
input_background_fill_dark="#0a0a0f", |
|
|
input_border_color="#00f5ff", |
|
|
input_border_color_dark="#00f5ff", |
|
|
button_primary_background_fill="#ff10f0", |
|
|
button_primary_border_color="#ff10f0", |
|
|
button_secondary_background_fill="#1a1a2e", |
|
|
button_secondary_border_color="#00f5ff" |
|
|
), |
|
|
"description": "Futuristic neon cyber aesthetics" |
|
|
}, |
|
|
"Forest": { |
|
|
"theme": gr.themes.Soft( |
|
|
primary_hue="emerald", |
|
|
secondary_hue="green", |
|
|
neutral_hue="emerald", |
|
|
text_size="sm", |
|
|
spacing_size="md", |
|
|
radius_size="lg" |
|
|
).set( |
|
|
body_background_fill="#f0fdf4", |
|
|
body_background_fill_dark="#064e3b", |
|
|
background_fill_primary="#059669", |
|
|
background_fill_secondary="#ecfdf5", |
|
|
border_color_primary="#bbf7d0", |
|
|
block_background_fill="#ffffff", |
|
|
block_border_color="#d1fae5", |
|
|
body_text_color="#064e3b", |
|
|
body_text_color_dark="#f0fdf4", |
|
|
block_label_text_color="#064e3b", |
|
|
block_label_text_color_dark="#f0fdf4", |
|
|
block_title_text_color="#059669", |
|
|
block_title_text_color_dark="#10b981" |
|
|
), |
|
|
"description": "Nature-inspired green earth tones" |
|
|
}, |
|
|
"High Contrast": { |
|
|
"theme": gr.themes.Base( |
|
|
primary_hue="yellow", |
|
|
secondary_hue="slate", |
|
|
neutral_hue="slate", |
|
|
text_size="lg", |
|
|
spacing_size="lg", |
|
|
radius_size="sm" |
|
|
).set( |
|
|
body_background_fill="#ffffff", |
|
|
body_background_fill_dark="#ffffff", |
|
|
background_fill_primary="#000000", |
|
|
background_fill_secondary="#ffffff", |
|
|
border_color_primary="#000000", |
|
|
block_background_fill="#ffffff", |
|
|
block_border_color="#000000", |
|
|
body_text_color="#000000", |
|
|
body_text_color_dark="#000000", |
|
|
block_label_text_color="#000000", |
|
|
block_label_text_color_dark="#000000", |
|
|
block_title_text_color="#000000", |
|
|
block_title_text_color_dark="#000000", |
|
|
input_background_fill="#ffffff", |
|
|
input_background_fill_dark="#ffffff", |
|
|
input_border_color="#000000", |
|
|
input_border_color_dark="#000000", |
|
|
button_primary_background_fill="#ffff00", |
|
|
button_primary_border_color="#000000", |
|
|
button_secondary_background_fill="#ffffff", |
|
|
button_secondary_border_color="#000000" |
|
|
), |
|
|
"description": "Accessibility-focused high visibility" |
|
|
}, |
|
|
"Developer": { |
|
|
"theme": gr.themes.Base( |
|
|
primary_hue="blue", |
|
|
secondary_hue="slate", |
|
|
neutral_hue="slate", |
|
|
text_size="sm", |
|
|
spacing_size="sm", |
|
|
radius_size="sm", |
|
|
font="Consolas" |
|
|
).set( |
|
|
|
|
|
body_background_fill="#1e1e1e", |
|
|
body_background_fill_dark="#1e1e1e", |
|
|
background_fill_primary="#007acc", |
|
|
background_fill_secondary="#252526", |
|
|
border_color_primary="#3e3e42", |
|
|
block_background_fill="#252526", |
|
|
block_border_color="#3e3e42", |
|
|
body_text_color="#cccccc", |
|
|
body_text_color_dark="#cccccc", |
|
|
block_label_text_color="#cccccc", |
|
|
block_label_text_color_dark="#cccccc", |
|
|
block_title_text_color="#ffffff", |
|
|
block_title_text_color_dark="#ffffff", |
|
|
input_background_fill="#2d2d30", |
|
|
input_background_fill_dark="#2d2d30", |
|
|
input_border_color="#3e3e42", |
|
|
input_border_color_dark="#3e3e42", |
|
|
input_border_color_focus="#007acc", |
|
|
input_border_color_focus_dark="#007acc", |
|
|
button_primary_background_fill="#007acc", |
|
|
button_primary_border_color="#007acc", |
|
|
button_primary_background_fill_hover="#0e639c", |
|
|
button_secondary_background_fill="#2d2d30", |
|
|
button_secondary_border_color="#3e3e42", |
|
|
button_secondary_text_color="#cccccc" |
|
|
), |
|
|
"description": "Authentic VS Code dark theme with exact color matching" |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
THEME_FEATURES = { |
|
|
"Default": ["Orange accents", "Clean layout", "Standard Gradio look"], |
|
|
"Base": ["Blue accents", "Minimal styling", "Clean foundation"], |
|
|
"Soft": ["Rounded corners", "Emerald colors", "Comfortable viewing"], |
|
|
"Monochrome": ["Black & white", "High elegance", "Timeless design"], |
|
|
"Glass": ["Glassmorphism", "Blur effects", "Translucent elements"], |
|
|
"Dark Ocean": ["Deep blue palette", "Dark theme", "Easy on eyes"], |
|
|
"Cyberpunk": ["Neon cyan/magenta", "Futuristic fonts", "Cyber vibes"], |
|
|
"Forest": ["Nature inspired", "Green tones", "Organic rounded"], |
|
|
"High Contrast": ["Black/white/yellow", "High visibility", "Accessibility"], |
|
|
"Developer": ["Authentic VS Code colors", "Consolas/Monaco fonts", "Exact theme matching"] |
|
|
} |
|
|
|
|
|
|
|
|
current_theme_name = get_saved_theme() |
|
|
current_theme = THEME_CONFIGS[current_theme_name]["theme"] |
|
|
|
|
|
|