) {
"children",
"closeButton",
"hideCloseButton",
+ "onMiddleClick",
])
return (
) {
...(split.classList ?? {}),
[split.class ?? ""]: !!split.class,
}}
+ onAuxClick={(e) => {
+ if (e.button === 1 && split.onMiddleClick) {
+ e.preventDefault()
+ split.onMiddleClick()
+ }
+ }}
>
Date: Tue, 6 Jan 2026 18:27:22 +0200
Subject: [PATCH 22/55] fix(app): open review sidebar when selecting file from
picker (#7096)
---
packages/app/src/components/dialog-select-file.tsx | 1 +
1 file changed, 1 insertion(+)
diff --git a/packages/app/src/components/dialog-select-file.tsx b/packages/app/src/components/dialog-select-file.tsx
index 8e68a3eb805..9e3bbeddd05 100644
--- a/packages/app/src/components/dialog-select-file.tsx
+++ b/packages/app/src/components/dialog-select-file.tsx
@@ -27,6 +27,7 @@ export function DialogSelectFile() {
const value = file.tab(path)
tabs().open(value)
file.load(path)
+ layout.review.open()
}
dialog.close()
}}
From 6092f8792edab800dbde6fdfb494100fa3a923d5 Mon Sep 17 00:00:00 2001
From: Justas Raudonius <10882793+justrau@users.noreply.github.com>
Date: Tue, 6 Jan 2026 18:28:03 +0200
Subject: [PATCH 23/55] feat(app): add view button to open files from review
sidebar (#7095)
---
packages/app/src/pages/session.tsx | 12 ++++++++++
packages/ui/src/components/icon.tsx | 1 +
packages/ui/src/components/session-review.css | 24 +++++++++++++++++++
packages/ui/src/components/session-review.tsx | 13 ++++++++++
4 files changed, 50 insertions(+)
diff --git a/packages/app/src/pages/session.tsx b/packages/app/src/pages/session.tsx
index 7221ebe867d..853d3a894ce 100644
--- a/packages/app/src/pages/session.tsx
+++ b/packages/app/src/pages/session.tsx
@@ -58,6 +58,7 @@ interface SessionReviewTabProps {
view: () => ReturnType["view"]>
diffStyle: DiffStyle
onDiffStyleChange?: (style: DiffStyle) => void
+ onViewFile?: (file: string) => void
classes?: {
root?: string
header?: string
@@ -137,6 +138,7 @@ function SessionReviewTab(props: SessionReviewTabProps) {
diffs={props.diffs()}
diffStyle={props.diffStyle}
onDiffStyleChange={props.onDiffStyleChange}
+ onViewFile={props.onViewFile}
/>
)
}
@@ -818,6 +820,11 @@ export default function Page() {
diffs={diffs}
view={view}
diffStyle="unified"
+ onViewFile={(path) => {
+ const value = file.tab(path)
+ tabs().open(value)
+ file.load(path)
+ }}
classes={{
root: "pb-[calc(var(--prompt-height,8rem)+32px)]",
header: "px-4",
@@ -1028,6 +1035,11 @@ export default function Page() {
view={view}
diffStyle={layout.review.diffStyle()}
onDiffStyleChange={layout.review.setDiffStyle}
+ onViewFile={(path) => {
+ const value = file.tab(path)
+ tabs().open(value)
+ file.load(path)
+ }}
/>
diff --git a/packages/ui/src/components/icon.tsx b/packages/ui/src/components/icon.tsx
index 17aa1bbd5ea..25d4b4f36f5 100644
--- a/packages/ui/src/components/icon.tsx
+++ b/packages/ui/src/components/icon.tsx
@@ -23,6 +23,7 @@ const icons = {
"code-lines": ``,
"circle-ban-sign": ``,
"edit-small-2": ``,
+ eye: ``,
enter: ``,
folder: ``,
"magnifying-glass": ``,
diff --git a/packages/ui/src/components/session-review.css b/packages/ui/src/components/session-review.css
index e16c0eeb62b..eb6ddb44158 100644
--- a/packages/ui/src/components/session-review.css
+++ b/packages/ui/src/components/session-review.css
@@ -106,6 +106,30 @@
flex-shrink: 0;
}
+ [data-slot="session-review-view-button"] {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ padding: 2px;
+ margin-left: 8px;
+ border: none;
+ background: transparent;
+ color: var(--text-base);
+ cursor: pointer;
+ border-radius: 4px;
+ opacity: 0;
+ transition: opacity 0.15s ease;
+
+ &:hover {
+ color: var(--text-strong);
+ background: var(--surface-base);
+ }
+ }
+
+ [data-slot="accordion-trigger"]:hover [data-slot="session-review-view-button"] {
+ opacity: 1;
+ }
+
[data-slot="session-review-trigger-actions"] {
flex-shrink: 0;
display: flex;
diff --git a/packages/ui/src/components/session-review.tsx b/packages/ui/src/components/session-review.tsx
index e11df6c9fa4..be5181a985f 100644
--- a/packages/ui/src/components/session-review.tsx
+++ b/packages/ui/src/components/session-review.tsx
@@ -28,6 +28,7 @@ export interface SessionReviewProps {
classes?: { root?: string; header?: string; container?: string }
actions?: JSX.Element
diffs: (FileDiff & { preloaded?: PreloadMultiFileDiffResult })[]
+ onViewFile?: (file: string) => void
}
export const SessionReview = (props: SessionReviewProps) => {
@@ -107,6 +108,18 @@ export const SessionReview = (props: SessionReviewProps) => {
{getDirectory(diff.file)}
{getFilename(diff.file)}
+
+
+