From 1a4f428ef130daffd919000518577792749c30f6 Mon Sep 17 00:00:00 2001 From: Brendan Allan Date: Thu, 18 Jun 2026 09:35:48 +0200 Subject: [PATCH] fix(app): refine mobile session layout --- .../src/components/session/session-header.tsx | 34 ++++++----- packages/app/src/pages/session.tsx | 61 ++++++++++--------- .../session/timeline/message-timeline.tsx | 4 +- packages/ui/src/components/session-review.tsx | 2 +- 4 files changed, 57 insertions(+), 44 deletions(-) diff --git a/packages/app/src/components/session/session-header.tsx b/packages/app/src/components/session/session-header.tsx index db1990dfaa7..a65bc6491f1 100644 --- a/packages/app/src/components/session/session-header.tsx +++ b/packages/app/src/components/session/session-header.tsx @@ -10,6 +10,7 @@ import { Tooltip, TooltipKeybind } from "@opencode-ai/ui/tooltip" import { getFilename } from "@opencode-ai/core/util/path" import { createEffect, createMemo, createSignal, For, onMount, Show } from "solid-js" import { createStore } from "solid-js/store" +import { createMediaQuery } from "@solid-primitives/media" import { Portal } from "solid-js/web" import { useCommand } from "@/context/command" import { useLanguage } from "@/context/language" @@ -158,6 +159,7 @@ export function SessionHeader() { const isV2 = settings.general.newLayoutDesigns const search = settings.visibility.search const status = settings.visibility.status + const isDesktop = createMediaQuery("(min-width: 768px)") const [exists, setExists] = createStore>>({ finder: true, @@ -236,6 +238,7 @@ export function SessionHeader() { statusLabel: language.t("status.popover.trigger"), reviewLabel: language.t("command.review.toggle"), reviewKeybind: command.keybind("review.toggle"), + reviewVisible: isDesktop(), reviewOpened: view().reviewPanel.opened(), onReviewToggle: () => view().reviewPanel.toggle(), })) @@ -518,6 +521,7 @@ type SessionHeaderV2ActionsState = { statusLabel: string reviewLabel: string reviewKeybind: string + reviewVisible: boolean reviewOpened: boolean onReviewToggle: () => void } @@ -530,20 +534,22 @@ function SessionHeaderV2Actions(props: { state: SessionHeaderV2ActionsState }) { - - } - /> - + + + } + /> + + ) } diff --git a/packages/app/src/pages/session.tsx b/packages/app/src/pages/session.tsx index 72625a615fc..9371cdd9913 100644 --- a/packages/app/src/pages/session.tsx +++ b/packages/app/src/pages/session.tsx @@ -1570,40 +1570,42 @@ export default function Page() { /> ) + const mobileTabs = (compact = false) => ( + + + setStore("mobileTab", "session")} + > + {language.t("session.tab.session")} + + setStore("mobileTab", "changes")} + > + {hasReview() + ? language.t("session.review.filesChanged", { count: reviewCount() }) + : language.t("session.review.change.other")} + + + + ) + return (
{sessionSync() ?? ""}
- - - - setStore("mobileTab", "session")} - > - {language.t("session.tab.session")} - - setStore("mobileTab", "changes")} - > - {hasReview() - ? language.t("session.review.filesChanged", { count: reviewCount() }) - : language.t("session.review.change.other")} - - - - + {mobileTabs()}
+ + {mobileTabs(true)} +
@@ -1629,8 +1634,8 @@ export default function Page() { {reviewContent({ diffStyle: "unified", classes: { - root: "pb-8", - header: "px-4", + root: "pb-8 [&_[data-slot=session-review-list]]:pb-0", + header: "px-4 !h-16 !pb-4", container: "px-4", }, loadingClass: "px-4 py-4 text-text-weak", @@ -1686,7 +1691,7 @@ export default function Page() {
- {composerRegion("dock")} + {composerRegion("dock")}
diff --git a/packages/app/src/pages/session/timeline/message-timeline.tsx b/packages/app/src/pages/session/timeline/message-timeline.tsx index 5a26f178163..edb618e3d4a 100644 --- a/packages/app/src/pages/session/timeline/message-timeline.tsx +++ b/packages/app/src/pages/session/timeline/message-timeline.tsx @@ -1285,7 +1285,9 @@ export function MessageTimeline(props: { "sticky top-0 z-30 bg-[linear-gradient(to_bottom,var(--background-stronger)_48px,transparent)]": true, "w-full": true, "pb-4": true, - "pl-2 pr-3 md:pl-4 md:pr-3": true, + "pr-3": true, + "pl-4": settings.general.newLayoutDesigns(), + "pl-2 md:pl-4": !settings.general.newLayoutDesigns(), "md:max-w-200 md:mx-auto 2xl:max-w-[1000px]": props.centered, }} > diff --git a/packages/ui/src/components/session-review.tsx b/packages/ui/src/components/session-review.tsx index ebdd5d939ca..a7bd5e383a9 100644 --- a/packages/ui/src/components/session-review.tsx +++ b/packages/ui/src/components/session-review.tsx @@ -386,7 +386,7 @@ export const SessionReview = (props: SessionReviewProps) => { >
-
+
{(file) => {