# modules/ui/views/landing_view.py import gradio as gr import os from pathlib import Path from ...database.sql_db import store_application_request from datetime import datetime import uuid ########################################################## def get_asset_path(filename, asset_type='img_logo'): """ Obtiene la ruta completa de un asset Args: filename (str): Nombre del archivo asset_type (str): Tipo de asset ('img_logo', 'img_social-media', etc.) Returns: str: Ruta completa al asset """ current_dir = Path(__file__).parent.parent # sube a /modules/ui asset_path = current_dir / 'assets' / asset_type / filename return str(asset_path) def create_landing_view(): """Crea la vista de landing con tres columnas y header""" # Para el logo logo_path = get_asset_path('Logo_300x300.png', 'img_logo') # Para iconos de social media. social_icon_path = get_asset_path('twitter.png', 'img_social-media') with gr.Blocks( css=""" #header-logo {text-align: center; padding: 2rem 0;} #header-logo img {max-width: 200px; height: auto;} .container {max-width: 1200px; margin: 0 auto;} .gr-form {border: 1px solid #e0e0e0; padding: 20px; border-radius: 8px;} """ ) as view: # Header con logo with gr.Column(elem_id="header-logo"): gr.Image( value=logo_path, label=None, show_label=False, container=False, height=200 ) #gr.Markdown("# Bienvenido a AIdeaText") with gr.Row(elem_classes="container"): # Primera columna - Tabs de Login y Registro (50%) with gr.Column(scale=1): with gr.Tabs() as tabs: # Tab de Login with gr.TabItem("Iniciar Sesión", elem_classes="gr-form"): with gr.Column(): username = gr.Textbox( label="Usuario", placeholder="Ingrese su usuario" ) password = gr.Textbox( label="Contraseña", type="password", placeholder="Ingrese su contraseña" ) login_button = gr.Button( "Ingresar", variant="primary", scale=0 ) login_message = gr.Markdown() # Tab de Registro with gr.TabItem("Solicitud de Acceso", elem_classes="gr-form"): with gr.Column(): name = gr.Textbox( label="Nombre Completo", placeholder="Ej: Juan Pérez" ) email = gr.Textbox( label="Correo Electrónico", placeholder="ejemplo@dominio.com" ) institution = gr.Textbox( label="Institución", placeholder="Universidad, Colegio, Empresa, etc." ) role = gr.Dropdown( choices=[ "Estudiante", "Profesor", "Investigador", "Otro" ], label="Rol", value="Estudiante" ) reason = gr.TextArea( label="¿Por qué te interesa usar AIdeaText?", placeholder="Describe brevemente tu interés en la plataforma...", lines=4 ) register_button = gr.Button( "Enviar Solicitud", variant="secondary", scale=0 ) register_message = gr.Markdown() def handle_registration(name, email, institution, role, reason): try: if not all([name, email, institution, role, reason]): return gr.Markdown("❌ Todos los campos son obligatorios") if "@" not in email or "." not in email: return gr.Markdown("❌ El correo electrónico no es válido") success = store_application_request( name=name, email=email, institution=institution, current_role=role, desired_role=role, reason=reason ) if success: return gr.Markdown("✅ Solicitud enviada correctamente. Te contactaremos pronto.") else: return gr.Markdown("❌ Error al enviar la solicitud. Por favor, intenta nuevamente.") except Exception as e: return gr.Markdown(f"❌ Error: {str(e)}") register_button.click( fn=handle_registration, inputs=[name, email, institution, role, reason], outputs=register_message ) # Segunda columna - Videos (50%) with gr.Column(scale=1): with gr.Tabs(): with gr.TabItem("Introducción"): gr.Markdown(""" ### ¿Qué es AIdeaText? AIdeaText es una avanzada aplicación web diseñada para mejorar las habilidades de redacción y comprensión lectora a través del análisis visual de textos potenciado por distintas tecnologías de inteligencia artificial. """) with gr.TabItem("Tutorial"): gr.Markdown(""" ### Cómo usar AIdeaText Aprende a utilizar todas las funcionalidades de AIdeaText para mejorar tu escritura académica. """) with gr.TabItem("Ejemplos"): gr.Markdown(""" ### Ejemplos de Uso Mira ejemplos prácticos de cómo AIdeaText puede ayudarte en tus tareas de escritura. """) # Mantener la funcionalidad de navegación existente start_button = gr.Button(visible=False) return view, login_button