From cf9d65232fbb65e7fd659078958306b87da721e9 Mon Sep 17 00:00:00 2001 From: Andrew Beal Date: Sun, 26 Oct 2025 01:16:51 +0100 Subject: [PATCH] Replace textarea with contenteditable div for input field Refactor input field from HTMLTextAreaElement to contenteditable div to enable better text formatting support. Update event handlers, styling, and auto-resize logic accordingly. --- Components/ChatWindow.svelte | 56 +++++++++++++++++++++++++++++------- 1 file changed, 45 insertions(+), 11 deletions(-) diff --git a/Components/ChatWindow.svelte b/Components/ChatWindow.svelte index b24065e..df4710b 100644 --- a/Components/ChatWindow.svelte +++ b/Components/ChatWindow.svelte @@ -18,7 +18,7 @@ let workSpaceService: WorkSpaceService = Resolve(Services.WorkSpaceService); let conversationService: ConversationFileSystemService = Resolve(Services.ConversationFileSystemService); - let textareaElement: HTMLTextAreaElement; + let textareaElement: HTMLDivElement; let chatContainer: HTMLDivElement; let submitButton: HTMLButtonElement; let editModeButton: HTMLButtonElement; @@ -105,7 +105,7 @@ const currentRequest = userRequest; - textareaElement.value = ""; + textareaElement.textContent = ""; userRequest = ""; autoResize(); @@ -140,10 +140,22 @@ } } + function handleInput() { + if (textareaElement) { + userRequest = textareaElement.textContent || ""; + if (userRequest.trim() === "") { + textareaElement.textContent = ""; + } + autoResize(); + } + } + function autoResize() { if (textareaElement) { - textareaElement.style.height = 'auto'; - textareaElement.style.height = textareaElement.scrollHeight + 'px'; + // For contenteditable divs, reset height and set to scrollHeight + textareaElement.style.height = "auto"; + const newHeight = Math.min(textareaElement.scrollHeight, window.innerHeight * 0.3); + textareaElement.style.height = `${newHeight}px`; } } @@ -191,17 +203,19 @@
- + on:input={handleInput} + data-placeholder="Type a message..." + role="textbox" + aria-multiline="true" + tabindex="0"> +