summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/pages/session/message-timeline.tsx
diff options
context:
space:
mode:
authorAdam <[email protected]>2026-02-12 09:49:14 -0600
committerGitHub <[email protected]>2026-02-12 09:49:14 -0600
commitff4414bb152acfddb5c0eb073c38bedc1df4ae14 (patch)
tree78381c67d21ef6f089647f6b19e7aa2976840dbc /packages/app/src/pages/session/message-timeline.tsx
parent56ad2db02055955f926fda0e4a89055b22ead6f9 (diff)
downloadopencode-ff4414bb152acfddb5c0eb073c38bedc1df4ae14.tar.gz
opencode-ff4414bb152acfddb5c0eb073c38bedc1df4ae14.zip
chore: refactor packages/app files (#13236)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com> Co-authored-by: Frank <[email protected]>
Diffstat (limited to 'packages/app/src/pages/session/message-timeline.tsx')
-rw-r--r--packages/app/src/pages/session/message-timeline.tsx78
1 files changed, 33 insertions, 45 deletions
diff --git a/packages/app/src/pages/session/message-timeline.tsx b/packages/app/src/pages/session/message-timeline.tsx
index a4ca06dd5..d5f04ccf9 100644
--- a/packages/app/src/pages/session/message-timeline.tsx
+++ b/packages/app/src/pages/session/message-timeline.tsx
@@ -9,6 +9,37 @@ import { SessionTurn } from "@opencode-ai/ui/session-turn"
import type { UserMessage } from "@opencode-ai/sdk/v2"
import { shouldMarkBoundaryGesture, normalizeWheelDelta } from "@/pages/session/message-gesture"
+const boundaryTarget = (root: HTMLElement, target: EventTarget | null) => {
+ const current = target instanceof Element ? target : undefined
+ const nested = current?.closest("[data-scrollable]")
+ if (!nested || nested === root) return root
+ if (!(nested instanceof HTMLElement)) return root
+ return nested
+}
+
+const markBoundaryGesture = (input: {
+ root: HTMLDivElement
+ target: EventTarget | null
+ delta: number
+ onMarkScrollGesture: (target?: EventTarget | null) => void
+}) => {
+ const target = boundaryTarget(input.root, input.target)
+ if (target === input.root) {
+ input.onMarkScrollGesture(input.root)
+ return
+ }
+ if (
+ shouldMarkBoundaryGesture({
+ delta: input.delta,
+ scrollTop: target.scrollTop,
+ scrollHeight: target.scrollHeight,
+ clientHeight: target.clientHeight,
+ })
+ ) {
+ input.onMarkScrollGesture(input.root)
+ }
+}
+
export function MessageTimeline(props: {
mobileChanges: boolean
mobileFallback: JSX.Element
@@ -86,35 +117,13 @@ export function MessageTimeline(props: {
ref={props.setScrollRef}
onWheel={(e) => {
const root = e.currentTarget
- const target = e.target instanceof Element ? e.target : undefined
- const nested = target?.closest("[data-scrollable]")
- if (!nested || nested === root) {
- props.onMarkScrollGesture(root)
- return
- }
-
- if (!(nested instanceof HTMLElement)) {
- props.onMarkScrollGesture(root)
- return
- }
-
const delta = normalizeWheelDelta({
deltaY: e.deltaY,
deltaMode: e.deltaMode,
rootHeight: root.clientHeight,
})
if (!delta) return
-
- if (
- shouldMarkBoundaryGesture({
- delta,
- scrollTop: nested.scrollTop,
- scrollHeight: nested.scrollHeight,
- clientHeight: nested.clientHeight,
- })
- ) {
- props.onMarkScrollGesture(root)
- }
+ markBoundaryGesture({ root, target: e.target, delta, onMarkScrollGesture: props.onMarkScrollGesture })
}}
onTouchStart={(e) => {
touchGesture = e.touches[0]?.clientY
@@ -129,28 +138,7 @@ export function MessageTimeline(props: {
if (!delta) return
const root = e.currentTarget
- const target = e.target instanceof Element ? e.target : undefined
- const nested = target?.closest("[data-scrollable]")
- if (!nested || nested === root) {
- props.onMarkScrollGesture(root)
- return
- }
-
- if (!(nested instanceof HTMLElement)) {
- props.onMarkScrollGesture(root)
- return
- }
-
- if (
- shouldMarkBoundaryGesture({
- delta,
- scrollTop: nested.scrollTop,
- scrollHeight: nested.scrollHeight,
- clientHeight: nested.clientHeight,
- })
- ) {
- props.onMarkScrollGesture(root)
- }
+ markBoundaryGesture({ root, target: e.target, delta, onMarkScrollGesture: props.onMarkScrollGesture })
}}
onTouchEnd={() => {
touchGesture = undefined