File size: 4,434 Bytes
d492199
 
 
 
 
36b2de8
1c3eb66
36b2de8
d492199
 
 
 
1c3eb66
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d492199
 
1c3eb66
 
 
 
 
 
 
 
 
 
 
d492199
1c3eb66
 
d492199
36b2de8
d492199
 
 
 
36b2de8
d492199
36b2de8
d492199
 
 
 
 
1c3eb66
d492199
1c3eb66
 
d492199
 
 
1c3eb66
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
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