Skip to content

Commit f56de43

Browse files
committed
Add Visual Elements tab for emojis, GIFs, and stickers
1 parent 773ec6b commit f56de43

2 files changed

Lines changed: 74 additions & 1 deletion

File tree

‎app.py‎

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,19 @@
66
from generators import stats_card, lang_card, contrib_card, badge_generator
77
from utils import github_api
88
from themes.styles import THEMES
9+
from generators.visual_elements import (
10+
emoji_element,
11+
gif_element,
12+
sticker_element
13+
)
14+
15+
# Initialize canvas in session state
16+
if "canvas" not in st.session_state:
17+
st.session_state["canvas"] = []
18+
19+
for item in st.session_state["canvas"]:
20+
st.markdown(item, unsafe_allow_html=True)
21+
922

1023
# Load environment variables
1124
load_dotenv()
@@ -95,7 +108,7 @@ def load_data(user):
95108
current_theme_opts.update(custom_colors)
96109

97110
# --- Layout: Tabs ---
98-
tab1, tab2, tab3, tab4, tab5 = st.tabs(["Main Stats", "Languages", "Contributions", "Icons & Badges", "🔥 AI Roast"])
111+
tab1, tab2, tab3, tab4, tab5, tab6 = st.tabs(["Main Stats", "Languages", "Contributions", "Icons & Badges", "🔥 AI Roast","✨ Visual Elements"])
99112

100113
def show_code_area(code_content, label="Markdown Code"):
101114
st.markdown(f"**{label}** (Copy below)")
@@ -242,3 +255,27 @@ def render_tab(svg_bytes, endpoint, username, selected_theme, custom_colors, hid
242255
render_roast_widget(username)
243256
else:
244257
st.warning("Please enter a GitHub username in the sidebar.")
258+
259+
with tab6:
260+
st.subheader("✨ Visual Elements")
261+
st.markdown("Add emojis, GIFs, or stickers to your canvas")
262+
263+
element_type = st.selectbox(
264+
"Choose element type",
265+
["Emoji", "GIF", "Sticker"]
266+
)
267+
268+
value = st.text_input(
269+
"Enter value",
270+
placeholder="🔥 or https://gif-url"
271+
)
272+
273+
if st.button("Add to Canvas"):
274+
if element_type == "Emoji":
275+
svg = emoji_element(value)
276+
elif element_type == "GIF":
277+
svg = gif_element(value)
278+
else:
279+
svg = sticker_element(value)
280+
281+
st.session_state["canvas"].append(svg)

‎generators/visual_elements.py‎

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# generators/visual_elements.py
2+
3+
def emoji_element(emoji: str, size: int = 48) -> str:
4+
"""
5+
Generate SVG for an emoji
6+
"""
7+
return f"""
8+
<svg xmlns="http://www.w3.org/2000/svg" width="{size}" height="{size}">
9+
<text x="50%" y="50%" dominant-baseline="middle"
10+
text-anchor="middle" font-size="{size}px">
11+
{emoji}
12+
</text>
13+
</svg>
14+
"""
15+
16+
17+
def gif_element(gif_url: str, size: int = 120) -> str:
18+
"""
19+
Generate SVG wrapper for a GIF
20+
"""
21+
return f"""
22+
<svg xmlns="http://www.w3.org/2000/svg" width="{size}" height="{size}">
23+
<image href="{gif_url}" width="{size}" height="{size}" />
24+
</svg>
25+
"""
26+
27+
28+
def sticker_element(image_url: str, size: int = 100) -> str:
29+
"""
30+
Generate SVG for a sticker / icon
31+
"""
32+
return f"""
33+
<svg xmlns="http://www.w3.org/2000/svg" width="{size}" height="{size}">
34+
<image href="{image_url}" width="{size}" height="{size}" />
35+
</svg>
36+
"""

0 commit comments

Comments
 (0)