diff options
| author | Adam <[email protected]> | 2025-12-31 09:23:24 -0600 |
|---|---|---|
| committer | Adam <[email protected]> | 2025-12-31 09:23:24 -0600 |
| commit | 2ec6a21cc0018be6677e4cbad6bf48dbf8b37786 (patch) | |
| tree | 6ad3f27288f660b4bba43772075c5138764f25b3 /packages/ui/src/components/session-review.tsx | |
| parent | ebf5ad25c5f5cdf42bcb93199d9913f260ebe767 (diff) | |
| download | opencode-2ec6a21cc0018be6677e4cbad6bf48dbf8b37786.tar.gz opencode-2ec6a21cc0018be6677e4cbad6bf48dbf8b37786.zip | |
feat(desktop): unified diff toggle
Diffstat (limited to 'packages/ui/src/components/session-review.tsx')
| -rw-r--r-- | packages/ui/src/components/session-review.tsx | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/packages/ui/src/components/session-review.tsx b/packages/ui/src/components/session-review.tsx index 9162b5216..9e6c633f4 100644 --- a/packages/ui/src/components/session-review.tsx +++ b/packages/ui/src/components/session-review.tsx @@ -1,5 +1,6 @@ import { Accordion } from "./accordion" import { Button } from "./button" +import { RadioGroup } from "./radio-group" import { DiffChanges } from "./diff-changes" import { FileIcon } from "./file-icon" import { Icon } from "./icon" @@ -13,8 +14,12 @@ import { PreloadMultiFileDiffResult } from "@pierre/diffs/ssr" import { Dynamic } from "solid-js/web" import { checksum } from "@opencode-ai/util/encode" +export type SessionReviewDiffStyle = "unified" | "split" + export interface SessionReviewProps { split?: boolean + diffStyle?: SessionReviewDiffStyle + onDiffStyleChange?: (diffStyle: SessionReviewDiffStyle) => void class?: string classList?: Record<string, boolean | undefined> classes?: { root?: string; header?: string; container?: string } @@ -28,6 +33,8 @@ export const SessionReview = (props: SessionReviewProps) => { open: props.diffs.length > 10 ? [] : props.diffs.map((d) => d.file), }) + const diffStyle = () => props.diffStyle ?? (props.split ? "split" : "unified") + const handleChange = (open: string[]) => { setStore("open", open) } @@ -60,6 +67,15 @@ export const SessionReview = (props: SessionReviewProps) => { > <div data-slot="session-review-title">Session changes</div> <div data-slot="session-review-actions"> + <Show when={props.onDiffStyleChange}> + <RadioGroup + options={["unified", "split"] as const} + current={diffStyle()} + value={(style) => style} + label={(style) => (style === "unified" ? "Unified" : "Split")} + onSelect={(style) => style && props.onDiffStyleChange?.(style)} + /> + </Show> <Button size="normal" icon="chevron-grabber-vertical" onClick={handleExpandOrCollapseAll}> <Switch> <Match when={store.open.length > 0}>Collapse all</Match> @@ -102,7 +118,7 @@ export const SessionReview = (props: SessionReviewProps) => { <Dynamic component={diffComponent} preloadedDiff={diff.preloaded} - diffStyle={props.split ? "split" : "unified"} + diffStyle={diffStyle()} before={{ name: diff.file!, contents: diff.before!, |
