gstaff commited on
Commit
ae530d2
1 Parent(s): 429586a

Updating theme

Browse files
Files changed (4) hide show
  1. README.md +11 -6
  2. app.py +147 -0
  3. theme_dropdown.py +57 -0
  4. themes/theme_schema@0.0.1.json +1 -0
README.md CHANGED
@@ -1,12 +1,17 @@
 
1
  ---
2
- title: Whiteboard
3
- emoji: 💩
4
- colorFrom: yellow
5
- colorTo: pink
6
  sdk: gradio
7
  sdk_version: 3.23.0
8
  app_file: app.py
9
  pinned: false
 
10
  ---
11
-
12
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
1
+
2
  ---
3
+ tags: [gradio-theme]
4
+ title: whiteboard
5
+ colorFrom: orange
6
+ colorTo: purple
7
  sdk: gradio
8
  sdk_version: 3.23.0
9
  app_file: app.py
10
  pinned: false
11
+ license: apache-2.0
12
  ---
13
+ # whiteboard
14
+ ## Description
15
+ Add a description of this theme here!
16
+ ## Contributions
17
+ Thanks to [@gstaff](https://huggingface.co/gstaff) for adding this gradio theme!
app.py ADDED
@@ -0,0 +1,147 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import time
2
+
3
+ from theme_dropdown import create_theme_dropdown # noqa: F401
4
+
5
+ import gradio as gr
6
+
7
+ dropdown, js = create_theme_dropdown()
8
+
9
+ with gr.Blocks(theme='gstaff/whiteboard') as demo:
10
+ with gr.Row().style(equal_height=True):
11
+ with gr.Column(scale=10):
12
+ gr.Markdown(
13
+ """
14
+ # Theme preview: `whiteboard`
15
+ To use this theme, set `theme='gstaff/whiteboard'` in `gr.Blocks()` or `gr.Interface()`.
16
+ You can append an `@` and a semantic version expression, e.g. @>=1.0.0,<2.0.0 to pin to a given version
17
+ of this theme.
18
+ """
19
+ )
20
+ with gr.Column(scale=3):
21
+ with gr.Box():
22
+ dropdown.render()
23
+ toggle_dark = gr.Button(value="Toggle Dark").style(full_width=True)
24
+
25
+ dropdown.change(None, dropdown, None, _js=js)
26
+ toggle_dark.click(
27
+ None,
28
+ _js="""
29
+ () => {
30
+ document.body.classList.toggle('dark');
31
+ document.querySelector('gradio-app').style.backgroundColor = 'var(--color-background-primary)'
32
+ }
33
+ """,
34
+ )
35
+
36
+ name = gr.Textbox(
37
+ label="Name",
38
+ info="Full name, including middle name. No special characters.",
39
+ placeholder="John Doe",
40
+ value="John Doe",
41
+ interactive=True,
42
+ )
43
+
44
+ with gr.Row():
45
+ slider1 = gr.Slider(label="Slider 1")
46
+ slider2 = gr.Slider(label="Slider 2")
47
+ gr.CheckboxGroup(["A", "B", "C"], label="Checkbox Group")
48
+
49
+ with gr.Row():
50
+ with gr.Column(variant="panel", scale=1):
51
+ gr.Markdown("## Panel 1")
52
+ radio = gr.Radio(
53
+ ["A", "B", "C"],
54
+ label="Radio",
55
+ info="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.",
56
+ )
57
+ drop = gr.Dropdown(["Option 1", "Option 2", "Option 3"], show_label=False)
58
+ drop_2 = gr.Dropdown(
59
+ ["Option A", "Option B", "Option C"],
60
+ multiselect=True,
61
+ value=["Option A"],
62
+ label="Dropdown",
63
+ interactive=True,
64
+ )
65
+ check = gr.Checkbox(label="Go")
66
+ with gr.Column(variant="panel", scale=2):
67
+ img = gr.Image(
68
+ "https://gradio.app/assets/img/header-image.jpg", label="Image"
69
+ ).style(height=320)
70
+ with gr.Row():
71
+ go_btn = gr.Button("Go", label="Primary Button", variant="primary")
72
+ clear_btn = gr.Button(
73
+ "Clear", label="Secondary Button", variant="secondary"
74
+ )
75
+
76
+ def go(*args):
77
+ time.sleep(3)
78
+ return "https://gradio.app/assets/img/header-image.jpg"
79
+
80
+ go_btn.click(go, [radio, drop, drop_2, check, name], img, api_name="go")
81
+
82
+ def clear():
83
+ time.sleep(0.2)
84
+ return None
85
+
86
+ clear_btn.click(clear, None, img)
87
+
88
+ with gr.Row():
89
+ btn1 = gr.Button("Button 1").style(size="sm")
90
+ btn2 = gr.UploadButton().style(size="sm")
91
+ stop_btn = gr.Button("Stop", label="Stop Button", variant="stop").style(
92
+ size="sm"
93
+ )
94
+
95
+ with gr.Row():
96
+ gr.Dataframe(value=[[1, 2, 3], [4, 5, 6], [7, 8, 9]], label="Dataframe")
97
+ gr.JSON(
98
+ value={"a": 1, "b": 2, "c": {"test": "a", "test2": [1, 2, 3]}}, label="JSON"
99
+ )
100
+ gr.Label(value={"cat": 0.7, "dog": 0.2, "fish": 0.1})
101
+ gr.File()
102
+ with gr.Row():
103
+ gr.ColorPicker()
104
+ gr.Video("https://gradio-static-files.s3.us-west-2.amazonaws.com/world.mp4")
105
+ gr.Gallery(
106
+ [
107
+ (
108
+ "https://gradio-static-files.s3.us-west-2.amazonaws.com/lion.jpg",
109
+ "lion",
110
+ ),
111
+ (
112
+ "https://gradio-static-files.s3.us-west-2.amazonaws.com/logo.png",
113
+ "logo",
114
+ ),
115
+ (
116
+ "https://gradio-static-files.s3.us-west-2.amazonaws.com/tower.jpg",
117
+ "tower",
118
+ ),
119
+ ]
120
+ ).style(height="200px", grid=2)
121
+
122
+ with gr.Row():
123
+ with gr.Column(scale=2):
124
+ chatbot = gr.Chatbot([("Hello", "Hi")], label="Chatbot")
125
+ chat_btn = gr.Button("Add messages")
126
+
127
+ def chat(history):
128
+ time.sleep(2)
129
+ yield [["How are you?", "I am good."]]
130
+
131
+ chat_btn.click(
132
+ lambda history: history
133
+ + [["How are you?", "I am good."]]
134
+ + (time.sleep(2) or []),
135
+ chatbot,
136
+ chatbot,
137
+ )
138
+ with gr.Column(scale=1):
139
+ with gr.Accordion("Advanced Settings"):
140
+ gr.Markdown("Hello")
141
+ gr.Number(label="Chatbot control 1")
142
+ gr.Number(label="Chatbot control 2")
143
+ gr.Number(label="Chatbot control 3")
144
+
145
+
146
+ if __name__ == "__main__":
147
+ demo.queue().launch()
theme_dropdown.py ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import pathlib
3
+
4
+ from gradio.themes.utils import ThemeAsset
5
+
6
+
7
+ def create_theme_dropdown():
8
+ import gradio as gr
9
+
10
+ asset_path = pathlib.Path(__file__).parent / "themes"
11
+ themes = []
12
+ for theme_asset in os.listdir(str(asset_path)):
13
+ themes.append(
14
+ (ThemeAsset(theme_asset), gr.Theme.load(str(asset_path / theme_asset)))
15
+ )
16
+
17
+ def make_else_if(theme_asset):
18
+ return f"""
19
+ else if (theme == '{str(theme_asset[0].version)}') {{
20
+ var theme_css = `{theme_asset[1]._get_theme_css()}`
21
+ }}"""
22
+
23
+ head, tail = themes[0], themes[1:]
24
+ if_statement = f"""
25
+ if (theme == "{str(head[0].version)}") {{
26
+ var theme_css = `{head[1]._get_theme_css()}`
27
+ }} {" ".join(make_else_if(t) for t in tail)}
28
+ """
29
+
30
+ latest_to_oldest = sorted([t[0] for t in themes], key=lambda asset: asset.version)[
31
+ ::-1
32
+ ]
33
+ latest_to_oldest = [str(t.version) for t in latest_to_oldest]
34
+
35
+ component = gr.Dropdown(
36
+ choices=latest_to_oldest,
37
+ value=latest_to_oldest[0],
38
+ render=False,
39
+ label="Select Version",
40
+ ).style(container=False)
41
+
42
+ return (
43
+ component,
44
+ f"""
45
+ (theme) => {{
46
+ if (!document.querySelector('.theme-css')) {{
47
+ var theme_elem = document.createElement('style');
48
+ theme_elem.classList.add('theme-css');
49
+ document.head.appendChild(theme_elem);
50
+ }} else {{
51
+ var theme_elem = document.querySelector('.theme-css');
52
+ }}
53
+ {if_statement}
54
+ theme_elem.innerHTML = theme_css;
55
+ }}
56
+ """,
57
+ )
themes/theme_schema@0.0.1.json ADDED
@@ -0,0 +1 @@
 
 
1
+ {"theme": {"_font": [{"__gradio_font__": true, "name": "Mochiy Pop One", "class": "google"}, {"__gradio_font__": true, "name": "ui-sans-serif", "class": "font"}, {"__gradio_font__": true, "name": "sans-serif", "class": "font"}], "_font_mono": [{"__gradio_font__": true, "name": "IBM Plex Mono", "class": "google"}, {"__gradio_font__": true, "name": "ui-monospace", "class": "font"}, {"__gradio_font__": true, "name": "monospace", "class": "font"}], "_stylesheets": ["https://fonts.googleapis.com/css2?family=Mochiy+Pop+One:wght@400;600&display=swap", "https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;600&display=swap"], "background_fill_primary": "white", "background_fill_primary_dark": "*neutral_900", "background_fill_secondary": "*neutral_50", "background_fill_secondary_dark": "*neutral_800", "block_background_fill": "*background_fill_primary", "block_background_fill_dark": "*neutral_800", "block_border_color": "*border_color_primary", "block_border_color_dark": "*border_color_primary", "block_border_width": "0px", "block_border_width_dark": "1px", "block_info_text_color": "*body_text_color_subdued", "block_info_text_color_dark": "*body_text_color_subdued", "block_info_text_size": "*text_sm", "block_info_text_weight": "400", "block_label_background_fill": "*background_fill_primary", "block_label_background_fill_dark": "*background_fill_secondary", "block_label_border_color": "*border_color_primary", "block_label_border_color_dark": "*border_color_primary", "block_label_border_width": "1px", "block_label_margin": "0", "block_label_padding": "*spacing_sm *spacing_lg", "block_label_radius": "calc(*radius_lg - 1px) 0 calc(*radius_lg - 1px) 0", "block_label_right_radius": "0 calc(*radius_lg - 1px) 0 calc(*radius_lg - 1px)", "block_label_text_color": "*body_text_color", "block_label_text_color_dark": "*neutral_200", "block_label_text_size": "*text_md", "block_label_text_weight": "600", "block_padding": "*spacing_xl calc(*spacing_xl + 2px)", "block_radius": "*radius_lg", "block_shadow": "*shadow_drop_lg", "block_shadow_dark": "none", "block_title_background_fill": "none", "block_title_border_color": "none", "block_title_border_width": "0px", "block_title_padding": "0", "block_title_radius": "none", "block_title_text_color": "*body_text_color", "block_title_text_color_dark": "*neutral_200", "block_title_text_size": "*text_md", "block_title_text_weight": "600", "body_background_fill": "*background_fill_primary", "body_background_fill_dark": "*background_fill_primary", "body_text_color": "*neutral_900", "body_text_color_dark": "*neutral_100", "body_text_color_subdued": "*neutral_700", "body_text_color_subdued_dark": "*neutral_400", "body_text_size": "*text_md", "body_text_weight": "400", "border_color_accent": "*primary_300", "border_color_accent_dark": "*neutral_600", "border_color_primary": "*neutral_200", "border_color_primary_dark": "*neutral_700", "button_border_width": "*input_border_width", "button_border_width_dark": "*input_border_width", "button_cancel_background_fill": "*button_primary_background_fill", "button_cancel_background_fill_dark": "*button_secondary_background_fill", "button_cancel_background_fill_hover": "*button_primary_background_fill_hover", "button_cancel_background_fill_hover_dark": "*button_cancel_background_fill", "button_cancel_border_color": "*button_secondary_border_color", "button_cancel_border_color_dark": "*button_secondary_border_color", "button_cancel_border_color_hover": "*button_cancel_border_color", "button_cancel_border_color_hover_dark": "*button_cancel_border_color", "button_cancel_text_color": "*button_primary_text_color", "button_cancel_text_color_dark": "*button_secondary_text_color", "button_cancel_text_color_hover": "*button_cancel_text_color", "button_cancel_text_color_hover_dark": "*button_cancel_text_color", "button_large_padding": "*spacing_lg", "button_large_radius": "*radius_lg", "button_large_text_size": "*text_lg", "button_large_text_weight": "600", "button_primary_background_fill": "*neutral_900", "button_primary_background_fill_dark": "*neutral_600", "button_primary_background_fill_hover": "*neutral_700", "button_primary_background_fill_hover_dark": "*neutral_600", "button_primary_border_color": "*primary_200", "button_primary_border_color_dark": "*primary_600", "button_primary_border_color_hover": "*button_primary_border_color", "button_primary_border_color_hover_dark": "*button_primary_border_color", "button_primary_text_color": "white", "button_primary_text_color_dark": "white", "button_primary_text_color_hover": "*button_primary_text_color", "button_primary_text_color_hover_dark": "*button_primary_text_color", "button_secondary_background_fill": "*button_primary_background_fill", "button_secondary_background_fill_dark": "*neutral_600", "button_secondary_background_fill_hover": "*button_primary_background_fill_hover", "button_secondary_background_fill_hover_dark": "*button_secondary_background_fill", "button_secondary_border_color": "*neutral_200", "button_secondary_border_color_dark": "*neutral_600", "button_secondary_border_color_hover": "*button_secondary_border_color", "button_secondary_border_color_hover_dark": "*button_secondary_border_color", "button_secondary_text_color": "*button_primary_text_color", "button_secondary_text_color_dark": "white", "button_secondary_text_color_hover": "*button_secondary_text_color", "button_secondary_text_color_hover_dark": "*button_secondary_text_color", "button_shadow": "none", "button_shadow_active": "none", "button_shadow_hover": "none", "button_small_padding": "*spacing_sm", "button_small_radius": "*radius_lg", "button_small_text_size": "*text_md", "button_small_text_weight": "400", "button_transition": "background-color 0.2s ease", "checkbox_background_color": "*background_fill_primary", "checkbox_background_color_dark": "*neutral_700", "checkbox_background_color_focus": "*checkbox_background_color", "checkbox_background_color_focus_dark": "*checkbox_background_color", "checkbox_background_color_hover": "*checkbox_background_color", "checkbox_background_color_hover_dark": "*checkbox_background_color", "checkbox_background_color_selected": "*neutral_600", "checkbox_background_color_selected_dark": "*neutral_700", "checkbox_border_color": "*neutral_300", "checkbox_border_color_dark": "*neutral_700", "checkbox_border_color_focus": "*secondary_500", "checkbox_border_color_focus_dark": "*secondary_500", "checkbox_border_color_hover": "*neutral_300", "checkbox_border_color_hover_dark": "*neutral_600", "checkbox_border_color_selected": "*secondary_600", "checkbox_border_color_selected_dark": "*neutral_800", "checkbox_border_radius": "*radius_sm", "checkbox_border_width": "*input_border_width", "checkbox_border_width_dark": "*input_border_width", "checkbox_check": "url(\"data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e\")", "checkbox_label_background_fill": "*button_primary_background_fill", "checkbox_label_background_fill_dark": "*button_secondary_background_fill", "checkbox_label_background_fill_hover": "*button_primary_background_fill_hover", "checkbox_label_background_fill_hover_dark": "*button_secondary_background_fill_hover", "checkbox_label_background_fill_selected": "*checkbox_label_background_fill", "checkbox_label_background_fill_selected_dark": "*checkbox_label_background_fill", "checkbox_label_border_color": "*border_color_primary", "checkbox_label_border_color_dark": "*border_color_primary", "checkbox_label_border_color_hover": "*checkbox_label_border_color", "checkbox_label_border_color_hover_dark": "*checkbox_label_border_color", "checkbox_label_border_width": "*input_border_width", "checkbox_label_border_width_dark": "*input_border_width", "checkbox_label_gap": "*spacing_lg", "checkbox_label_padding": "*spacing_md", "checkbox_label_shadow": "none", "checkbox_label_text_color": "*button_primary_text_color", "checkbox_label_text_color_dark": "*body_text_color", "checkbox_label_text_color_selected": "*checkbox_label_text_color", "checkbox_label_text_color_selected_dark": "*checkbox_label_text_color", "checkbox_label_text_size": "*text_md", "checkbox_label_text_weight": "400", "checkbox_shadow": "*input_shadow", "color_accent": "*primary_500", "color_accent_soft": "*primary_50", "color_accent_soft_dark": "*neutral_700", "container_radius": "*radius_lg", "embed_radius": "*radius_lg", "error_background_fill": "#fee2e2", "error_background_fill_dark": "*background_fill_primary", "error_border_color": "#fecaca", "error_border_color_dark": "*border_color_primary", "error_border_width": "1px", "error_text_color": "#ef4444", "error_text_color_dark": "#ef4444", "font": "'Mochiy Pop One', 'ui-sans-serif', sans-serif", "font_mono": "'IBM Plex Mono', 'ui-monospace', monospace", "form_gap_width": "0px", "input_background_fill": "*neutral_100", "input_background_fill_dark": "*neutral_700", "input_background_fill_focus": "*secondary_500", "input_background_fill_focus_dark": "*secondary_600", "input_background_fill_hover": "*input_background_fill", "input_background_fill_hover_dark": "*input_background_fill", "input_border_color": "*border_color_primary", "input_border_color_dark": "*border_color_primary", "input_border_color_focus": "*secondary_300", "input_border_color_focus_dark": "*neutral_700", "input_border_color_hover": "*input_border_color", "input_border_color_hover_dark": "*input_border_color", "input_border_width": "0px", "input_padding": "*spacing_xl", "input_placeholder_color": "*neutral_400", "input_placeholder_color_dark": "*neutral_500", "input_radius": "*radius_lg", "input_shadow": "none", "input_shadow_focus": "*input_shadow", "input_text_size": "*text_md", "input_text_weight": "400", "layout_gap": "*spacing_xxl", "link_text_color": "*secondary_600", "link_text_color_active": "*secondary_600", "link_text_color_active_dark": "*secondary_500", "link_text_color_dark": "*secondary_500", "link_text_color_hover": "*secondary_700", "link_text_color_hover_dark": "*secondary_400", "link_text_color_visited": "*secondary_500", "link_text_color_visited_dark": "*secondary_600", "loader_color": "*color_accent", "neutral_100": "#f5f5f5", "neutral_200": "#e5e5e5", "neutral_300": "#d4d4d4", "neutral_400": "#a3a3a3", "neutral_50": "#fafafa", "neutral_500": "#737373", "neutral_600": "#525252", "neutral_700": "#404040", "neutral_800": "#262626", "neutral_900": "#171717", "neutral_950": "#0f0f0f", "panel_background_fill": "*background_fill_secondary", "panel_background_fill_dark": "*background_fill_secondary", "panel_border_color": "*border_color_primary", "panel_border_color_dark": "*border_color_primary", "panel_border_width": "0", "primary_100": "#f5f5f5", "primary_200": "#e5e5e5", "primary_300": "#d4d4d4", "primary_400": "#a3a3a3", "primary_50": "#fafafa", "primary_500": "#737373", "primary_600": "#525252", "primary_700": "#404040", "primary_800": "#262626", "primary_900": "#171717", "primary_950": "#0f0f0f", "prose_header_text_weight": "600", "prose_text_size": "*text_md", "prose_text_weight": "400", "radio_circle": "url(\"data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e\")", "radius_lg": "8px", "radius_md": "6px", "radius_sm": "4px", "radius_xl": "12px", "radius_xs": "2px", "radius_xxl": "22px", "radius_xxs": "1px", "secondary_100": "#f5f5f5", "secondary_200": "#e5e5e5", "secondary_300": "#d4d4d4", "secondary_400": "#a3a3a3", "secondary_50": "#fafafa", "secondary_500": "#737373", "secondary_600": "#525252", "secondary_700": "#404040", "secondary_800": "#262626", "secondary_900": "#171717", "secondary_950": "#0f0f0f", "section_header_text_size": "*text_md", "section_header_text_weight": "400", "shadow_drop": "rgba(0,0,0,0.05) 0px 1px 2px 0px", "shadow_drop_lg": "0 1px 4px 0 rgb(0 0 0 / 0.1)", "shadow_inset": "rgba(0,0,0,0.05) 0px 2px 4px 0px inset", "shadow_spread": "3px", "shadow_spread_dark": "1px", "slider_color": "*neutral_900", "slider_color_dark": "*neutral_500", "spacing_lg": "8px", "spacing_md": "6px", "spacing_sm": "4px", "spacing_xl": "10px", "spacing_xs": "2px", "spacing_xxl": "16px", "spacing_xxs": "1px", "stat_background_fill": "*primary_300", "stat_background_fill_dark": "*primary_500", "table_border_color": "*neutral_300", "table_border_color_dark": "*neutral_700", "table_even_background_fill": "white", "table_even_background_fill_dark": "*neutral_950", "table_odd_background_fill": "*neutral_50", "table_odd_background_fill_dark": "*neutral_900", "table_radius": "*radius_lg", "table_row_focus": "*color_accent_soft", "table_row_focus_dark": "*color_accent_soft", "text_lg": "20px", "text_md": "16px", "text_sm": "14px", "text_xl": "24px", "text_xs": "12px", "text_xxl": "28px", "text_xxs": "10px"}, "version": "0.0.1"}