summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAdam <[email protected]>2026-03-09 07:49:01 -0500
committerAdam <[email protected]>2026-03-09 07:49:11 -0500
commit0243be86a7b548fd6daf421d39bd3c36ca76246b (patch)
tree9174e363335c22cb5262a7247ee3e57addfa267e
parent9154cd64e7256cadc50cd10334eee8f193a31527 (diff)
downloadopencode-0243be86a7b548fd6daf421d39bd3c36ca76246b.tar.gz
opencode-0243be86a7b548fd6daf421d39bd3c36ca76246b.zip
fix(app): don't animate review panel in/out
-rw-r--r--packages/app/src/pages/session.tsx20
-rw-r--r--packages/app/src/pages/session/session-side-panel.tsx3
2 files changed, 21 insertions, 2 deletions
diff --git a/packages/app/src/pages/session.tsx b/packages/app/src/pages/session.tsx
index 3f5da0c94..35e89eabe 100644
--- a/packages/app/src/pages/session.tsx
+++ b/packages/app/src/pages/session.tsx
@@ -285,6 +285,7 @@ export default function Page() {
const [ui, setUi] = createStore({
git: false,
pendingMessage: undefined as string | undefined,
+ reviewSnap: false,
scrollGesture: 0,
scroll: {
overflow: false,
@@ -460,6 +461,21 @@ export default function Page() {
return key
}, sessionKey())
+ let reviewFrame: number | undefined
+
+ createComputed((prev) => {
+ const open = desktopReviewOpen()
+ if (prev === undefined || prev === open) return open
+
+ if (reviewFrame !== undefined) cancelAnimationFrame(reviewFrame)
+ setUi("reviewSnap", true)
+ reviewFrame = requestAnimationFrame(() => {
+ reviewFrame = undefined
+ setUi("reviewSnap", false)
+ })
+ return open
+ }, desktopReviewOpen())
+
const turnDiffs = createMemo(() => lastUserMessage()?.summary?.diffs ?? [])
const reviewDiffs = createMemo(() => (store.changes === "session" ? diffs() : turnDiffs()))
@@ -1233,6 +1249,7 @@ export default function Page() {
onCleanup(() => {
document.removeEventListener("keydown", handleKeyDown)
scrollSpy.destroy()
+ if (reviewFrame !== undefined) cancelAnimationFrame(reviewFrame)
if (scrollStateFrame !== undefined) cancelAnimationFrame(scrollStateFrame)
})
@@ -1254,7 +1271,7 @@ export default function Page() {
classList={{
"@container relative shrink-0 flex flex-col min-h-0 h-full bg-background-stronger flex-1 md:flex-none": true,
"transition-[width] duration-[240ms] ease-[cubic-bezier(0.22,1,0.36,1)] will-change-[width] motion-reduce:transition-none":
- !size.active(),
+ !size.active() && !ui.reviewSnap,
}}
style={{
width: sessionPanelWidth(),
@@ -1369,6 +1386,7 @@ export default function Page() {
reviewPanel={reviewPanel}
activeDiff={tree.activeDiff}
focusReviewDiff={focusReviewDiff}
+ reviewSnap={ui.reviewSnap}
size={size}
/>
</div>
diff --git a/packages/app/src/pages/session/session-side-panel.tsx b/packages/app/src/pages/session/session-side-panel.tsx
index a5e067c6f..590f5b6d9 100644
--- a/packages/app/src/pages/session/session-side-panel.tsx
+++ b/packages/app/src/pages/session/session-side-panel.tsx
@@ -31,6 +31,7 @@ export function SessionSidePanel(props: {
reviewPanel: () => JSX.Element
activeDiff?: string
focusReviewDiff: (path: string) => void
+ reviewSnap: boolean
size: Sizing
}) {
const params = useParams()
@@ -228,7 +229,7 @@ export function SessionSidePanel(props: {
classList={{
"pointer-events-none": !open(),
"transition-[width] duration-[240ms] ease-[cubic-bezier(0.22,1,0.36,1)] will-change-[width] motion-reduce:transition-none":
- !props.size.active(),
+ !props.size.active() && !props.reviewSnap,
}}
style={{ width: panelWidth() }}
>