aboutsummaryrefslogtreecommitdiff
path: root/app.py
diff options
context:
space:
mode:
Diffstat (limited to 'app.py')
-rw-r--r--app.py24
1 files changed, 22 insertions, 2 deletions
diff --git a/app.py b/app.py
index d22635b..87a6716 100644
--- a/app.py
+++ b/app.py
@@ -220,6 +220,16 @@ button[kind="secondary"]:hover {
padding-bottom: 3rem !important;
}
+/* ── Sticky market bar ──────────────────────────────────────────────────── */
+.st-key-market_bar_sticky {
+ position: sticky !important;
+ top: 0 !important;
+ z-index: 200 !important;
+ background: var(--ink-0) !important;
+ padding-bottom: 0.5rem !important;
+ margin-bottom: -0.5rem !important;
+}
+
/* ── Tabs ───────────────────────────────────────────────────────────────── */
.stTabs [data-baseweb="tab-list"] {
background: var(--ink-2) !important;
@@ -406,7 +416,9 @@ hr {
/* Hide click receiver inputs without removing them from React's event system */
[data-testid="stSidebar"] [data-testid="stTextInput"]:has(input[aria-label="wl_click_receiver"]),
-[data-testid="stTextInput"]:has(input[aria-label="qt_click_receiver"]) {
+[data-testid="stTextInput"]:has(input[aria-label="qt_click_receiver"]),
+[data-testid="stTextInput"]:has(input[aria-label="persist_wl"]),
+[data-testid="stTextInput"]:has(input[aria-label="persist_tk"]) {
visibility: hidden !important;
height: 0 !important;
min-height: 0 !important;
@@ -590,6 +602,7 @@ _prism_template = go.layout.Template(layout=_prism_layout)
pio.templates["prism"] = _prism_template
pio.templates.default = "prism"
+from components.persistence import render_persistence_bridge
from components.market_bar import render_market_bar
from components.top_movers import render_top_movers
from components.watchlist import render_watchlist
@@ -615,6 +628,7 @@ if "watchlist" not in st.session_state:
if "active_tab" not in st.session_state:
st.session_state["active_tab"] = "overview"
+render_persistence_bridge()
# ── Sidebar ───────────────────────────────────────────────────────────────────
@@ -720,6 +734,12 @@ with st.sidebar:
ticker = st.session_state["ticker"]
+ # ── Exit to landing page ──────────────────────────────────────────────
+ if st.session_state.get("ticker"):
+ if st.button("← Watchlist", key="exit_ticker", use_container_width=True):
+ st.session_state["ticker"] = None
+ st.rerun()
+
# ── Workspace nav ─────────────────────────────────────────────────────
st.markdown("<div class='psm-nav-section'>Workspace</div>", unsafe_allow_html=True)
_nav = [
@@ -766,7 +786,7 @@ with st.sidebar:
# ── Market Bar ────────────────────────────────────────────────────────────────
-with st.container():
+with st.container(key="market_bar_sticky"):
render_market_bar()
st.divider()