File size: 3,006 Bytes
480dc41
 
 
 
 
 
 
 
 
1779505
480dc41
1779505
480dc41
 
1779505
480dc41
 
 
1779505
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
480dc41
 
 
 
1779505
480dc41
 
 
 
1779505
 
 
 
 
 
 
 
 
480dc41
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import gradio as gr
from transformers import pipeline

classifier = pipeline(
    "text-classification",
    model="distilbert-base-uncased-finetuned-sst-2-english",
    use_auth_token=True
)

def add_note(title, content, state):
    if not content.strip():
        return gr.update(), state, "⚠️ Escribe contenido (no vacío)."
    result = classifier(content)[0]
    label = result["label"]
    note = {
        "title": title or "Sin título",
        "content": content,
        "category": label
    }
    notes = state or []
    notes.append(note)
    notes_html = ""
    for idx, n in enumerate(notes):
        notes_html += f'''
            <div style="border:1px solid #1a1a2e;background:#222;border-radius:8px;padding:10px;margin-bottom:18px;position:relative;">
                <h3 style="color:#0099ff;">{n["title"]}</h3>
                <p style="color:#e3eaff;">{n["content"]}</p>
                <strong style="color:#0099ff;">Categoría IA: {n["category"]}</strong>
                <button onclick="navigator.clipboard.writeText(`{n["title"]}\\n{n["content"]}`)" style="position:absolute;top:10px;right:10px;background:#23233a;color:#62cfff;border:none;padding:5px 7px;border-radius:6px;cursor:pointer;">Copiar</button>
            </div>
        '''
    notes_html += """
    <button onclick="downloadNotes()" style="background:#0099ff;color:white;border:none;padding:10px 18px;border-radius:8px;cursor:pointer;">
      Descargar todas tus notas
    </button>
    <script>
    function downloadNotes() {
        let divs = document.querySelectorAll('div[style*="border:1px solid"]');
        let text = "";
        divs.forEach((div) => {
            text += div.querySelector('h3').textContent + "\\n";
            text += div.querySelector('p').textContent + "\\n\\n";
        });
        let blob = new Blob([text], {type:"text/plain"});
        let link = document.createElement('a');
        link.href = window.URL.createObjectURL(blob);
        link.download = "mis_notas.txt";
        link.click();
    }
    </script>
    """
    return notes_html, notes, "✅ Nota guardada"

with gr.Blocks(theme=gr.themes.Base(primary_hue="blue")) as demo:
    gr.Markdown("<h1 style='color:#0099ff; text-align:center;'>BATUTO_IA_NOTAS</h1>")
    gr.Markdown("<p style='color:#e3eaff; text-align:center;'>Bloc de notas inteligente con tema oscuro y fuentes azules.</p>")
    state = gr.State([])
    with gr.Row():
        title = gr.Textbox(label="Título", elem_id="titlebox")
        content = gr.Textbox(lines=4, label="Contenido de la nota", elem_id="contentbox")
    submit = gr.Button("Guardar nota", elem_id="savebtn")
    show_notes = gr.HTML(label="Tus notas")
    status = gr.Markdown()
    submit.click(add_note, [title, content, state], [show_notes, state, status])
    gr.Markdown("""
    <style>
    body { background: #181824; }
    #titlebox, #contentbox, #savebtn { color: #0099ff !important; background: #23233a; border-radius: 8px; }
    </style>
    """)

demo.launch()