import type { AIMode } from "./workspace-mode"; export function createComposerFocusMemory() { const focused: Record = { chat: false, agents: false }; let previous: AIMode | undefined; return { record(mode: AIMode, isComposer: boolean) { focused[mode] = isComposer; }, activate(mode: AIMode, tabHasFocus: boolean) { const changed = previous !== mode; previous = mode; return changed && !tabHasFocus && focused[mode]; }, }; } interface ScrollContainer { scrollTop: number; scrollHeight: number; clientHeight: number; } export function createChatScrollMemory() { let savedTop = 0; let following = true; let wasActive = false; return { record(container: ScrollContainer, active: boolean) { if (!active) return; savedTop = container.scrollTop; following = container.scrollHeight - container.clientHeight - savedTop <= 48; }, update(container: ScrollContainer, active: boolean) { if (active) { if (!wasActive) container.scrollTop = savedTop; else if (following) container.scrollTop = Math.max( 0, container.scrollHeight - container.clientHeight, ); savedTop = container.scrollTop; following = container.scrollHeight - container.clientHeight - savedTop <= 48; } wasActive = active; }, }; }