From e3e30a2b476accb84264684b70f49f82e9d9a15a Mon Sep 17 00:00:00 2001 From: Andrew Beal Date: Sat, 20 Dec 2025 01:34:41 +0000 Subject: [PATCH] fix: improve chat scroll calculation and conversation deletion handling - Use getOuterHeight helper for accurate element measurements including margins - Simplify gap calculation for thought and streaming indicators - Add top fade gradient to chat area for better visual polish - Queue AI file deletions to prevent blocking conversation deletion - Only trigger modal close callback when no conversation is active --- Components/ChatArea.svelte | 23 +++++++++++++++++------ Helpers/ElementHelper.ts | 5 +++++ Modals/ConversationHistoryModal.ts | 4 +++- Services/ConversationFileSystemService.ts | 6 ++++-- 4 files changed, 29 insertions(+), 9 deletions(-) create mode 100644 Helpers/ElementHelper.ts diff --git a/Components/ChatArea.svelte b/Components/ChatArea.svelte index 012a936..86d54a8 100644 --- a/Components/ChatArea.svelte +++ b/Components/ChatArea.svelte @@ -11,6 +11,7 @@ import { tick } from "svelte"; import { Selector } from "Enums/Selector"; import { Exception } from "Helpers/Exception"; + import { getOuterHeight } from "Helpers/ElementHelper"; export let cancelling: boolean = false; export let messages: ConversationContent[] = []; @@ -45,20 +46,19 @@ return; } + const gap = parseFloat(getComputedStyle(chatContainer).gap) || 0; const paddingTop = parseFloat(getComputedStyle(chatContainer).paddingTop) || 0; const paddingBottom = parseFloat(getComputedStyle(chatContainer).paddingBottom) || 0; const messageElement = messageElements.sort((a, b) => a.index - b.index)[messageElements.length - 1]; - let messageSpace = messageElement.element.offsetHeight; + let messageSpace = getOuterHeight(messageElement.element); if (!shouldSettle) { - const gap = parseFloat(getComputedStyle(chatContainer).gap) || 0; - if (thoughtIndicatorElement) { - messageSpace += thoughtIndicatorElement.offsetHeight + gap + gap; + messageSpace += getOuterHeight(thoughtIndicatorElement) + gap; } if (streamingIndicatorElement) { - messageSpace += streamingIndicatorElement.offsetHeight + gap + gap; + messageSpace += getOuterHeight(streamingIndicatorElement) + gap; } } @@ -247,6 +247,7 @@
+
{#each messages as message, index} {@const content = message.getDisplayContent()} {#if message.shouldDisplayContent && content.trim() !== ""} @@ -294,12 +295,22 @@