feat(chat): add scroll position memory per conversation (M8.10)

Save scroll position when switching conversations, restore it when
returning. Uses a session-only Map<conversationId, scrollTop>.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Dorian
2026-03-03 23:15:57 +00:00
co-authored by Claude Opus 4.6
parent cc5ecf3091
commit 71a249c08a
@@ -137,6 +137,27 @@ const codeContext = useCodeContext()
const messageListRef = ref<HTMLElement | null>(null)
const chatSearchRef = ref<InstanceType<typeof ChatSearch> | null>(null)
// Scroll position memory per conversation
const scrollPositions = new Map<string, number>()
function saveScrollPosition() {
const el = messageListRef.value
const id = chatStore.activeConversationId
if (el && id) {
scrollPositions.set(id, el.scrollTop)
}
}
function restoreScrollPosition(convId: string) {
const saved = scrollPositions.get(convId)
if (saved !== undefined) {
nextTick(() => {
const el = messageListRef.value
if (el) el.scrollTop = saved
})
}
}
function scrollToMessageIndex(index: number) {
virtualizer.value.scrollToIndex(index, { align: 'center' })
}
@@ -313,6 +334,15 @@ function scrollToBottom() {
})
}
// Save/restore scroll position on conversation switch
watch(
() => chatStore.activeConversationId,
(newId, oldId) => {
if (oldId) saveScrollPosition()
if (newId) restoreScrollPosition(newId)
}
)
watch(
() => messages.value.length,
() => scrollToBottom()