File size: 5,364 Bytes
8824f88
 
 
a7f5e8b
60e16da
 
 
 
b507d58
60e16da
94c9a27
60e16da
94c9a27
 
60e16da
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b507d58
 
 
60e16da
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8824f88
 
60e16da
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
#!/usr/bin/env python

import gradio as gr

# CSS perso pour :
# 1) Le fond pastel
# 2) La barre de navigation
# 3) Les nuages + positionnement
custom_css = """
/* Fond pastel sur toute la page */
html, body {
    margin: 0; padding: 0;
    height: 100%;
    background: linear-gradient(135deg, #FDE2E2, #E2ECFD) !important;
    font-family: 'Arial', sans-serif;
}

/* Barre de navigation */
.nav-bar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 0.5rem 2rem;
    background-color: #fbe8d3; /* Couleur très légère pour la barre */
}
.nav-left, .nav-right {
    display: flex;
    align-items: center;
}
.nav-logo {
    font-size: 1.5rem;
    font-weight: bold;
    margin-right: 2rem;
}
.nav-links a {
    margin-right: 1.5rem;
    text-decoration: none;
    color: #8c5b3e;
    font-weight: 500;
}
.nav-links a:hover {
    text-decoration: underline;
}

/* Conteneur principal au centre (pour le robot + nuages) */
.main-container {
    position: relative;
    width: 100%;
    max-width: 600px;
    height: 600px;
    margin: 1rem auto; 
    text-align: center;
}

/* Style de l'icône robot */
.robot-icon {
    width: 80px;
    margin: 1rem auto;
}

/* Texte sous le robot */
.title-consent {
    font-size: 1.2rem;
    font-weight: bold;
    margin-bottom: 0.3rem;
}
.subtitle-consent {
    font-size: 0.9rem;
    color: #333;
    margin-bottom: 1.2rem;
}

/* Positionnement et style des nuages */
.cloud {
    position: absolute;
    width: 130px;
    padding: 0.5rem;
    background: #fff;
    border-radius: 50px;
    box-shadow: 0 2px 4px rgba(0,0,0,0.2);
    cursor: pointer;
    transition: transform 0.2s;
    text-align: center;
    font-size: 0.9rem;
}
.cloud:hover {
    transform: scale(1.05);
}

/* 5 nuages : positionnés autour du centre */
.cloud1 { top: 5%;  left: 40%; }
.cloud2 { top: 30%; left: 10%; }
.cloud3 { top: 30%; right: 10%; }
.cloud4 { bottom: 10%; left: 20%; }
.cloud5 { bottom: 10%; right: 20%; }

/* Pied de page ou zone pour le chat */
.footer-chat {
    margin-top: 2rem;
}

/* Couleur du texte dans la zone markdown */
.markdown-prose {
    color: #000 !important;
}
"""

# HTML pour la barre de navigation
nav_bar_html = """
<div class="nav-bar">
    <div class="nav-left">
        <div class="nav-logo">LÉLI</div>
    </div>
    <div class="nav-right nav-links">
        <a href="#">Pourquoi ?</a>
        <a href="#">Discute avec Léli</a>
        <a href="#">Contacts utiles</a>
    </div>
</div>
"""

# HTML pour la zone centrale (robot + nuages).
# onclick="cloudClicked('xxxx')" => appelle une fonction JS
main_html = """
<div class="main-container">
    <!-- Robot icône -->
    <img src="https://cdn-icons-png.flaticon.com/512/6188/6188530.png" class="robot-icon" alt="Robot" />

    <!-- Titre et sous-titre -->
    <div class="title-consent">LE CONSENTEMENT</div>
    <div class="subtitle-consent">Clique sur un nuage pour en découvrir le contenu</div>

    <!-- Nuages -->
    <div class="cloud cloud1" onclick="cloudClicked('Ce que c’est')">Ce que c'est</div>
    <div class="cloud cloud2" onclick="cloudClicked('Ce que ce n’est pas')">Ce que ce n’est pas</div>
    <div class="cloud cloud3" onclick="cloudClicked('Les risques si tu ne le respectes pas')">Les risques si tu ne le respectes pas</div>
    <div class="cloud cloud4" onclick="cloudClicked('Mise en situation')">Mise en situation</div>
    <div class="cloud cloud5" onclick="cloudClicked('Comment faire en pratique')">Comment faire en pratique</div>
</div>

<script>
function cloudClicked(message) {
    // Sélectionner la zone de texte du chat (Placeholder: "Type a message...")
    let textBox = document.querySelector('textarea[placeholder="Type a message..."]');
    if (textBox) {
        textBox.value = message;
        // Facultatif : automatiquement "envoyer" le message ?
        // On peut simuler un Enter, etc. Mais souvent on laisse l'utilisateur cliquer "Send".
    }
}
</script>
"""

def dummy_chatbot(user_input, history):
    """
    Exemple de fonction simple pour répondre dans le chat.
    - user_input: question de l’utilisateur
    - history: historique [(user_msg, bot_msg), ...]
    """
    history = history or []
    # Pour l’exemple : on se contente de renvoyer un message "Réponse".
    # À remplacer par votre propre logique, ou un modèle HF.
    bot_message = f"Voici un contenu sur : {user_input}"
    history.append((user_input, bot_message))
    return history

with gr.Blocks(css=custom_css) as demo:
    # La barre de navigation
    gr.HTML(nav_bar_html)

    # La zone "robot + nuages"
    gr.HTML(main_html)

    # Le chatbot en bas
    with gr.Box(elem_id="footer-chat"):
        chatbot = gr.Chatbot()
        msg = gr.Textbox(
            label="Pose ta question à Léli",
            placeholder="Type a message...",
            show_label=False
        )
        submit_btn = gr.Button("Send")

        def respond(user_input, chat_history):
            return dummy_chatbot(user_input, chat_history)

        submit_btn.click(
            fn=respond,
            inputs=[msg, chatbot],
            outputs=chatbot
        )

        # Optional: envoyer au "Enter" direct
        msg.submit(
            fn=respond,
            inputs=[msg, chatbot],
            outputs=chatbot
        )

if __name__ == "__main__":
    demo.launch()