georad commited on
Commit
ab924d2
·
verified ·
1 Parent(s): cf8bd39

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +65 -73
app.py CHANGED
@@ -1,87 +1,79 @@
1
- import streamlit as st
2
-
3
- # --- Page Configuration ---
4
- # This still configures the topmost header bar (which won't be sticky)
5
- st.set_page_config(
6
- page_title="SBS V2.0 mapper", # This title appears in the topmost bar
7
- # page_icon="images/menu_book_60dp_75FBFD.png", # Icon for the topmost bar
8
- #layout="wide" # Optional: Use wide layout
9
- )
10
-
11
- # --- Custom CSS to Fix Parent Overflow and Make the Toolbar/Status Bar Sticky ---
12
- st.markdown("""
 
 
 
 
 
 
 
 
13
  <style>
14
- /* Target the main app container and ensure its overflow is visible */
15
- /* This is crucial for sticky positioning relative to the viewport */
16
- [data-testid="stApp"] {
17
- overflow: visible !important; /* Force overflow to be visible */
18
- }
19
-
20
- /* Target the container element that holds the Toolbar (stToolbar) and Status Widget (stStatusWidget) */
21
- /* Based on the likely Streamlit DOM structure, this is typically the second direct child div within stAppViewContainer */
22
- [data-testid="stAppViewContainer"] > div:nth-child(2) {
23
- position: sticky !important; /* Make this specific bar sticky */
24
- top: 0px !important; /* Stick to the top edge of the viewport */
25
- z-index: 999 !important; /* Ensure it's always on top */
26
- background-color: rgb(255, 255, 255) !important; /* Background for the sticky bar */
27
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); /* Add shadow */
28
- /* height: auto !important; */ /* Usually not needed here */
29
- /* overflow: visible !important; */ /* Usually not needed here */
30
- }
31
-
32
- /* Add padding to the main content area to prevent it from starting behind the sticky Toolbar/Status bar */
33
- /* Adjust this value to be slightly more than the height of the Toolbar/Status bar (the sticky element) */
34
- /* You will likely need to inspect the deployed app to find the exact height of this bar */
35
- [data-testid="stAppViewContainer"] {
36
- padding-top: 3.75rem; /* Estimate height of the second bar (~50px). Adjust after inspection. */
37
- }
38
-
39
- /* Adjust padding for the sidebar content as well */
40
- /* This needs to account for the height of both the topmost bar AND the sticky second bar */
41
- [data-testid="stSidebar"] {
42
- /* Estimate height of topmost bar (~40px) + height of sticky bar (~50px) + default sidebar padding (~1rem) */
43
- padding-top: calc(40px + 3.75rem + 1rem); /* Adjust pixel values after inspection */
44
- }
45
-
46
- /* Ensure the main content block within the container also has correct top padding */
47
- .main .block-container {
48
- padding-top: 1rem; /* Keep or adjust default Streamlit content padding */
49
- }
50
-
51
-
52
  </style>
53
- """, unsafe_allow_html=True)
54
 
55
- # --- App Content (will scroll below the sticky SECOND bar) ---
 
56
 
57
- # The st.logo call here will place the logo in the sidebar or main body,
58
- # not in either of the top bars.
59
- st.logo(image="images/menu_book_60dp_75FBFD.png")
 
 
 
60
 
61
 
 
 
 
 
 
62
  st.sidebar.header("SBS V2.0 mapper")
63
  st.sidebar.write("(work in progress)")
64
  st.sidebar.text("Demo by JA-RAD")
65
 
66
- # Note: st.title and st.subheader here will appear *below* the sticky second bar,
67
- # as they are part of the main app content flow.
68
- st.title("Map descriptions to SBS codes with Sentence Transformer + Reasoning") # This title scrolls
69
- st.subheader("Select specific Chapter for quicker results") # This subheader scrolls
70
 
71
 
72
  # --- NAVIGATION SETUP ---
73
- # Keep your existing navigation setup
74
- type_text_page = st.Page(
75
- page="pages/type_text.py",
76
- title="DEMO (work in progress)",
77
- icon=":material/keyboard:", # This icon can appear in the tab/bookmark
78
- default=True,
79
- )
80
-
81
  pg = st.navigation(pages=[type_text_page]) # WITHOUT SECTIONS
82
- pg.run()
83
-
84
- # Add some extra content to make the page scrollable for testing
85
- # Remove this loop in your final application if you have enough content already
86
- for i in range(100):
87
- st.write(f"This is scrollable content line {i}")
 
1
+ import streamlit as st
2
+
3
+ # Inspect the header element, go to the "Computed" tab in styles, and find its height.
4
+ HEADER_HEIGHT = "60px" # EXAMPLE: Adjust this (e.g., "56px", "4rem")
5
+ HEADER_SELECTOR = 'header[data-testid="stHeader"]'
6
+
7
+ # ---- SELECTOR FOR THE MAIN CONTENT AREA THAT NEEDS PADDING ----
8
+ # Target the first direct div child of the stAppViewContainer which often holds the main scrollable content
9
+ MAIN_CONTENT_SELECTOR = 'section[data-testid="stMain"]'
10
+ #MAIN_CONTENT_SELECTOR = 'section[data-testid="stMain"] > div:nth-child(1)'
11
+ #MAIN_CONTENT_SELECTOR = 'section[data-testid="stMainBlockContainer"]'
12
+ #MAIN_CONTENT_SELECTOR = 'section[data-testid="stAppViewContainer"]'
13
+ #MAIN_CONTENT_SELECTOR = 'section[data-testid="stAppViewContainer"] > div:nth-child(1)'
14
+ # Alternative if the above doesn't work or if your content is further nested:
15
+ #MAIN_CONTENT_SELECTOR = 'section[data-testid="stAppViewContainer"] .main-content-wrapper-class'
16
+ # Or, very commonly, Streamlit wraps main content in a div with class "block-container":
17
+ #MAIN_CONTENT_SELECTOR = 'section[data-testid="stAppViewContainer"] .block-container'
18
+ #MAIN_CONTENT_SELECTOR = '.main .block-container' # A more general selector for block-container
19
+
20
+ custom_css = f"""
21
  <style>
22
+ /* Making the Streamlit header sticky */
23
+ {HEADER_SELECTOR} {{
24
+ position: -webkit-sticky !important; /* For Safari */
25
+ position: sticky !important;
26
+ top: 0 !important;
27
+ z-index: 9999 !important; /* Very high z-index */
28
+ background-color: #90EE90 !important; /* Or your app's header background color */
29
+ /* Add a subtle shadow to make it feel more distinct when content scrolls under */
30
+ /* box-shadow: 0 2px 4px -1px rgba(0,0,0,0.1); */
31
+ /*.reportview-container .main .block-container{{ */
32
+ /* padding-top: 0rem; */
33
+ /* }} */
34
+ }}
35
+
36
+ /* Adding padding to the main content area to prevent overlap with the sticky header */
37
+ {MAIN_CONTENT_SELECTOR} {{
38
+ padding-top: 10px !important; /* {HEADER_HEIGHT} !important; */
39
+ /* background-color: yellow !important; */
40
+ /* border-style: solid !important; */
41
+ /* border-color: red !important; */
42
+ }}
43
+
44
+ /* Optional: If your app is set to wide mode and the header isn't spanning full width */
45
+ /* This might be needed if the sticky positioning affects its width calculation. */
46
+ /*
47
+ #{HEADER_SELECTOR} {{
48
+ # width: 100% !important;
49
+ #}}
50
+ #*/
 
 
 
 
 
 
 
 
 
51
  </style>
52
+ """
53
 
54
+ # Inject CSS as early as possible in your app
55
+ st.markdown(custom_css, unsafe_allow_html=True)
56
 
57
+ # --- PAGE SETUP ---
58
+ type_text_page = st.Page(
59
+ page="pages/type_text.py",
60
+ title="DEMO (work in progress)",
61
+ icon=":material/keyboard:",
62
+ default=True,)
63
 
64
 
65
+ # --- Your Streamlit App ---
66
+ #st.logo(image="images/menu_book_60dp_75FBFD.png")
67
+ st.title("Map descriptions to SBS codes with Sentence Transformer + Reasoning")
68
+ st.subheader("Select specific Chapter for quicker results")
69
+ st.logo(image="images/menu_book_60dp_75FBFD.png")
70
  st.sidebar.header("SBS V2.0 mapper")
71
  st.sidebar.write("(work in progress)")
72
  st.sidebar.text("Demo by JA-RAD")
73
 
 
 
 
 
74
 
75
 
76
  # --- NAVIGATION SETUP ---
 
 
 
 
 
 
 
 
77
  pg = st.navigation(pages=[type_text_page]) # WITHOUT SECTIONS
78
+ ##pg = st.navigation({"Chapter_Index": [start_page], "Demo": [type_text_page, upload_file_page], "About": [about_page]}) # WITH SECTIONS
79
+ pg.run()