diff --git a/eveai_chat_client/static/assets/css/chat-components.css b/eveai_chat_client/static/assets/css/chat-components.css index 96ed506..22d0d0f 100644 --- a/eveai_chat_client/static/assets/css/chat-components.css +++ b/eveai_chat_client/static/assets/css/chat-components.css @@ -155,18 +155,7 @@ } /* Zorg dat de progress tracker goed wordt weergegeven in een lege message bubble */ -.message-content:has(.message-text:empty) .message-progress { - margin-bottom: 0; -} - -/* Verberg de message content container als er geen inhoud is en de verwerking bezig is */ -.message-content:has(.message-text:empty):not(:has(.message-progress.completed)):not(:has(.message-progress.error)) { - background: transparent; - box-shadow: none; - border: none; - padding: 0; - margin: 0; -} +/* moved to ChatMessage.vue scoped styles */ /* Focus binnen ChatInput voor toegankelijkheid */ .chat-input:focus-within { @@ -208,33 +197,7 @@ justify-content: flex-start; } -/* Message content wrapper - dit wordt de bubble */ -.message-content { - max-width: 70%; - padding: 12px 16px; - border-radius: 18px; - word-wrap: break-word; - position: relative; - box-shadow: 0 2px 8px rgba(0,0,0,0.1); - transition: all 0.2s ease; - display: inline-block; -} - -/* User message bubble styling */ -.message.user .message-content { - background: var(--human-message-background); - color: var(--human-message-text-color); - border-bottom-right-radius: 4px; -} - -/* AI/Bot message bubble styling */ -.message.ai .message-content, -.message.bot .message-content { - background: var(--ai-message-background); - color: var(--ai-message-text-color); - border-bottom-left-radius: 4px; - margin-right: 60px; -} +/* moved to ChatMessage.vue scoped styles */ /* Message text content */ .message-text { @@ -435,10 +398,7 @@ } /* Hover effects voor message bubbles */ -.message-content:hover { - transform: translateY(-1px); - box-shadow: 0 4px 12px rgba(0,0,0,0.15); -} +/* moved to ChatMessage.vue scoped styles */ /* Bestaande animation en date-separator blijven hetzelfde */ @keyframes messageSlideIn { @@ -483,11 +443,7 @@ padding: 0 15px; } - .message-content { - max-width: 85%; - padding: 10px 14px; - font-size: 14px; - } + /* moved to ChatMessage.vue scoped styles */ .message.user .message-content { margin-left: 40px; @@ -504,11 +460,7 @@ padding: 0 10px; } - .message-content { - max-width: 90%; - margin-left: 20px !important; - margin-right: 20px !important; - } + /* moved to ChatMessage.vue scoped styles */ } /* Progress Tracker Styling */ diff --git a/eveai_chat_client/static/assets/css/chat-message.css b/eveai_chat_client/static/assets/css/chat-message.css index 6fce9ac..a84e026 100644 --- a/eveai_chat_client/static/assets/css/chat-message.css +++ b/eveai_chat_client/static/assets/css/chat-message.css @@ -15,11 +15,7 @@ margin-right: auto; } -.message-content { - width: 100%; - font-family: Arial, sans-serif; - font-size: 14px; -} +/* moved to ChatMessage.vue scoped styles */ /* Tabel styling voor formulieren */ .form-result-table { diff --git a/eveai_chat_client/static/assets/css/chat.css b/eveai_chat_client/static/assets/css/chat.css index 9449b6d..ce1cfe5 100644 --- a/eveai_chat_client/static/assets/css/chat.css +++ b/eveai_chat_client/static/assets/css/chat.css @@ -14,7 +14,8 @@ /* App container layout */ .app-container { display: flex; - height: 100vh; + height: 100vh; /* fallback */ + height: 100dvh; /* prefer dynamic viewport unit */ width: 100%; } @@ -80,9 +81,23 @@ .content-area { flex: 1; background: linear-gradient(135deg, var(--gradient-start-color), var(--gradient-end-color)); - overflow-y: auto; + overflow-y: hidden; display: flex; flex-direction: column; + min-height: 0; + height: 100vh; /* fallback for desktop */ + height: 100dvh; /* prefer dynamic viewport on desktop */ +} + +.chat-container { + display: flex; + flex-direction: column; + flex: 1; + min-height: 0; /* laat kinderen (ChatApp) krimpen */ +} + +html, body { + height: 100%; } body { @@ -203,15 +218,7 @@ body { /* .message-content wordt nu gedefinieerd in chat-components.css */ -.user-message .message-content { - background-color: var(--message-user-bg); - color: var(--text-color); -} - -.bot-message .message-content { - background-color: var(--message-bot-bg); - color: var(--text-color); -} +/* moved to ChatMessage.vue scoped styles */ /* .chat-input-container wordt nu gedefinieerd in chat-components.css */ @@ -273,10 +280,14 @@ body { width: 100%; } + :root { --mobile-header-height: 60px; } /* default/minimum */ + /* Content area takes remaining space */ .content-area { flex: 1; - height: calc(100vh - 60px); /* Subtract mobile header height */ + height: calc(100vh - var(--mobile-header-height)); /* fallback */ + height: calc(100dvh - var(--mobile-header-height)); /* prefer dynamic viewport */ + min-height: 0; } } diff --git a/eveai_chat_client/static/assets/css/form-message.css b/eveai_chat_client/static/assets/css/form-message.css index a82cbf9..f0a61ae 100644 --- a/eveai_chat_client/static/assets/css/form-message.css +++ b/eveai_chat_client/static/assets/css/form-message.css @@ -54,6 +54,4 @@ word-break: break-word; } -.message-content { - max-width: 100%; -} +/* moved to ChatMessage.vue scoped styles */ diff --git a/eveai_chat_client/static/assets/vue-components/ChatApp.vue b/eveai_chat_client/static/assets/vue-components/ChatApp.vue index 7dc6619..8ab2ddf 100644 --- a/eveai_chat_client/static/assets/vue-components/ChatApp.vue +++ b/eveai_chat_client/static/assets/vue-components/ChatApp.vue @@ -553,7 +553,8 @@ export default { .chat-app-container { display: flex; flex-direction: column; - height: 100vh; + flex: 1; + /* height: 100%; avoided to let flex sizing control height */ width: 100%; min-height: 0; max-width: 1000px; @@ -561,10 +562,12 @@ export default { margin-right: auto; padding: 20px; box-sizing: border-box; + overflow: hidden; } .chat-messages-area { flex: 1; + min-height: 0; /* ensure child can scroll */ overflow: hidden; display: flex; flex-direction: column; @@ -585,10 +588,4 @@ export default { flex: 0 0 auto; } -/* Responsive adjustments */ -@media (max-width: 768px) { - .chat-app-container { - height: 100vh; - } -} \ No newline at end of file diff --git a/eveai_chat_client/static/assets/vue-components/ChatInput.vue b/eveai_chat_client/static/assets/vue-components/ChatInput.vue index 08c470e..cc55a8a 100644 --- a/eveai_chat_client/static/assets/vue-components/ChatInput.vue +++ b/eveai_chat_client/static/assets/vue-components/ChatInput.vue @@ -42,6 +42,7 @@ ref="messageInput" v-model="localMessage" @keydown="handleKeydown" + @focus="autoResize" :placeholder="translatedPlaceholder" rows="1" :disabled="isLoading" @@ -50,10 +51,6 @@ :class="{ 'over-limit': isOverLimit }" > - -
- {{ characterCount }}/{{ maxLength }} -
@@ -142,12 +139,8 @@ export default { }; }, computed: { - characterCount() { - return this.localMessage.length; - }, - isOverLimit() { - return this.characterCount > this.maxLength; + return this.localMessage.length > this.maxLength; }, hasFormData() { @@ -239,12 +232,15 @@ export default { if (this.formData) { console.log('FormData bij mount:', JSON.stringify(this.formData)); } + // Herbereken bij viewport-wijziging (bv. rotatie op mobiel) + window.addEventListener('resize', this.autoResize, { passive: true }); }, beforeUnmount() { // Verwijder event listener bij unmount met de benoemde handler if (this.languageChangeHandler) { document.removeEventListener('language-changed', this.languageChangeHandler); } + window.removeEventListener('resize', this.autoResize); }, methods: { handleLanguageChange(event) { @@ -285,6 +281,8 @@ export default { } finally { // Reset de vertaling vlag this.isTranslating = false; + // Herbereken hoogte na vertaling + this.$nextTick(this.autoResize); } }, @@ -465,9 +463,9 @@ export default { .message-input { width: 100%; min-height: 40px; - padding: 10px 60px 10px 15px; /* Meer rechter padding voor character counter */ + padding: 10px 15px 10px 15px; /* counter verwijderd -> rechter padding omlaag */ border: 1px solid #ddd; - border-radius: 20px; + border-radius: 10px; resize: none; outline: none; transition: border-color 0.2s; @@ -478,35 +476,17 @@ export default { color: var(--human-message-text-color); /* Box-sizing om padding correct te berekenen */ box-sizing: border-box; + /* Laat intern scrollen toe bij >120px, maar verberg scrollbar visueel */ + overflow: auto; + -webkit-overflow-scrolling: touch; /* soepel scrollen op iOS */ + scrollbar-width: none; /* Firefox: verberg scrollbar */ } -/* Character counter */ -.character-counter { - position: absolute; - right: 15px; - bottom: 12px; - font-size: 12px; - color: var(--human-message-text-color); - opacity: 0.7; - pointer-events: none; /* Voorkom dat deze de textarea verstoort */ +/* WebKit/Chromium: scrollbar verbergen */ +.message-input::-webkit-scrollbar { + display: none; } -/* Character counter wordt rood bij overschrijding */ -.character-counter.over-limit { - color: #ff4d4f; - font-weight: bold; -} - -/* Verberg character counter op mobile */ -@media (max-width: 768px) { - .character-counter { - display: none; - } - - .message-input { - padding-right: 15px; /* Verminder van 60px naar 15px omdat counter weg is */ - } -} /* Input actions */ .input-actions { diff --git a/eveai_chat_client/static/assets/vue-components/ChatMessage.vue b/eveai_chat_client/static/assets/vue-components/ChatMessage.vue index 4291636..b206737 100644 --- a/eveai_chat_client/static/assets/vue-components/ChatMessage.vue +++ b/eveai_chat_client/static/assets/vue-components/ChatMessage.vue @@ -1,15 +1,15 @@