Spaces:
Configuration error
Configuration error
Pourriez-vous s’il vous plaît remettre le micro, le bouton d’envoi, l’ajout de fichiers et toutes les fonctionnalités associées comme avant ?
Browse files- components/chat.js +14 -7
- style.css +1 -3
components/chat.js
CHANGED
|
@@ -204,6 +204,7 @@ connectedCallback() {
|
|
| 204 |
const micStatus = shadow.getElementById('micStatus');
|
| 205 |
|
| 206 |
let recognition;
|
|
|
|
| 207 |
// File upload
|
| 208 |
fileButton.addEventListener('click', () => fileInput.click());
|
| 209 |
fileInput.addEventListener('change', (e) => {
|
|
@@ -211,6 +212,7 @@ connectedCallback() {
|
|
| 211 |
filesInfo.textContent = this._files.length ?
|
| 212 |
`${this._files.length} fichier(s) sélectionné(s)` : '';
|
| 213 |
});
|
|
|
|
| 214 |
// Connect apps
|
| 215 |
connectButton.addEventListener('click', () => {
|
| 216 |
this._addMessage('assistant',
|
|
@@ -218,10 +220,14 @@ connectedCallback() {
|
|
| 218 |
'- Votre espace de stockage\n- Outils de création\n- API externes\n' +
|
| 219 |
'Quel service souhaitez-vous connecter?');
|
| 220 |
});
|
|
|
|
| 221 |
// Speech recognition
|
| 222 |
micButton.addEventListener('click', () => {
|
| 223 |
if (this._speechState === 'listening') {
|
| 224 |
-
|
|
|
|
|
|
|
|
|
|
| 225 |
return;
|
| 226 |
}
|
| 227 |
|
|
@@ -247,9 +253,7 @@ connectedCallback() {
|
|
| 247 |
recognition.onresult = (event) => {
|
| 248 |
let transcript = '';
|
| 249 |
for (let i = event.resultIndex; i < event.results.length; i++) {
|
| 250 |
-
|
| 251 |
-
transcript += event.results[i][0].transcript;
|
| 252 |
-
}
|
| 253 |
}
|
| 254 |
messageInput.value = transcript;
|
| 255 |
};
|
|
@@ -260,6 +264,7 @@ connectedCallback() {
|
|
| 260 |
micStatus.textContent = 'Micro bloqué';
|
| 261 |
} else {
|
| 262 |
this._speechState = 'idle';
|
|
|
|
| 263 |
}
|
| 264 |
micButton.classList.remove('listening');
|
| 265 |
setTimeout(() => micStatus.textContent = 'En ligne', 2000);
|
|
@@ -278,8 +283,10 @@ connectedCallback() {
|
|
| 278 |
} catch (err) {
|
| 279 |
this._speechState = 'idle';
|
| 280 |
micStatus.textContent = 'Erreur micro';
|
|
|
|
| 281 |
}
|
| 282 |
});
|
|
|
|
| 283 |
// Send message
|
| 284 |
const sendMessage = () => {
|
| 285 |
const message = messageInput.value.trim();
|
|
@@ -293,7 +300,7 @@ connectedCallback() {
|
|
| 293 |
filesInfo.textContent = '';
|
| 294 |
fileInput.value = '';
|
| 295 |
|
| 296 |
-
// Simulate Rosalinda's
|
| 297 |
setTimeout(() => {
|
| 298 |
const responses = [
|
| 299 |
"J'ai bien reçu votre demande. Je travaille sur une solution créative...",
|
|
@@ -306,11 +313,11 @@ connectedCallback() {
|
|
| 306 |
}, 1500);
|
| 307 |
}
|
| 308 |
};
|
| 309 |
-
sendButton.addEventListener('click', sendMessage);
|
| 310 |
messageInput.addEventListener('keydown', (e) => {
|
| 311 |
if (e.key === 'Enter') sendMessage();
|
| 312 |
});
|
| 313 |
-
|
| 314 |
|
| 315 |
_addMessage(role, content) {
|
| 316 |
this._messages.push({ role, content });
|
|
|
|
| 204 |
const micStatus = shadow.getElementById('micStatus');
|
| 205 |
|
| 206 |
let recognition;
|
| 207 |
+
|
| 208 |
// File upload
|
| 209 |
fileButton.addEventListener('click', () => fileInput.click());
|
| 210 |
fileInput.addEventListener('change', (e) => {
|
|
|
|
| 212 |
filesInfo.textContent = this._files.length ?
|
| 213 |
`${this._files.length} fichier(s) sélectionné(s)` : '';
|
| 214 |
});
|
| 215 |
+
|
| 216 |
// Connect apps
|
| 217 |
connectButton.addEventListener('click', () => {
|
| 218 |
this._addMessage('assistant',
|
|
|
|
| 220 |
'- Votre espace de stockage\n- Outils de création\n- API externes\n' +
|
| 221 |
'Quel service souhaitez-vous connecter?');
|
| 222 |
});
|
| 223 |
+
|
| 224 |
// Speech recognition
|
| 225 |
micButton.addEventListener('click', () => {
|
| 226 |
if (this._speechState === 'listening') {
|
| 227 |
+
if (recognition) recognition.stop();
|
| 228 |
+
this._speechState = 'idle';
|
| 229 |
+
micButton.classList.remove('listening');
|
| 230 |
+
micStatus.textContent = 'En ligne';
|
| 231 |
return;
|
| 232 |
}
|
| 233 |
|
|
|
|
| 253 |
recognition.onresult = (event) => {
|
| 254 |
let transcript = '';
|
| 255 |
for (let i = event.resultIndex; i < event.results.length; i++) {
|
| 256 |
+
transcript += event.results[i][0].transcript;
|
|
|
|
|
|
|
| 257 |
}
|
| 258 |
messageInput.value = transcript;
|
| 259 |
};
|
|
|
|
| 264 |
micStatus.textContent = 'Micro bloqué';
|
| 265 |
} else {
|
| 266 |
this._speechState = 'idle';
|
| 267 |
+
micStatus.textContent = 'Erreur micro';
|
| 268 |
}
|
| 269 |
micButton.classList.remove('listening');
|
| 270 |
setTimeout(() => micStatus.textContent = 'En ligne', 2000);
|
|
|
|
| 283 |
} catch (err) {
|
| 284 |
this._speechState = 'idle';
|
| 285 |
micStatus.textContent = 'Erreur micro';
|
| 286 |
+
micButton.classList.remove('listening');
|
| 287 |
}
|
| 288 |
});
|
| 289 |
+
|
| 290 |
// Send message
|
| 291 |
const sendMessage = () => {
|
| 292 |
const message = messageInput.value.trim();
|
|
|
|
| 300 |
filesInfo.textContent = '';
|
| 301 |
fileInput.value = '';
|
| 302 |
|
| 303 |
+
// Simulate Rosalinda's response
|
| 304 |
setTimeout(() => {
|
| 305 |
const responses = [
|
| 306 |
"J'ai bien reçu votre demande. Je travaille sur une solution créative...",
|
|
|
|
| 313 |
}, 1500);
|
| 314 |
}
|
| 315 |
};
|
| 316 |
+
sendButton.addEventListener('click', sendMessage);
|
| 317 |
messageInput.addEventListener('keydown', (e) => {
|
| 318 |
if (e.key === 'Enter') sendMessage();
|
| 319 |
});
|
| 320 |
+
}
|
| 321 |
|
| 322 |
_addMessage(role, content) {
|
| 323 |
this._messages.push({ role, content });
|
style.css
CHANGED
|
@@ -44,13 +44,11 @@ custom-chat {
|
|
| 44 |
padding: 0.75rem 1rem;
|
| 45 |
margin-bottom: 0.5rem;
|
| 46 |
}
|
| 47 |
-
|
| 48 |
.mic-button.listening {
|
| 49 |
-
background-color: #
|
| 50 |
color: white !important;
|
| 51 |
animation: pulse 1.5s infinite;
|
| 52 |
}
|
| 53 |
-
|
| 54 |
@keyframes pulse {
|
| 55 |
0% { opacity: 1; }
|
| 56 |
50% { opacity: 0.7; }
|
|
|
|
| 44 |
padding: 0.75rem 1rem;
|
| 45 |
margin-bottom: 0.5rem;
|
| 46 |
}
|
|
|
|
| 47 |
.mic-button.listening {
|
| 48 |
+
background-color: #3b82f6 !important;
|
| 49 |
color: white !important;
|
| 50 |
animation: pulse 1.5s infinite;
|
| 51 |
}
|
|
|
|
| 52 |
@keyframes pulse {
|
| 53 |
0% { opacity: 1; }
|
| 54 |
50% { opacity: 0.7; }
|