diff options
| author | Filip <[email protected]> | 2026-02-25 15:57:13 +0100 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-02-25 08:57:13 -0600 |
| commit | 45191ad144f6546c051fb3a94f9f3cb1e2c00ed3 (patch) | |
| tree | 3bc16bef606b64c42f656fc59838baa2d204cbda | |
| parent | 286992269623bcb410f0de89e128ff14361d5e97 (diff) | |
| download | opencode-45191ad144f6546c051fb3a94f9f3cb1e2c00ed3.tar.gz opencode-45191ad144f6546c051fb3a94f9f3cb1e2c00ed3.zip | |
fix(app): keyboard navigation previous/next message (#15047)
| -rw-r--r-- | packages/app/src/pages/session.tsx | 11 | ||||
| -rw-r--r-- | packages/app/src/pages/session/message-timeline.tsx | 1 | ||||
| -rw-r--r-- | packages/app/src/pages/session/use-session-hash-scroll.ts | 4 |
3 files changed, 10 insertions, 6 deletions
diff --git a/packages/app/src/pages/session.tsx b/packages/app/src/pages/session.tsx index e0ef92682..2e440a6b0 100644 --- a/packages/app/src/pages/session.tsx +++ b/packages/app/src/pages/session.tsx @@ -254,12 +254,13 @@ export default function Page() { const msgs = visibleUserMessages() if (msgs.length === 0) return - const current = activeMessage() - const currentIndex = current ? msgs.findIndex((m) => m.id === current.id) : -1 - const targetIndex = currentIndex === -1 ? (offset > 0 ? 0 : msgs.length - 1) : currentIndex + offset - if (targetIndex < 0 || targetIndex >= msgs.length) return + const current = store.messageId + const base = current ? msgs.findIndex((m) => m.id === current) : msgs.length + const currentIndex = base === -1 ? msgs.length : base + const targetIndex = currentIndex + offset + if (targetIndex < 0 || targetIndex > msgs.length) return - if (targetIndex === msgs.length - 1) { + if (targetIndex === msgs.length) { resumeScroll() return } diff --git a/packages/app/src/pages/session/message-timeline.tsx b/packages/app/src/pages/session/message-timeline.tsx index 615d1a0be..b84109035 100644 --- a/packages/app/src/pages/session/message-timeline.tsx +++ b/packages/app/src/pages/session/message-timeline.tsx @@ -376,6 +376,7 @@ export function MessageTimeline(props: { > <Show when={showHeader()}> <div + data-session-title classList={{ "sticky top-0 z-30 bg-[linear-gradient(to_bottom,var(--background-stronger)_48px,transparent)]": true, "w-full": true, diff --git a/packages/app/src/pages/session/use-session-hash-scroll.ts b/packages/app/src/pages/session/use-session-hash-scroll.ts index 555761ad1..b704e460b 100644 --- a/packages/app/src/pages/session/use-session-hash-scroll.ts +++ b/packages/app/src/pages/session/use-session-hash-scroll.ts @@ -45,7 +45,9 @@ export const useSessionHashScroll = (input: { const a = el.getBoundingClientRect() const b = root.getBoundingClientRect() - const top = a.top - b.top + root.scrollTop + const sticky = root.querySelector("[data-session-title]") + const inset = sticky instanceof HTMLElement ? sticky.offsetHeight : 0 + const top = Math.max(0, a.top - b.top + root.scrollTop - inset) root.scrollTo({ top, behavior }) return true } |
