summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src
diff options
context:
space:
mode:
authoradamelmore <[email protected]>2026-01-27 14:38:57 -0600
committeradamelmore <[email protected]>2026-01-27 15:25:06 -0600
commitd7948c2376ee2611bd64cc5ea1f787330313c2ef (patch)
tree0f3a18d8ba65c879384e8c814de73987c0a6007d /packages/app/src
parent892113ab39e233ec4c538558a9035de03ce6cadb (diff)
downloadopencode-d7948c2376ee2611bd64cc5ea1f787330313c2ef.tar.gz
opencode-d7948c2376ee2611bd64cc5ea1f787330313c2ef.zip
fix(app): auto-scroll
Diffstat (limited to 'packages/app/src')
-rw-r--r--packages/app/src/pages/session.tsx19
1 files changed, 16 insertions, 3 deletions
diff --git a/packages/app/src/pages/session.tsx b/packages/app/src/pages/session.tsx
index e75bd2fed..7257cdc11 100644
--- a/packages/app/src/pages/session.tsx
+++ b/packages/app/src/pages/session.tsx
@@ -524,6 +524,15 @@ export default function Page() {
const scrollGestureWindowMs = 250
+ const scrollIgnoreWindowMs = 250
+ let scrollIgnore = 0
+
+ const markScrollIgnore = () => {
+ scrollIgnore = Date.now()
+ }
+
+ const hasScrollIgnore = () => Date.now() - scrollIgnore < scrollIgnoreWindowMs
+
const markScrollGesture = (target?: EventTarget | null) => {
const root = scroller
if (!root) return
@@ -1341,7 +1350,9 @@ export default function Page() {
requestAnimationFrame(() => {
const delta = el.scrollHeight - beforeHeight
- if (delta) el.scrollTop = beforeTop + delta
+ if (!delta) return
+ markScrollIgnore()
+ el.scrollTop = beforeTop + delta
})
scheduleTurnBackfill()
@@ -1378,6 +1389,7 @@ export default function Page() {
if (stick && el) {
requestAnimationFrame(() => {
+ markScrollIgnore()
el.scrollTo({ top: el.scrollHeight, behavior: "auto" })
})
}
@@ -1779,8 +1791,9 @@ export default function Page() {
markScrollGesture(e.target)
}}
onScroll={(e) => {
- autoScroll.handleScroll()
- if (!hasScrollGesture()) return
+ const gesture = hasScrollGesture()
+ if (!hasScrollIgnore() || gesture) autoScroll.handleScroll()
+ if (!gesture) return
markScrollGesture(e.target)
if (isDesktop()) scheduleScrollSpy(e.currentTarget)
}}