diff --git a/src/main.py b/src/main.py index 6a94b3e..b8d2484 100644 --- a/src/main.py +++ b/src/main.py @@ -20,6 +20,87 @@ st.set_page_config( layout="wide" ) +st.markdown(""" """, unsafe_allow_html=True) + +# ---------------- CHAT PANEL INJECTION ---------------- +def inject_chat_panel(is_open: bool): + st.iframe(f""" + + """, height=1) + # ---------------- MAIN ---------------- def main(): file_manager = FileManager() @@ -41,12 +122,17 @@ def main(): st.session_state.last_applied_content = "" if "run_result" not in st.session_state: st.session_state.run_result = None + if "chat_open" not in st.session_state: + st.session_state.chat_open = False - # ---------------- FILE SELECT ---------------- + # ---------------- SIDEBAR ---------------- selected_file = navigation.render_sidebar() if selected_file: st.session_state.selected_file = selected_file + st.sidebar.markdown("---") + st.sidebar.caption("AI Code Editor") + current_file = st.session_state.selected_file # ---------------- FILE SWITCH ---------------- @@ -60,46 +146,39 @@ def main(): else: st.session_state.editor_content = "" - st.sidebar.markdown("---") - st.sidebar.caption("AI Code Editor") + inject_chat_panel(st.session_state.chat_open) # ---------------- MAIN UI ---------------- if st.session_state.active_file: - col1, col2 = st.columns([3, 2]) + title_col, btn_col = st.columns([5, 1]) + with title_col: + st.subheader(f"✏️ {Path(st.session_state.active_file).name}") + with btn_col: + run_clicked = st.button("▶ Run", type="primary", use_container_width=True) - with col1: - title_col, btn_col = st.columns([5, 1]) - with title_col: - st.subheader(f"✏️ {Path(st.session_state.active_file).name}") - with btn_col: - run_clicked = st.button("▶ Run", type="primary", use_container_width=True) + editor = CodeEditor() + new_value = editor.display_code( + st.session_state.editor_content, + filename=st.session_state.active_file + ) + if new_value is not None: + if new_value != st.session_state.last_applied_content: + st.session_state.editor_content = new_value + st.session_state.last_applied_content = new_value + file_manager.save_file(st.session_state.active_file, new_value) + st.success("Saved ✔") - editor = CodeEditor() - new_value = editor.display_code( - st.session_state.editor_content, - filename=st.session_state.active_file - ) - if new_value is not None: - if new_value != st.session_state.last_applied_content: - st.session_state.editor_content = new_value - st.session_state.last_applied_content = new_value - file_manager.save_file(st.session_state.active_file, new_value) - st.success("Saved ✔") + if run_clicked: + with st.spinner("Running…"): + st.session_state.run_result = execution_engine.run_file( + st.session_state.active_file + ) - if run_clicked: - with st.spinner("Running…"): - st.session_state.run_result = execution_engine.run_file( - st.session_state.active_file - ) + if st.session_state.run_result is not None: + st.markdown("---") + st.caption("Output") + output_display.render_output(st.session_state.run_result) - with col2: - chat = ChatInterface() - chat.display_chat(chat_manager) - - if st.session_state.run_result is not None: - st.markdown("---") - st.caption("Output") - output_display.render_output(st.session_state.run_result) else: st.info("Select a file from the explorer") diff --git a/src/ui/navigation.py b/src/ui/navigation.py index 5722b65..0ef19dd 100644 --- a/src/ui/navigation.py +++ b/src/ui/navigation.py @@ -57,17 +57,23 @@ class FileNavigation: # ---------------- SIDEBAR RENDERER ---------------- def render_sidebar(self) -> str | None: """ - Renders the full sidebar: folder button, folder caption, divider, and tree. + Renders the full sidebar: folder button, caption, divider, and tree. Returns the selected file path or None. """ st.sidebar.title("File Explorer") root_folder = st.session_state.get("root_folder") with st.sidebar: - if st.button("📂 Choose Folder", key="pick_folder"): - picked = self.pick_folder() - if picked: - st.session_state.root_folder = picked + btn_left, btn_right = st.columns(2) + with btn_left: + if st.button("📂 Folder", key="pick_folder", use_container_width=True): + picked = self.pick_folder() + if picked: + st.session_state.root_folder = picked + st.rerun() + with btn_right: + if st.button("💬 Ask AI", key="toggle_chat", use_container_width=True): + st.session_state.chat_open = not st.session_state.get("chat_open", False) st.rerun() if root_folder: