fix(app): auto-scroll

This commit is contained in:
Adam
2026-01-22 06:51:17 -06:00
parent aa17729008
commit 09997bb6c8

View File

@@ -381,6 +381,22 @@ export default function Page() {
let promptDock: HTMLDivElement | undefined
let scroller: HTMLDivElement | undefined
const [scrollGesture, setScrollGesture] = createSignal(0)
const scrollGestureWindowMs = 250
const markScrollGesture = (target?: EventTarget | null) => {
const root = scroller
if (!root) return
const el = target instanceof Element ? target : undefined
const nested = el?.closest("[data-scrollable]")
if (nested && nested !== root) return
setScrollGesture(Date.now())
}
const hasScrollGesture = () => Date.now() - scrollGesture() < scrollGestureWindowMs
createEffect(() => {
if (!params.id) return
sync.session.sync(params.id)
@@ -795,6 +811,12 @@ export default function Page() {
// Don't autofocus chat if terminal panel is open
if (view().terminal.opened()) return
// Only treat explicit scroll keys as potential "user scroll" gestures.
if (event.key === "PageUp" || event.key === "PageDown" || event.key === "Home" || event.key === "End") {
markScrollGesture()
return
}
if (event.key.length === 1 && event.key !== "Unidentified" && !(event.ctrlKey || event.metaKey)) {
inputRef?.focus()
}
@@ -1385,7 +1407,15 @@ export default function Page() {
</div>
<div
ref={setScrollRef}
onWheel={(e) => markScrollGesture(e.target)}
onTouchMove={(e) => markScrollGesture(e.target)}
onPointerDown={(e) => {
if (e.target !== e.currentTarget) return
markScrollGesture(e.target)
}}
onScroll={(e) => {
if (!hasScrollGesture()) return
setScrollGesture(Date.now())
autoScroll.handleScroll()
if (isDesktop() && autoScroll.userScrolled()) scheduleScrollSpy(e.currentTarget)
}}