From d94ecf8923d6ec49c021d641991283f4907192a2 Mon Sep 17 00:00:00 2001 From: Ravi Prasad Date: Thu, 17 Sep 2026 19:27:01 -0500 Subject: [PATCH] feat(ui): responsive sidebar and full-width navigation cards --- streamlit_app/app.py | 81 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 77 insertions(+), 4 deletions(-) diff --git a/streamlit_app/app.py b/streamlit_app/app.py index 137552c..67354df 100644 --- a/streamlit_app/app.py +++ b/streamlit_app/app.py @@ -8,6 +8,55 @@ from pathlib import Path st.set_page_config(page_title="NBA Analytics", page_icon="๐Ÿ€", layout="wide") +# Custom Responsive Sidebar & Navigation Styling +st.markdown(""" + +""", unsafe_allow_html=True) + # ============================================================ # CONNECTION & QUERY INFRASTRUCTURE # ============================================================ @@ -46,23 +95,47 @@ seasons = get_seasons() season_options = seasons["season_start_year"].tolist() season_labels = dict(zip(seasons["season_start_year"], seasons["season_display"])) +PAGE_OPTIONS = [ + "Overview", + "Teams", + "Player Lab", + "Shot Charts", + "Head to Head", + "Game Trends", + "Quarter Analysis", +] + +PAGE_ICONS = { + "Overview": "๐Ÿ“Š Overview", + "Teams": "๐Ÿ›ก๏ธ Teams", + "Player Lab": "๐Ÿงช Player Lab", + "Shot Charts": "๐ŸŽฏ Shot Charts", + "Head to Head": "โš”๏ธ Head to Head", + "Game Trends": "๐Ÿ“ˆ Game Trends", + "Quarter Analysis": "โฑ๏ธ Quarter Analysis", +} + if "season" not in st.session_state: st.session_state["season"] = season_options[0] st.sidebar.title("๐Ÿ€ NBA Analytics") -st.session_state["season"] = st.sidebar.selectbox( +# Direct key binding eliminates dropped clicks and rerun desync +st.sidebar.selectbox( "Season", season_options, - index=season_options.index(st.session_state["season"]), - format_func=lambda x: season_labels[x], + key="season", + format_func=lambda x: season_labels.get(x, str(x)), ) st.sidebar.divider() +# Full-width clickable navigation cards page = st.sidebar.radio( "Navigate", - ["Overview", "Teams", "Player Lab", "Shot Charts", "Head to Head", "Game Trends", "Quarter Analysis"], + PAGE_OPTIONS, + format_func=lambda x: PAGE_ICONS.get(x, x), + key="current_page", ) # Convenience accessors -- 2.54.0