Transform UI to closely match mockup design
Browse filesMajor mockup alignment:
- Add workflow steps section with numbered progress indicators
- Implement proper container structure with white background
- Enhanced sidebar with detailed dataset information matching mockup
- Better chat input styling with focus states and proper borders
Visual improvements:
- Workflow steps: Natural Language Query β Code Generation β Visualization
- Professional dataset info section with time range and record counts
- Improved typography and spacing throughout interface
- Better visual hierarchy with proper container management
Layout structure:
- Main chat container with padding and background styling
- Cleaner sidebar organization and information display
- More academic and professional appearance matching design vision
π€ Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <[email protected]>
@@ -195,11 +195,18 @@ st.markdown("""
|
|
195 |
border: 1px solid #f5c2c7;
|
196 |
}
|
197 |
|
198 |
-
/* Chat input */
|
199 |
.stChatInput {
|
200 |
-
border-radius:
|
201 |
-
border: 1px solid #
|
202 |
background: #ffffff;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
203 |
}
|
204 |
|
205 |
/* Button */
|
@@ -574,13 +581,14 @@ with st.sidebar:
|
|
574 |
|
575 |
st.markdown("---")
|
576 |
|
577 |
-
# Dataset Info Section
|
578 |
st.markdown("### Dataset Info")
|
579 |
st.markdown("""
|
580 |
-
<div style='background-color: #f1f5f9; padding:
|
581 |
-
<h4 style='margin: 0 0 0.
|
582 |
-
<p style='margin: 0.
|
583 |
-
<p style='margin: 0.
|
|
|
584 |
</div>
|
585 |
""", unsafe_allow_html=True)
|
586 |
|
@@ -616,7 +624,25 @@ with st.sidebar:
|
|
616 |
except AttributeError:
|
617 |
st.experimental_rerun()
|
618 |
|
619 |
-
#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
620 |
|
621 |
# Initialize chat history and processing state
|
622 |
if "responses" not in st.session_state:
|
@@ -692,7 +718,11 @@ def show_processing_indicator(model_name, question):
|
|
692 |
</div>
|
693 |
""", unsafe_allow_html=True)
|
694 |
|
695 |
-
# Main chat container
|
|
|
|
|
|
|
|
|
696 |
chat_container = st.container()
|
697 |
|
698 |
with chat_container:
|
@@ -831,6 +861,9 @@ if st.session_state.get("processing"):
|
|
831 |
|
832 |
st.rerun()
|
833 |
|
|
|
|
|
|
|
834 |
# Minimal auto-scroll - only scroll when processing
|
835 |
if st.session_state.get("processing"):
|
836 |
st.markdown("<script>scrollToBottom();</script>", unsafe_allow_html=True)
|
|
|
195 |
border: 1px solid #f5c2c7;
|
196 |
}
|
197 |
|
198 |
+
/* Chat input styling like mockup */
|
199 |
.stChatInput {
|
200 |
+
border-radius: 8px;
|
201 |
+
border: 1px solid #d1d5db;
|
202 |
background: #ffffff;
|
203 |
+
padding: 0.75rem 1rem;
|
204 |
+
font-size: 1rem;
|
205 |
+
}
|
206 |
+
|
207 |
+
.stChatInput:focus {
|
208 |
+
border-color: #3b82f6;
|
209 |
+
box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);
|
210 |
}
|
211 |
|
212 |
/* Button */
|
|
|
581 |
|
582 |
st.markdown("---")
|
583 |
|
584 |
+
# Dataset Info Section (matching mockup)
|
585 |
st.markdown("### Dataset Info")
|
586 |
st.markdown("""
|
587 |
+
<div style='background-color: #f1f5f9; padding: 1rem; border-radius: 8px; margin-bottom: 1.5rem;'>
|
588 |
+
<h4 style='margin: 0 0 0.5rem 0; color: #1e293b; font-weight: 600;'>PM2.5 Air Quality Data</h4>
|
589 |
+
<p style='margin: 0.25rem 0; font-size: 0.875rem;'><strong>Time Range:</strong> Jan 2023 - Dec 2023</p>
|
590 |
+
<p style='margin: 0.25rem 0; font-size: 0.875rem;'><strong>Locations:</strong> 15 cities in Gujarat</p>
|
591 |
+
<p style='margin: 0.25rem 0; font-size: 0.875rem;'><strong>Records:</strong> 13,140 measurements</p>
|
592 |
</div>
|
593 |
""", unsafe_allow_html=True)
|
594 |
|
|
|
624 |
except AttributeError:
|
625 |
st.experimental_rerun()
|
626 |
|
627 |
+
# Workflow steps section (like in mockup)
|
628 |
+
st.markdown("""
|
629 |
+
<div style='background: #f8fafc; border-bottom: 1px solid #e2e8f0; padding: 1rem 2rem; display: flex; gap: 1rem; margin-bottom: 1rem;'>
|
630 |
+
<div style='display: flex; align-items: center; gap: 0.5rem; padding: 0.5rem 1rem; border-radius: 6px; font-size: 0.875rem; font-weight: 500; background: #dcfce7; color: #166534;'>
|
631 |
+
<div style='width: 20px; height: 20px; border-radius: 50%; background: #22c55e; color: white; display: flex; align-items: center; justify-content: center; font-size: 0.75rem; font-weight: 600;'>1</div>
|
632 |
+
<span>Natural Language Query</span>
|
633 |
+
</div>
|
634 |
+
<div style='margin: 0 1rem; color: #9ca3af;'>β</div>
|
635 |
+
<div style='display: flex; align-items: center; gap: 0.5rem; padding: 0.5rem 1rem; border-radius: 6px; font-size: 0.875rem; font-weight: 500; background: #dcfce7; color: #166534;'>
|
636 |
+
<div style='width: 20px; height: 20px; border-radius: 50%; background: #22c55e; color: white; display: flex; align-items: center; justify-content: center; font-size: 0.75rem; font-weight: 600;'>2</div>
|
637 |
+
<span>Code Generation</span>
|
638 |
+
</div>
|
639 |
+
<div style='margin: 0 1rem; color: #9ca3af;'>β</div>
|
640 |
+
<div style='display: flex; align-items: center; gap: 0.5rem; padding: 0.5rem 1rem; border-radius: 6px; font-size: 0.875rem; font-weight: 500; background: #dbeafe; color: #1d4ed8;'>
|
641 |
+
<div style='width: 20px; height: 20px; border-radius: 50%; background: #3b82f6; color: white; display: flex; align-items: center; justify-content: center; font-size: 0.75rem; font-weight: 600;'>3</div>
|
642 |
+
<span>Visualization</span>
|
643 |
+
</div>
|
644 |
+
</div>
|
645 |
+
""", unsafe_allow_html=True)
|
646 |
|
647 |
# Initialize chat history and processing state
|
648 |
if "responses" not in st.session_state:
|
|
|
718 |
</div>
|
719 |
""", unsafe_allow_html=True)
|
720 |
|
721 |
+
# Main chat container with mockup styling
|
722 |
+
st.markdown("""
|
723 |
+
<div style='background: white; min-height: 60vh; padding: 1.5rem;'>
|
724 |
+
""", unsafe_allow_html=True)
|
725 |
+
|
726 |
chat_container = st.container()
|
727 |
|
728 |
with chat_container:
|
|
|
861 |
|
862 |
st.rerun()
|
863 |
|
864 |
+
# Close chat container
|
865 |
+
st.markdown("</div>", unsafe_allow_html=True)
|
866 |
+
|
867 |
# Minimal auto-scroll - only scroll when processing
|
868 |
if st.session_state.get("processing"):
|
869 |
st.markdown("<script>scrollToBottom();</script>", unsafe_allow_html=True)
|