import streamlit as st import uuid import streamlit.components.v1 as components ''' # Lista de estilos de sombra y transición (sin cambios) shadow_list = [ "box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 12px;", "box-shadow: rgba(0, 0, 0, 0.15) 0px 5px 15px 0px;", "box-shadow: rgba(0, 0, 0, 0.05) 0px 6px 24px 0px, rgba(0, 0, 0, 0.08) 0px 0px 0px 1px;", "box-shadow: rgba(0, 0, 0, 0.16) 0px 10px 36px 0px, rgba(0, 0, 0, 0.06) 0px 0px 0px 1px;", ] transition_list = [ "transition: all 0.3s ease;", "transition: all 0.5s cubic-bezier(0.25, 0.8, 0.25, 1);", "transition: all 0.4s cubic-bezier(0.165, 0.84, 0.44, 1);", ] def semantic_float_init(): st.markdown(""" """, unsafe_allow_html=True) def float_graph(content, width="40%", height="60%", position="bottom-right", shadow=0, transition=0): position_css = { "top-left": "top: 20px; left: 20px;", "top-right": "top: 20px; right: 20px;", "bottom-left": "bottom: 20px; left: 20px;", "bottom-right": "bottom: 20px; right: 20px;", "center-right": "top: 50%; right: 20px; transform: translateY(-50%);" } css = f""" width: {width}; height: {height}; {position_css.get(position, position_css['bottom-right'])} {shadow_list[shadow % len(shadow_list)]} {transition_list[transition % len(transition_list)]} """ return float_box(content, css=css) def float_box(content, css=""): box_id = f"semantic-float-{str(uuid.uuid4())[:8]}" components.html(f"""
{content}
""", height=0) return box_id def toggle_float_visibility(box_id, visible): display = "block" if visible else "none" components.html(f""" """, height=0) def update_float_content(box_id, new_content): components.html(f""" """, height=0) ''' # Lista de estilos de sombra (puedes ajustar según tus preferencias) shadow_list = [ "box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 12px;", "box-shadow: rgba(0, 0, 0, 0.15) 0px 5px 15px 0px;", "box-shadow: rgba(0, 0, 0, 0.05) 0px 6px 24px 0px, rgba(0, 0, 0, 0.08) 0px 0px 0px 1px;", "box-shadow: rgba(0, 0, 0, 0.16) 0px 10px 36px 0px, rgba(0, 0, 0, 0.06) 0px 0px 0px 1px;", ] # Lista de estilos de transición transition_list = [ "transition: all 0.3s ease;", "transition: all 0.5s cubic-bezier(0.25, 0.8, 0.25, 1);", "transition: all 0.4s cubic-bezier(0.165, 0.84, 0.44, 1);", ] def semantic_float_init(): """Inicializa los estilos necesarios para los elementos flotantes en la interfaz semántica.""" st.markdown(""" """, unsafe_allow_html=True) def float_graph(content, width="40%", height="60%", position="bottom-right", shadow=0, transition=0): """ Crea un contenedor flotante para el gráfico de visualización semántica. :param content: Contenido HTML o Markdown para el gráfico :param width: Ancho del contenedor :param height: Altura del contenedor :param position: Posición del contenedor ('top-left', 'top-right', 'bottom-left', 'bottom-right') :param shadow: Índice del estilo de sombra a utilizar :param transition: Índice del estilo de transición a utilizar """ position_css = { "top-left": "top: 20px; left: 20px;", "top-right": "top: 20px; right: 20px;", "bottom-left": "bottom: 20px; left: 20px;", "bottom-right": "bottom: 20px; right: 20px;", } css = f""" width: {width}; height: {height}; {position_css.get(position, position_css['bottom-right'])} {shadow_list[shadow % len(shadow_list)]} {transition_list[transition % len(transition_list)]} """ return float_box(content, css=css) def float_box(content, css=""): """ Crea un contenedor flotante genérico. :param content: Contenido HTML o Markdown para el contenedor :param css: Estilos CSS adicionales """ box_id = f"semantic-float-{str(uuid.uuid4())[:8]}" st.markdown(f"""
{content}
""", unsafe_allow_html=True) return box_id def toggle_float_visibility(box_id, visible): """ Cambia la visibilidad de un contenedor flotante. :param box_id: ID del contenedor flotante :param visible: True para mostrar, False para ocultar """ display = "block" if visible else "none" st.markdown(f""" """, unsafe_allow_html=True) def update_float_content(box_id, new_content): """ Actualiza el contenido de un contenedor flotante. :param box_id: ID del contenedor flotante :param new_content: Nuevo contenido HTML o Markdown """ st.markdown(f""" """, unsafe_allow_html=True) # Puedes agregar más funciones específicas para la interfaz semántica según sea necesario