'); } iframe.srcdoc = html; } document.getElementById('chatInput').addEventListener('keydown', function(e) { if (e.key === 'Enter' && !e.shiftKey) { e.preventDefault(); sendChat(); } }); async function sendChat() { var input = document.getElementById('chatInput'); var msg = input.value.trim(); if (!msg) return; var messages = document.getElementById('chatMessages'); messages.innerHTML += '
'; input.value = ''; scrollChatToBottom(true); var mode = document.querySelector('input[name="sendMode"]:checked'); var isBuild = mode && mode.value === 'build'; var projectCard = document.getElementById('projectCard'); var projectStatus = document.getElementById('projectStatus'); if (projectCard) projectCard.classList.add('busy'); if (projectStatus) projectStatus.textContent = 'Bezig…'; updateFlowMini(isBuild ? 'analyze' : 'input'); try { var body = { action: isBuild ? 'generate' : 'chat', prompt: msg }; if (isBuild) { body.description = descriptionForApi(msg); body.language = 'html'; body.context = files; } else { body.code = editor ? editor.getValue() : ''; } var response = await fetch('/api/ai-code-editor-api.php', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body) }); var data = await response.json(); var reply = data.error || (data.data && (data.data.text || data.data.reply)) || (data.data && data.data.code) || 'Geen antwoord'; if (typeof reply !== 'string') reply = JSON.stringify(reply); if (isBuild && data.success && data.data && data.data.code) { var code = data.data.code; var htmlMatch = code.match(/```html\n([\s\S]*?)```/); var cssMatch = code.match(/```css\n([\s\S]*?)```/); var jsMatch = code.match(/```javascript\n([\s\S]*?)```/); if (htmlMatch) { files['index.html'] = htmlMatch[1].trim(); } if (cssMatch) { files['style.css'] = cssMatch[1].trim(); } if (jsMatch) { files['script.js'] = jsMatch[1].trim(); } if (editor && activeFile in files) editor.setValue(files[activeFile]); updatePreview(); updateFlowMini('done'); } else { updateFlowMini('code'); } messages.innerHTML += '
'; scrollChatToBottom(true); setTimeout(function() { scrollChatToBottom(true); }, 200); } catch (error) { messages.innerHTML += '
'; scrollChatToBottom(true); updateFlowMini('input'); } if (projectCard) projectCard.classList.remove('busy'); if (projectStatus) projectStatus.textContent = 'Klaar voor input'; }