From e86ec98711256cd400e62ccdc85b0ee896b04065 Mon Sep 17 00:00:00 2001 From: usrnk1 <7547651+usrnk1@users.noreply.github.com> Date: Mon, 5 Oct 2026 05:18:48 +0200 Subject: [PATCH] feat(desktop): move review controls into their panels (#51312) Co-authored-by: Luke Parker <10430890+Hona@users.noreply.github.com> --- packages/app/e2e/regression/review.spec.ts | 26 +++++++ .../app/src/runtime/extension/side-region.tsx | 8 -- packages/gui-extensions/src/file/browser.tsx | 18 ++++- packages/gui-extensions/src/file/context.ts | 8 ++ packages/gui-extensions/src/file/contract.ts | 14 ++++ packages/gui-extensions/src/file/index.ts | 4 +- .../gui-extensions/src/file/open-in-app.tsx | 20 ++--- packages/gui-extensions/src/file/renderer.tsx | 73 ++++++++++++++++--- packages/gui-extensions/src/review/index.ts | 7 +- packages/gui-extensions/src/review/panel.tsx | 17 +++++ packages/gui-extensions/src/review/parts.tsx | 36 +++++++-- packages/gui-extensions/src/sdk/points.ts | 2 - packages/gui-extensions/src/sdk/solid.ts | 2 +- .../v2/components/session-file-panel-v2.tsx | 11 ++- .../src/v2/components/session-review-v2.css | 37 +++++++++- .../src/v2/components/session-review-v2.tsx | 18 ++++- packages/ui/src/navigation/tabs/tabs.css | 51 +------------ 17 files changed, 252 insertions(+), 100 deletions(-) diff --git a/packages/app/e2e/regression/review.spec.ts b/packages/app/e2e/regression/review.spec.ts index c6a879e0f09..b2f35e1d186 100644 --- a/packages/app/e2e/regression/review.spec.ts +++ b/packages/app/e2e/regression/review.spec.ts @@ -833,6 +833,32 @@ test("a chosen mode the session stops offering shows as Git, and comes back when await expect(file).toHaveText("beta.ts") }) +test("names a single change source and keeps the review header rows at 48px", async ({ page }) => { + // Turn changes are offered only for Git, so another VCS offers one source. + await openSession(page, { name: "ReviewHeader", project: { vcs: "hg" }, vcsDiff: [fileDiff("src/alpha.ts")] }) + await page.getByRole("button", { name: "Toggle review", exact: true }).click() + const panel = page.locator("#review-panel") + const toggle = panel.getByRole("button", { name: "Toggle file tree" }) + const header = panel.locator('[data-slot="session-review-v2-sidebar-header"]') + const toolbar = panel.locator('[data-slot="session-review-v2-toolbar"]') + + await expect(header.getByText("Git changes", { exact: true })).toBeVisible() + await expect(panel.getByRole("button", { name: "Git changes" })).toHaveCount(0) + await expect(toggle).toHaveAttribute("aria-expanded", "true") + await expect(header).toHaveCSS("height", "48px") + await expect(toolbar).toHaveCSS("height", "48px") + + await toggle.click() + await expect(toggle).toHaveAttribute("aria-expanded", "false") + await expect(toolbar.getByText("Git changes", { exact: true })).toBeVisible() + await expect(toolbar).toHaveCSS("height", "48px") + + await toggle.click() + await expect(toggle).toHaveAttribute("aria-expanded", "true") + await expect(header).toHaveCSS("height", "48px") + await expect(toolbar).toHaveCSS("height", "48px") +}) + for (const direction of ["ltr", "rtl"] as const) { test(`review toggle stays at the header edge in ${direction}`, async ({ page }) => { await page.setViewportSize({ width: 1000, height: 900 }) diff --git a/packages/app/src/runtime/extension/side-region.tsx b/packages/app/src/runtime/extension/side-region.tsx index 309e89db73d..62d1ecb378e 100644 --- a/packages/app/src/runtime/extension/side-region.tsx +++ b/packages/app/src/runtime/extension/side-region.tsx @@ -14,7 +14,6 @@ import { Mark } from "@opencode/ui/logo" import { Keybind } from "@opencode/ui/keybind" import { Tooltip } from "@opencode/ui/tooltip" import { Menu } from "@opencode/ui/menu" -import { SessionReviewV2SidebarToggle } from "@opencode/session-ui/v2/session-review-v2" import { MenuItem, type MountedSession, @@ -160,13 +159,6 @@ export function SideRegion(props: { onCleanup(createTabStripScroll({ el, lead: props.region.lead })) }} > -