michalkichal commited on
Commit
cc5da26
·
verified ·
1 Parent(s): b121648

stop typing in message bubbles, only type in user messages in "Type your message..." input - Follow Up Deployment

Browse files
Files changed (1) hide show
  1. index.html +56 -32
index.html CHANGED
@@ -38,14 +38,16 @@
38
  .user-bubble {
39
  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
40
  color: white;
41
- align-self: flex-end;
 
42
  border-bottom-right-radius: 4px;
43
  }
44
 
45
  .ai-bubble {
46
  background: rgba(255, 255, 255, 0.9);
47
  color: #333;
48
- align-self: flex-start;
 
49
  border-bottom-left-radius: 4px;
50
  }
51
 
@@ -307,30 +309,45 @@
307
  const message = userInput.value.trim();
308
  if (message === '') return;
309
 
310
- // Add user message
311
- addMessage(message, 'user');
312
- userInput.value = '';
313
-
314
- // Show typing indicator
315
  typingIndicator.classList.remove('hidden');
 
 
316
  chatContainer.scrollTop = chatContainer.scrollHeight;
317
 
318
- // Simulate AI response after delay
 
 
 
 
 
 
 
 
 
 
 
 
319
  setTimeout(() => {
320
- typingIndicator.classList.add('hidden');
 
 
321
  simulateAIResponse();
322
- }, 1500);
323
  }
324
 
325
- // Add message to chat
326
  function addMessage(message, sender) {
327
  const messageDiv = document.createElement('div');
328
  messageDiv.className = `message-bubble ${sender}-bubble`;
329
- messageDiv.innerHTML = message;
330
  chatContainer.appendChild(messageDiv);
 
 
 
331
  chatContainer.scrollTop = chatContainer.scrollHeight;
 
332
 
333
- // Handle gallery images
334
  if (sender === 'ai') {
335
  setTimeout(() => {
336
  const galleryImages = document.querySelectorAll('.gallery-img');
@@ -346,12 +363,15 @@
346
 
347
  // Simulate AI response based on conversation flow
348
  function simulateAIResponse() {
349
- if (currentStep < conversation.length) {
350
- addMessage(conversation[currentStep].ai, 'ai');
351
- currentStep++;
352
- } else {
353
- addMessage("Is there anything else I can help you with today?", 'ai');
354
- }
 
 
 
355
  }
356
 
357
  // Event listeners
@@ -388,22 +408,26 @@
388
  conversation.forEach((step, index) => {
389
  // User message
390
  setTimeout(() => {
391
- addMessage(step.user, 'user');
392
- }, delay);
393
-
394
- // AI typing indicator
395
- setTimeout(() => {
 
396
  typingIndicator.classList.remove('hidden');
397
  chatContainer.scrollTop = chatContainer.scrollHeight;
398
- }, delay + 500);
399
-
400
- // AI response
401
- setTimeout(() => {
402
- typingIndicator.classList.add('hidden');
403
- addMessage(step.ai, 'ai');
404
- }, delay + 2000);
 
 
 
405
 
406
- delay += 3500; // Increment delay for next pair
407
  });
408
  });
409
  </script>
 
38
  .user-bubble {
39
  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
40
  color: white;
41
+ margin-left: auto;
42
+ margin-right: 0;
43
  border-bottom-right-radius: 4px;
44
  }
45
 
46
  .ai-bubble {
47
  background: rgba(255, 255, 255, 0.9);
48
  color: #333;
49
+ margin-right: auto;
50
+ margin-left: 0;
51
  border-bottom-left-radius: 4px;
52
  }
53
 
 
309
  const message = userInput.value.trim();
310
  if (message === '') return;
311
 
312
+ // Show typing indicator for user
 
 
 
 
313
  typingIndicator.classList.remove('hidden');
314
+ typingIndicator.style.marginLeft = 'auto';
315
+ typingIndicator.style.marginRight = '0';
316
  chatContainer.scrollTop = chatContainer.scrollHeight;
317
 
318
+ // Clear input but keep message for animation
319
+ const messageToSend = message;
320
+ userInput.value = '';
321
+
322
+ // Add user message immediately
323
+ const bubble = document.createElement('div');
324
+ bubble.className = 'message-bubble user-bubble';
325
+ bubble.textContent = messageToSend;
326
+ chatContainer.appendChild(bubble);
327
+
328
+ typingIndicator.classList.add('hidden');
329
+
330
+ // Show AI typing after short delay
331
  setTimeout(() => {
332
+ typingIndicator.style.marginLeft = '0';
333
+ typingIndicator.style.marginRight = 'auto';
334
+ typingIndicator.classList.remove('hidden');
335
  simulateAIResponse();
336
+ }, 500);
337
  }
338
 
339
+ // Add message to chat (for AI responses)
340
  function addMessage(message, sender) {
341
  const messageDiv = document.createElement('div');
342
  messageDiv.className = `message-bubble ${sender}-bubble`;
 
343
  chatContainer.appendChild(messageDiv);
344
+
345
+ // Add message immediately
346
+ messageDiv.innerHTML = message;
347
  chatContainer.scrollTop = chatContainer.scrollHeight;
348
+ typingIndicator.classList.add('hidden');
349
 
350
+ // Handle gallery images after message is complete
351
  if (sender === 'ai') {
352
  setTimeout(() => {
353
  const galleryImages = document.querySelectorAll('.gallery-img');
 
363
 
364
  // Simulate AI response based on conversation flow
365
  function simulateAIResponse() {
366
+ // Random delay before AI starts typing (1-3 seconds)
367
+ setTimeout(() => {
368
+ if (currentStep < conversation.length) {
369
+ addMessage(conversation[currentStep].ai, 'ai');
370
+ currentStep++;
371
+ } else {
372
+ addMessage("Is there anything else I can help you with today?", 'ai');
373
+ }
374
+ }, 500 + Math.random() * 2000);
375
  }
376
 
377
  // Event listeners
 
408
  conversation.forEach((step, index) => {
409
  // User message
410
  setTimeout(() => {
411
+ const userBubble = document.createElement('div');
412
+ userBubble.className = 'message-bubble user-bubble';
413
+ userBubble.textContent = step.user;
414
+ chatContainer.appendChild(userBubble);
415
+
416
+ // Show AI typing
417
  typingIndicator.classList.remove('hidden');
418
  chatContainer.scrollTop = chatContainer.scrollHeight;
419
+
420
+ // AI response after delay
421
+ setTimeout(() => {
422
+ typingIndicator.classList.add('hidden');
423
+ const aiBubble = document.createElement('div');
424
+ aiBubble.className = 'message-bubble ai-bubble';
425
+ aiBubble.innerHTML = step.ai;
426
+ chatContainer.appendChild(aiBubble);
427
+ }, 1000);
428
+ }, delay);
429
 
430
+ delay += 2000; // Increment delay for next pair
431
  });
432
  });
433
  </script>