FVOICE_V2 / src /FVoiceTheme.py
Alazka2503's picture
theme mod
1c3eb66
from typing import Iterable
from gradio.themes.soft import Soft
from gradio.themes.utils import colors, fonts, sizes
from gradio.themes import Color
class FVoiceTheme(Soft):
"""Subclase personalizada del tema base - Siempre modo oscuro"""
def __init__(
self,
*,
primary_hue: colors.Color | str = Color(
c50="#0E000F", # Más oscuro para elementos claros
c100="#150016", # Oscuro
c200="#29104A", # Púrpura oscuro
c300="#29104A", # Púrpura oscuro
c400="#522C5D", # Púrpura medio
c500="#764ba2", # Púrpura claro
c600="#29104A", # Púrpura oscuro
c700="#0E000F", # Muy oscuro
c800="#150016", # Oscuro
c900="#522C5D", # Púrpura medio
c950="#0E000F" # Muy oscuro
),
secondary_hue: colors.Color | str = Color(
c50="#0E000F", # Oscuro para elementos secundarios
c100="#150016", # Oscuro
c200="#29104A", # Púrpura oscuro
c300="#522C5D", # Púrpura medio
c400="#764ba2", # Púrpura claro
c500="#E3B6B1", # Rosa suave
c600="#FFE3D8", # Rosa claro
c700="#29104A", # Púrpura oscuro
c800="#150016", # Oscuro
c900="#0E000F", # Muy oscuro
c950="#0E000F" # Muy oscuro
),
neutral_hue: colors.Color | str = Color(
c50="#0E000F", # Fondo muy oscuro
c100="#150016", # Fondo oscuro
c200="#29104A", # Elementos de interfaz oscuros
c300="#522C5D", # Bordes oscuros
c400="#764ba2", # Elementos interactivos
c500="#E3B6B1", # Texto secundario
c600="#FFE3D8", # Texto principal
c700="#29104A", # Elementos oscuros
c800="#150016", # Fondo de inputs
c900="#0E000F", # Fondo principal
c950="#0E000F" # Fondo más oscuro
),
spacing_size: sizes.Size | str = sizes.spacing_md,
radius_size: sizes.Size | str = sizes.radius_md,
text_size: sizes.Size | str = sizes.text_lg,
font: fonts.Font | str | Iterable[fonts.Font | str] = (
fonts.GoogleFont("Quicksand"),
"ui-sans-serif",
"sans-serif",
),
font_mono: fonts.Font | str | Iterable[fonts.Font | str] = (
fonts.GoogleFont("IBM Plex Mono"),
"ui-monospace",
"monospace",
),
):
super().__init__(
primary_hue=primary_hue,
secondary_hue=secondary_hue,
neutral_hue=neutral_hue,
spacing_size=spacing_size,
radius_size=radius_size,
text_size=text_size,
font=font,
font_mono=font_mono,
)
def set_theme(self, *args, **kwargs):
"""Fuerza el tema a mantenerse siempre oscuro"""
theme = super().set_theme(*args, **kwargs)
# Forzar variables CSS para modo oscuro
theme = theme.set(
# Fondos principales
background_fill_primary="*neutral_900",
background_fill_secondary="*neutral_800",
# Fondos de componentes
block_background_fill="*neutral_800",
input_background_fill="*neutral_800",
input_background_fill_focus="*neutral_700",
input_background_fill_hover="*neutral_750",
# Texto
body_text_color="*neutral_600",
body_text_color_subdued="*neutral_500",
block_title_text_color="*neutral_600",
block_label_text_color="*neutral_600",
# Bordes
border_color_primary="*neutral_700",
border_color_accent="*primary_400",
input_border_color="*neutral_700",
input_border_color_focus="*primary_400",
# Botones
button_primary_background_fill="*primary_600",
button_primary_background_fill_hover="*primary_500",
button_primary_text_color="*neutral_100",
button_secondary_background_fill="*neutral_700",
button_secondary_background_fill_hover="*neutral_600",
button_secondary_text_color="*neutral_300",
)
return theme