// CSS imports import '../css/chat-client.css'; import '../../../eveai_chat_client/static/assets/css/chat.css'; import '../../../eveai_chat_client/static/assets/css/chat-components.css'; import '../../../eveai_chat_client/static/assets/css/chat-input.css'; import '../../../eveai_chat_client/static/assets/css/chat-message.css'; import '../../../eveai_chat_client/static/assets/css/form.css'; import '../../../eveai_chat_client/static/assets/css/form-message.css'; import '../../../eveai_chat_client/static/assets/css/language-selector.css'; // Dependencies import { createApp, version } from 'vue'; import { marked } from 'marked'; import { FormField } from '../../../eveai_chat_client/static/assets/js/components/FormField.js'; // Vue en andere bibliotheken beschikbaar maken window.Vue = { createApp, version }; window.marked = marked; // Debug: Check Vue build type console.log('π [DEBUG] Vue object:', window.Vue); console.log('π [DEBUG] Vue.createApp:', typeof window.Vue.createApp); console.log('π [DEBUG] Vue.version:', window.Vue.version); // Support tools import '../../../eveai_chat_client/static/assets/js/iconManager.js'; import '../../../eveai_chat_client/static/assets/js/translation.js'; // Gebruik barrel export voor componenten import * as Components from '../../../eveai_chat_client/static/assets/js/components/index.js'; // Maak Components globaal beschikbaar voor debugging window.Components = Components; console.log('Components loaded:', Object.keys(Components)); // Import specifieke componenten import { LanguageSelector } from '../../../eveai_chat_client/static/assets/js/components/LanguageSelector.js'; import { ChatApp } from '../../../eveai_chat_client/static/assets/js/ChatApp.js'; // Globale Vue error tracking window.addEventListener('error', function(event) { console.error('π¨ [Global Error]', event.error); }); // Wacht tot DOM geladen is document.addEventListener('DOMContentLoaded', function() { console.log('π [DEBUG] DOM content loaded, initializing application...'); // Controleer of chatConfig is ingesteld if (!window.chatConfig) { console.error('chatConfig is niet beschikbaar'); window.chatConfig = {}; } // Vul de sidebar explanation in fillSidebarExplanation(); // Initialiseer language selector initializeLanguageSelector(); // Initialiseer chat app (simpel) initializeChatApp(); }); /** * Vul de sidebar explanation in */ function fillSidebarExplanation() { const sidebarElement = document.getElementById('sidebar-explanation'); if (sidebarElement && window.chatConfig.explanation) { if (typeof window.marked === 'function') { sidebarElement.innerHTML = window.marked(window.chatConfig.explanation); } else if (window.marked && typeof window.marked.parse === 'function') { sidebarElement.innerHTML = window.marked.parse(window.chatConfig.explanation.replace(/\[\[(.*?)\]\]/g, '$1')); } else { sidebarElement.innerHTML = window.chatConfig.explanation; } } } /** * Initialiseert de language selector */ function initializeLanguageSelector() { console.log('π [DEBUG] Start initializeLanguageSelector'); const container = document.getElementById('language-selector-container'); console.log('π [DEBUG] Container element:', container); if (!container) { console.error('#language-selector-container niet gevonden'); return; } try { // Maak props voor de component const props = { initialLanguage: window.chatConfig.language || 'nl', supportedLanguageDetails: window.chatConfig.supportedLanguageDetails || {}, allowedLanguages: window.chatConfig.allowedLanguages || ['nl', 'en', 'fr', 'de'] }; console.log('π [DEBUG] Props voor LanguageSelector:', JSON.stringify(props, null, 2)); // Mount de component direct - BELANGRIJK: we gebruiken window.Vue als dat beschikbaar is // Dit is nodig voor compatibiliteit met oude code const app = window.Vue && typeof window.Vue.createApp === 'function' ? window.Vue.createApp(LanguageSelector, props) : createApp(LanguageSelector, props); // Registreer error handler app.config.errorHandler = (err, vm, info) => { console.error('π¨ [Vue Error]', err); console.error('Component:', vm); console.error('Error Info:', info); }; try { // Mount de component const mountedApp = app.mount(container); console.log('π [DEBUG] LanguageSelector instantie gemount:', mountedApp); } catch (mountError) { console.error('π¨ [ERROR] Fout bij mounten van LanguageSelector met Vue:', mountError); console.log('π [DEBUG] Probeer alternatieve direct DOM rendering...'); // Probeer de legacy renderComponent methode als Vue mounting mislukt if (typeof LanguageSelector.renderComponent === 'function') { console.log('π [DEBUG] LanguageSelector.renderComponent gevonden, directe rendering uitvoeren'); try { LanguageSelector.renderComponent(container, props); console.log('π [DEBUG] LanguageSelector direct gerenderd via renderComponent'); } catch (renderError) { console.error('π¨ [ERROR] Ook alternatieve rendering gefaald:', renderError); } } else { console.error('π¨ [ERROR] Geen renderComponent methode beschikbaar op LanguageSelector'); // Noodoplossing: Handmatige DOM manipulatie container.innerHTML = `