File size: 4,365 Bytes
fcb34bb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2369fc5
 
fcb34bb
2369fc5
 
 
 
 
 
 
fcb34bb
 
 
2369fc5
 
 
 
fcb34bb
 
 
 
2369fc5
 
fcb34bb
 
 
 
2369fc5
 
 
 
 
 
 
 
 
 
 
 
fcb34bb
2369fc5
 
fcb34bb
 
 
 
 
 
 
 
2369fc5
fcb34bb
 
 
2369fc5
fcb34bb
 
 
 
2369fc5
fcb34bb
 
 
 
 
 
 
2369fc5
fcb34bb
 
 
 
 
 
 
2369fc5
fcb34bb
 
 
 
 
 
 
2369fc5
fcb34bb
 
 
 
 
 
 
 
 
2369fc5
fcb34bb
2369fc5
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
"""
custom_theme.py

Defines a custom Gradio theme.

This module creates a `CustomTheme` class, inheriting from `gradio.themes.base.Base`,
and overrides default styling variables. It uses CSS variables for consistency
with the application's styling.

Key Features:
- Defines a color palette using CSS variables.
- Customizes styling for Gradio components (buttons, inputs, etc.).
- Adjusts shadows, borders, and gradients.
- Supports light and dark modes.
"""

# Standard Library Imports
from __future__ import annotations
from collections.abc import Iterable
# Third-Party Library Imports
from gradio.themes.base import Base
from gradio.themes.utils import colors, fonts, sizes

class CustomTheme(Base):
    def __init__(
        self,
        *,
        primary_hue: colors.Color | str = colors.purple,  
        secondary_hue: colors.Color | str = colors.stone,  
        neutral_hue: colors.Color | str = colors.neutral,  
        spacing_size: sizes.Size | str = sizes.spacing_md,
        radius_size: sizes.Size | str = sizes.radius_md,
        text_size: sizes.Size | str = sizes.text_md,
        font: fonts.Font | str | Iterable[fonts.Font | str] = (
            fonts.GoogleFont('Source Sans Pro'),
            'ui-sans-serif',
            'system-ui',
            'sans-serif',
        ),
        font_mono: fonts.Font | str | Iterable[fonts.Font | str] = (
            fonts.GoogleFont('IBM Plex Mono'),
            'ui-monospace',
            'Consolas',
            '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,
        )
        self.name = 'custom_theme'
        super().set(
            # Colors
            input_background_fill_dark='#262626',  
            error_background_fill='#EF4444',  
            error_background_fill_dark='#171717',  
            error_border_color='#B91C1C',  
            error_border_color_dark='#EF4444',  
            error_icon_color='#B91C1C',  
            error_icon_color_dark='#EF4444',  

            # Shadows
            input_shadow_focus='0 0 0 *shadow_spread #7C3AED80, *shadow_inset',  
            input_shadow_focus_dark='0 0 0 *shadow_spread #40404080, *shadow_inset',  

            # Button borders
            button_border_width='0px',
            input_border_width='1px',
            input_background_fill='#F9FAFB',  

            # Gradients
            stat_background_fill='linear-gradient(to right, #7C3AED, #D8B4FE)',
            stat_background_fill_dark='linear-gradient(to right, #7C3AED, #5B21B6)',
            checkbox_label_background_fill='#F3F4F6',
            checkbox_label_background_fill_dark='#1F2937',
            checkbox_label_background_fill_hover='#E5E7EB',
            checkbox_label_background_fill_hover_dark='#374151',

            # Primary Button
            button_primary_background_fill='#111111',  
            button_primary_background_fill_dark='#171717',  
            button_primary_background_fill_hover='#3F3F3F',
            button_primary_background_fill_hover_dark='#3F3F3F',  
            button_primary_text_color='#FFFFFF',  
            button_primary_text_color_dark='#FFFFFF',  

            # Secondary Button
            button_secondary_background_fill='#E5E7EB',  
            button_secondary_background_fill_dark='#4B5563',  
            button_secondary_background_fill_hover='#D1D5DB',  
            button_secondary_background_fill_hover_dark='#374151',  
            button_secondary_text_color='#111827',  
            button_secondary_text_color_dark='#FFFFFF',  

            # Cancel Button
            button_cancel_background_fill='#EF4444',  
            button_cancel_background_fill_dark='#B91C1C',  
            button_cancel_background_fill_hover='#DC2626',  
            button_cancel_background_fill_hover_dark='#991B1B',  
            button_cancel_text_color='#FFFFFF',  
            button_cancel_text_color_dark='#FFFFFF',  
            button_cancel_text_color_hover='#FFFFFF',  
            button_cancel_text_color_hover_dark='#FFFFFF',  

            # Other
            border_color_accent_subdued='#A78BFA',  
        )