Streamlit component for a floating User Info panel anchored to the sidebar. Supports fixed float stick in sidebar, a collapsed avatar chip when the sidebar is hidden, usage stats (messages/tokens/cost), and compact layout.
Project description
st-user-info-panel
A polished Streamlit custom component for a floating User Info Panel anchored to the sidebar.
Supports fixed float stick in sidebar, collapsed chip (avatar initials) when the sidebar is collapsed, and usage stats (messages, tokens, cost).
✨ Features
- Floating panel that follows the sidebar width (portal) or sticky at the bottom of the sidebar (inside).
- Collapsed chip: when the sidebar collapses, a small circular chip with initials appears;
- Stats: Messages, Tokens, Cost with optional progress bars if monthly limits are set.
- Compact mode for tighter sidebars.
- Optional fields: Department, Work Location.
- Uncontrolled (default) or Controlled expansion state.
- Robust geometry handling for scrollable sidebars and animated collapse/expand.
📦 Install
Note: Starting from version
0.1.1, the minimum required Python version has been lowered to>=3.10(previously>=3.11), providing broader compatibility!
pip install st-user-info-panel
Import name:
from st_user_info_panel import st_user_info_panel
🚀 Quickstart
import streamlit as st
from st_user_info_panel import st_user_info_panel
st.set_page_config(page_title="AI Chat Assistant Demo", layout="wide", initial_sidebar_state="expanded")
if "user_panel_expanded" not in st.session_state:
st.session_state.user_panel_expanded = False
with st.sidebar:
st.title("🤖 AI Assistant")
st.subheader("Recent Conversations")
for i in range(20):
st.markdown(f"• Chat {i+1}")
st.markdown("---")
st.subheader("Settings")
st.selectbox("Model", ["GPT-4", "Claude", "Gemini"])
st.slider("Temperature", 0.0, 2.0, 0.7)
result = st_user_info_panel(
name="Sarah Johnson",
job_title="Senior Data Scientist",
email="sarah.johnson@techcorp.com",
department="Data Platform",
work_location="Jakarta",
messages_count=340, monthly_messages_limit=500,
tokens_this_month=3_200_000, monthly_tokens_limit=10_000_000,
cost_usd=42.35, monthly_cost_limit=200.0,
show_detailed_stats=True,
compact=True,
stats_style="rows",
show_progress=False,
side_padding_px=12,
bottom_offset_px=16,
controlled=False,
expanded=st.session_state.user_panel_expanded,
key="user-panel",
)
if result:
evt = result.get("event")
if evt == "toggle":
st.session_state.user_panel_expanded = result["expanded"]
elif evt == "logout":
st.session_state.user_panel_expanded = False
st.warning("Logout clicked")
elif evt == "chip":
pass
⚙️ API
st_user_info_panel(...) -> dict | None
Identity
| Prop | Type | Default | Notes |
|---|---|---|---|
name |
str |
"John Doe" |
Used for initials |
job_title |
str |
"Data Scientist" |
|
email |
str |
"john.doe@company.com" |
Wraps for long values |
avatar_color |
str |
"#FE5556" |
Any CSS color |
department |
Optional[str] |
None |
Optional |
work_location |
Optional[str] |
None |
Optional |
Stats (neutral)
| Prop | Type | Default | Notes |
|---|---|---|---|
messages_count |
int |
0 |
|
monthly_messages_limit |
int |
0 |
0 = unlimited |
tokens_this_month |
int |
0 |
|
monthly_tokens_limit |
int |
0 |
0 = unlimited |
cost_usd |
float |
0.0 |
|
monthly_cost_limit |
float |
0.0 |
0 = unlimited |
show_detailed_stats |
bool |
True |
|
show_progress |
bool |
True |
Layout & Behavior
| Prop | Type | Default | Notes |
|---|---|---|---|
side_padding_px |
int |
12 |
|
bottom_offset_px |
int |
16 |
|
border_radius_px |
int |
12 |
|
compact |
bool |
False |
|
stats_style |
Literal["rows","cards"] |
"rows" |
rows is compact |
State control
| Prop | Type | Default | Notes |
|---|---|---|---|
controlled |
bool |
False |
If True, follows expanded prop |
expanded |
bool |
False |
|
key |
Optional[str] |
None |
Stable key recommended |
Return (events)
{
"event": "toggle" | "logout" | "chip",
"expanded": bool,
}
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file st_user_info_panel-0.1.1.tar.gz.
File metadata
- Download URL: st_user_info_panel-0.1.1.tar.gz
- Upload date:
- Size: 13.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
efc22e9965e785035869dcca551716e412cc4cd5e5bd65bc0a6ce8dad550073a
|
|
| MD5 |
1b4a86c1c168cc1f4d577d35cfd18f32
|
|
| BLAKE2b-256 |
e092a6bed05aa464062c2d6412d5ffec4cd24c9f5a0f75fe8b65adc9c340c2ab
|
Provenance
The following attestation bundles were made for st_user_info_panel-0.1.1.tar.gz:
Publisher:
publish.yml on agustyawan-arif/st-user-info-panel
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
st_user_info_panel-0.1.1.tar.gz -
Subject digest:
efc22e9965e785035869dcca551716e412cc4cd5e5bd65bc0a6ce8dad550073a - Sigstore transparency entry: 1517872350
- Sigstore integration time:
-
Permalink:
agustyawan-arif/st-user-info-panel@462da328971ea609e18ca48f062b7c607ebcabc5 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/agustyawan-arif
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@462da328971ea609e18ca48f062b7c607ebcabc5 -
Trigger Event:
release
-
Statement type:
File details
Details for the file st_user_info_panel-0.1.1-py3-none-any.whl.
File metadata
- Download URL: st_user_info_panel-0.1.1-py3-none-any.whl
- Upload date:
- Size: 14.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b98fcf13296d1700631f2899836987a5be17b204c9f74721f221d844af686fc9
|
|
| MD5 |
f1b60f5b41a40c3e910f8ef5d0244030
|
|
| BLAKE2b-256 |
016298533bfad0da68b6dac47cf144e4c52f2e76891d9849d2ff0e4c4e40ca1d
|
Provenance
The following attestation bundles were made for st_user_info_panel-0.1.1-py3-none-any.whl:
Publisher:
publish.yml on agustyawan-arif/st-user-info-panel
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
st_user_info_panel-0.1.1-py3-none-any.whl -
Subject digest:
b98fcf13296d1700631f2899836987a5be17b204c9f74721f221d844af686fc9 - Sigstore transparency entry: 1517872451
- Sigstore integration time:
-
Permalink:
agustyawan-arif/st-user-info-panel@462da328971ea609e18ca48f062b7c607ebcabc5 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/agustyawan-arif
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@462da328971ea609e18ca48f062b7c607ebcabc5 -
Trigger Event:
release
-
Statement type: