import streamlit as st import uuid import markdown import html # html_expander remplace st.expander # # En effet, st.expander présente un défaut lors de la fermeture # avec une fois la fermeture terminée, un dernier mouvement # gênant visuellement. def html_expander(title, content, open_by_default=False, details_class="", summary_class=""): """ Creates an HTML details/summary expander with content inside. Args: title (str): Text to display in the summary/header. content (str): Markdown content to display inside the expander. open_by_default (bool): Whether the expander is open by default. details_class (str): CSS class for the details element. summary_class (str): CSS class for the summary element. """ # Generate a unique ID for this expander expander_id = f"expander_{uuid.uuid4().hex}" # Set attributes expanded = "open" if open_by_default else "" details_attr = f'class="{details_class}"' if details_class else "" summary_attr = f'class="{summary_class}"' if summary_class else "" # Convert markdown to HTML (use Python's markdown library) try: # Try to use markdown package if available html_content = markdown.markdown(content) except: # Fallback to basic html escaping if markdown package not available html_content = html.escape(content).replace('\n', '
') # Build the complete HTML structure complete_html = f"""
{title}
{html_content}
""" # Render the complete HTML in one call st.markdown(complete_html, unsafe_allow_html=True)