| <!DOCTYPE html> |
| <html lang="ar" dir="rtl"> |
| <head> |
| <meta charset="UTF-8"> |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| <title>مساعد الذكاء الاصطناعي</title> |
| <script src="https://cdn.tailwindcss.com"></script> |
| <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> |
| <style> |
| |
| .custom-scrollbar::-webkit-scrollbar { |
| width: 6px; |
| } |
| .custom-scrollbar::-webkit-scrollbar-track { |
| background: #f1f1f1; |
| } |
| .custom-scrollbar::-webkit-scrollbar-thumb { |
| background: #888; |
| border-radius: 3px; |
| } |
| .custom-scrollbar::-webkit-scrollbar-thumb:hover { |
| background: #555; |
| } |
| |
| |
| @keyframes fadeIn { |
| from { opacity: 0; transform: translateY(10px); } |
| to { opacity: 1; transform: translateY(0); } |
| } |
| .chat-message { |
| animation: fadeIn 0.3s ease-out; |
| } |
| |
| |
| @keyframes blink { |
| 0%, 100% { opacity: 1; } |
| 50% { opacity: 0.5; } |
| } |
| .typing-dot { |
| animation: blink 1.5s infinite; |
| } |
| .typing-dot:nth-child(2) { |
| animation-delay: 0.2s; |
| } |
| .typing-dot:nth-child(3) { |
| animation-delay: 0.4s; |
| } |
| </style> |
| </head> |
| <body class="bg-gray-50 h-screen flex flex-col"> |
| |
| <header class="bg-white shadow-sm py-3 px-4 flex items-center justify-between"> |
| <div class="flex items-center space-x-2"> |
| <div class="w-8 h-8 rounded-full bg-gradient-to-r from-purple-500 to-blue-500 flex items-center justify-center text-white font-bold">AI</div> |
| <h1 class="text-lg font-semibold text-gray-800">مساعد الذكاء الاصطناعي</h1> |
| </div> |
| <div class="flex items-center space-x-3"> |
| <button class="p-2 rounded-full hover:bg-gray-100 text-gray-600"> |
| <i class="fas fa-ellipsis-vertical"></i> |
| </button> |
| </div> |
| </header> |
|
|
| |
| <div class="flex-1 overflow-hidden flex flex-col"> |
| |
| <div id="chat-messages" class="flex-1 overflow-y-auto custom-scrollbar p-4 space-y-4 rtl"> |
| |
| <div class="chat-message"> |
| <div class="flex items-start"> |
| <div class="w-8 h-8 rounded-full bg-gradient-to-r from-purple-500 to-blue-500 flex items-center justify-center text-white font-bold ml-3">AI</div> |
| <div class="flex-1"> |
| <div class="bg-white p-4 rounded-lg shadow-sm max-w-3xl"> |
| <p class="text-gray-800">مرحبًا! أنا مساعدك الذكي. كيف يمكنني مساعدتك اليوم؟</p> |
| <div class="mt-2 flex flex-wrap gap-2"> |
| <button class="suggestion-btn text-xs bg-gray-100 hover:bg-gray-200 text-gray-700 px-3 py-1 rounded-full transition">اقترح وصفة طعام</button> |
| <button class="suggestion-btn text-xs bg-gray-100 hover:bg-gray-200 text-gray-700 px-3 py-1 rounded-full transition">اشرح لي الذكاء الاصطناعي</button> |
| <button class="suggestion-btn text-xs bg-gray-100 hover:bg-gray-200 text-gray-700 px-3 py-1 rounded-full transition">ساعدني في البرمجة</button> |
| </div> |
| </div> |
| <div class="text-xs text-gray-500 mt-1 mr-1">اليوم على الساعة <span id="current-time"></span></div> |
| </div> |
| </div> |
| </div> |
| </div> |
|
|
| |
| <div id="typing-indicator" class="hidden px-4 pb-3"> |
| <div class="flex items-start"> |
| <div class="w-8 h-8 rounded-full bg-gradient-to-r from-purple-500 to-blue-500 flex items-center justify-center text-white font-bold ml-3">AI</div> |
| <div class="bg-white p-3 rounded-lg shadow-sm"> |
| <div class="flex space-x-1"> |
| <div class="typing-dot w-2 h-2 bg-gray-400 rounded-full"></div> |
| <div class="typing-dot w-2 h-2 bg-gray-400 rounded-full"></div> |
| <div class="typing-dot w-2 h-2 bg-gray-400 rounded-full"></div> |
| </div> |
| </div> |
| </div> |
| </div> |
|
|
| |
| <div class="border-t border-gray-200 bg-white p-3"> |
| <form id="chat-form" class="flex items-end space-x-2"> |
| <button type="submit" id="send-button" class="w-10 h-10 rounded-full bg-gradient-to-r from-purple-500 to-blue-500 text-white flex items-center justify-center hover:opacity-90 transition disabled:opacity-50" disabled> |
| <i class="fas fa-paper-plane"></i> |
| </button> |
| <div class="flex-1 bg-gray-100 rounded-lg flex items-end"> |
| <textarea id="message-input" rows="1" placeholder="اكتب رسالتك هنا..." class="flex-1 bg-transparent p-3 max-h-32 resize-none outline-none text-gray-700 rtl"></textarea> |
| <button type="button" class="p-2 text-gray-500 hover:text-gray-700"> |
| <i class="fas fa-paperclip"></i> |
| </button> |
| </div> |
| </form> |
| <p class="text-xs text-gray-500 mt-2 text-center">قد يقدم المساعد معلومات غير دقيقة عن الأشخاص، الأماكن أو الحقائق.</p> |
| </div> |
| </div> |
|
|
| <script> |
| |
| const now = new Date(); |
| const timeString = now.toLocaleTimeString('ar-EG', { hour: '2-digit', minute: '2-digit' }); |
| document.getElementById('current-time').textContent = timeString; |
| |
| |
| const textarea = document.getElementById('message-input'); |
| textarea.addEventListener('input', function() { |
| this.style.height = 'auto'; |
| this.style.height = (this.scrollHeight) + 'px'; |
| |
| |
| document.getElementById('send-button').disabled = this.value.trim() === ''; |
| }); |
| |
| |
| const chatForm = document.getElementById('chat-form'); |
| const chatMessages = document.getElementById('chat-messages'); |
| |
| chatForm.addEventListener('submit', function(e) { |
| e.preventDefault(); |
| const message = textarea.value.trim(); |
| if (message === '') return; |
| |
| |
| addMessage(message, 'user'); |
| textarea.value = ''; |
| textarea.style.height = 'auto'; |
| document.getElementById('send-button').disabled = true; |
| |
| |
| document.getElementById('typing-indicator').classList.remove('hidden'); |
| chatMessages.scrollTop = chatMessages.scrollHeight; |
| |
| |
| setTimeout(() => { |
| document.getElementById('typing-indicator').classList.add('hidden'); |
| const responses = [ |
| `أنا أفهم سؤالك حول "${message}". اسمح لي أن أقدم لك المعلومات التالية حول هذا الموضوع...`, |
| `سؤال مثير للاهتمام! دعني أفكر في "${message}" للحظة...`, |
| `سأكون سعيدًا بمساعدتك بخصوص "${message}". إليك بعض المعلومات التي قد تكون مفيدة...`, |
| `بخصوص "${message}"، لدي هذه التفاصيل التي قد تجيب على سؤالك...`, |
| `شكرًا لسؤالك عن "${message}". المعلومات المتوفرة لدي تشير إلى أن...`, |
| `لقد بحثت عن "${message}" وهذه هي النتائج التي توصلت إليها...`, |
| `سؤالك مهم. فيما يلي تحليلي لموضوع "${message}"...`, |
| `فهمت أنك تريد معرفة المزيد عن "${message}". اسمح لي أن أشرح لك...` |
| ]; |
| const randomResponse = responses[Math.floor(Math.random() * responses.length)]; |
| addMessage(randomResponse, 'ai'); |
| }, 1500 + Math.random() * 2000); |
| }); |
| |
| |
| document.querySelectorAll('.suggestion-btn').forEach(button => { |
| button.addEventListener('click', function() { |
| textarea.value = this.textContent; |
| textarea.dispatchEvent(new Event('input')); |
| textarea.focus(); |
| }); |
| }); |
| |
| |
| function addMessage(content, sender) { |
| const now = new Date(); |
| const timeString = now.toLocaleTimeString('ar-EG', { hour: '2-digit', minute: '2-digit' }); |
| |
| const messageDiv = document.createElement('div'); |
| messageDiv.className = 'chat-message'; |
| |
| if (sender === 'user') { |
| messageDiv.innerHTML = ` |
| <div class="flex items-start justify-end"> |
| <div class="flex-1 max-w-3xl"> |
| <div class="bg-blue-500 text-white p-4 rounded-lg shadow-sm mr-auto"> |
| <p>${content}</p> |
| </div> |
| <div class="text-xs text-gray-500 mt-1 ml-1 text-left">${timeString}</div> |
| </div> |
| </div> |
| `; |
| } else { |
| messageDiv.innerHTML = ` |
| <div class="flex items-start"> |
| <div class="w-8 h-8 rounded-full bg-gradient-to-r from-purple-500 to-blue-500 flex items-center justify-center text-white font-bold ml-3">AI</div> |
| <div class="flex-1"> |
| <div class="bg-white p-4 rounded-lg shadow-sm max-w-3xl"> |
| <p class="text-gray-800">${content}</p> |
| </div> |
| <div class="text-xs text-gray-500 mt-1 mr-1">${timeString}</div> |
| </div> |
| </div> |
| `; |
| } |
| |
| chatMessages.appendChild(messageDiv); |
| chatMessages.scrollTop = chatMessages.scrollHeight; |
| } |
| |
| |
| textarea.addEventListener('keydown', function(e) { |
| if (e.key === 'Enter' && !e.shiftKey) { |
| e.preventDefault(); |
| chatForm.dispatchEvent(new Event('submit')); |
| } |
| }); |
| </script> |
| </body> |
| </html> |