Spaces:
Runtime error
Runtime error
Add color samples
Browse files- app.py +8 -8
- fragments.py +7 -2
- util.py +7 -0
app.py
CHANGED
|
@@ -25,10 +25,10 @@ def parse_hex(rgb_hex_str: str) -> tuple[float, float, float]:
|
|
| 25 |
raise ValueError("Invalid hex color")
|
| 26 |
return tuple(int(rgb_hex_str[i:i+2], 16) / 255 for i in (1, 3, 5))
|
| 27 |
|
| 28 |
-
primary_color_rgb = parse_hex(primary_color)
|
| 29 |
-
text_color_rgb = parse_hex(text_color)
|
| 30 |
-
background_color_rgb = parse_hex(background_color)
|
| 31 |
-
secondary_background_color_rgb = parse_hex(secondary_background_color)
|
| 32 |
|
| 33 |
st.header("WCAG contrast ratio")
|
| 34 |
|
|
@@ -47,17 +47,17 @@ col1, col2, col3 = st.columns(3)
|
|
| 47 |
with col1:
|
| 48 |
synced_color_picker("Primary color", value=primary_color, key="primaryColor")
|
| 49 |
with col2:
|
| 50 |
-
fragments.contrast_summary(
|
| 51 |
with col3:
|
| 52 |
-
fragments.contrast_summary(
|
| 53 |
|
| 54 |
col1, col2, col3 = st.columns(3)
|
| 55 |
with col1:
|
| 56 |
synced_color_picker("Text color", value=text_color, key="textColor")
|
| 57 |
with col2:
|
| 58 |
-
fragments.contrast_summary(
|
| 59 |
with col3:
|
| 60 |
-
fragments.contrast_summary(
|
| 61 |
|
| 62 |
|
| 63 |
st.header("Config")
|
|
|
|
| 25 |
raise ValueError("Invalid hex color")
|
| 26 |
return tuple(int(rgb_hex_str[i:i+2], 16) / 255 for i in (1, 3, 5))
|
| 27 |
|
| 28 |
+
# primary_color_rgb = parse_hex(primary_color)
|
| 29 |
+
# text_color_rgb = parse_hex(text_color)
|
| 30 |
+
# background_color_rgb = parse_hex(background_color)
|
| 31 |
+
# secondary_background_color_rgb = parse_hex(secondary_background_color)
|
| 32 |
|
| 33 |
st.header("WCAG contrast ratio")
|
| 34 |
|
|
|
|
| 47 |
with col1:
|
| 48 |
synced_color_picker("Primary color", value=primary_color, key="primaryColor")
|
| 49 |
with col2:
|
| 50 |
+
fragments.contrast_summary(primary_color, background_color)
|
| 51 |
with col3:
|
| 52 |
+
fragments.contrast_summary(primary_color, secondary_background_color)
|
| 53 |
|
| 54 |
col1, col2, col3 = st.columns(3)
|
| 55 |
with col1:
|
| 56 |
synced_color_picker("Text color", value=text_color, key="textColor")
|
| 57 |
with col2:
|
| 58 |
+
fragments.contrast_summary(text_color, background_color)
|
| 59 |
with col3:
|
| 60 |
+
fragments.contrast_summary(text_color, secondary_background_color)
|
| 61 |
|
| 62 |
|
| 63 |
st.header("Config")
|
fragments.py
CHANGED
|
@@ -1,12 +1,17 @@
|
|
| 1 |
import streamlit as st
|
| 2 |
import wcag_contrast_ratio as contrast
|
| 3 |
|
|
|
|
| 4 |
|
| 5 |
-
|
| 6 |
-
|
|
|
|
|
|
|
|
|
|
| 7 |
contrast_ratio_str = f"{contrast_ratio:.2f}"
|
| 8 |
st.metric("", value=f"{contrast_ratio_str} : 1")
|
| 9 |
|
|
|
|
| 10 |
|
| 11 |
def sample_components(key: str):
|
| 12 |
st.slider("Slider", min_value=0, max_value=100, key=f"{key}:slider")
|
|
|
|
| 1 |
import streamlit as st
|
| 2 |
import wcag_contrast_ratio as contrast
|
| 3 |
|
| 4 |
+
import util
|
| 5 |
|
| 6 |
+
|
| 7 |
+
def contrast_summary(foreground_rgb_hex: str, background_rgb_hex: str) -> None:
|
| 8 |
+
rgb_foreground = util.parse_hex(foreground_rgb_hex)
|
| 9 |
+
rgb_background = util.parse_hex(background_rgb_hex)
|
| 10 |
+
contrast_ratio = contrast.rgb(rgb_foreground, rgb_background)
|
| 11 |
contrast_ratio_str = f"{contrast_ratio:.2f}"
|
| 12 |
st.metric("", value=f"{contrast_ratio_str} : 1")
|
| 13 |
|
| 14 |
+
st.markdown(f'<p style="color: {foreground_rgb_hex}; background-color: {background_rgb_hex}; padding: 12px">Lorem ipsum</p>', unsafe_allow_html=True)
|
| 15 |
|
| 16 |
def sample_components(key: str):
|
| 17 |
st.slider("Slider", min_value=0, max_value=100, key=f"{key}:slider")
|
util.py
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import re
|
| 2 |
+
|
| 3 |
+
|
| 4 |
+
def parse_hex(rgb_hex_str: str) -> tuple[float, float, float]:
|
| 5 |
+
if not re.match(r"^#[0-9a-fA-F]{6}$", rgb_hex_str):
|
| 6 |
+
raise ValueError("Invalid hex color")
|
| 7 |
+
return tuple(int(rgb_hex_str[i:i+2], 16) / 255 for i in (1, 3, 5))
|