diff --git a/apps/web/src/components/DiffPanel.tsx b/apps/web/src/components/DiffPanel.tsx index 34ad78881..b9d1edb94 100644 --- a/apps/web/src/components/DiffPanel.tsx +++ b/apps/web/src/components/DiffPanel.tsx @@ -3,7 +3,13 @@ import { FileDiff, type FileDiffMetadata, Virtualizer } from "@pierre/diffs/reac import { useQuery } from "@tanstack/react-query"; import { useNavigate, useParams, useSearch } from "@tanstack/react-router"; import { ThreadId, type TurnId } from "@t3tools/contracts"; -import { ChevronLeftIcon, ChevronRightIcon, Columns2Icon, Rows3Icon } from "lucide-react"; +import { + ChevronLeftIcon, + ChevronRightIcon, + Columns2Icon, + Rows3Icon, + WrapTextIcon, +} from "lucide-react"; import { type WheelEvent as ReactWheelEvent, useCallback, @@ -30,6 +36,7 @@ import { DiffPanelLoadingState, DiffPanelShell, type DiffPanelMode } from "./Dif import { ToggleGroup, Toggle } from "./ui/toggle-group"; type DiffRenderMode = "stacked" | "split"; +type DiffOverflowMode = "scroll" | "wrap"; type DiffThemeType = "light" | "dark"; const DIFF_PANEL_UNSAFE_CSS = ` @@ -162,6 +169,7 @@ export default function DiffPanel({ mode = "inline" }: DiffPanelProps) { const { resolvedTheme } = useTheme(); const { settings } = useAppSettings(); const [diffRenderMode, setDiffRenderMode] = useState("stacked"); + const [diffOverflowMode, setDiffOverflowMode] = useState("scroll"); const patchViewportRef = useRef(null); const turnStripRef = useRef(null); const [canScrollTurnStripLeft, setCanScrollTurnStripLeft] = useState(false); @@ -509,6 +517,18 @@ export default function DiffPanel({ mode = "inline" }: DiffPanelProps) { + { + setDiffOverflowMode(pressed ? "wrap" : "scroll"); + }} + > + + ); @@ -584,6 +604,7 @@ export default function DiffPanel({ mode = "inline" }: DiffPanelProps) { lineDiffType: "none", theme: resolveDiffThemeName(resolvedTheme), themeType: resolvedTheme as DiffThemeType, + overflow: diffOverflowMode === "wrap" ? "wrap" : "scroll", unsafeCSS: DIFF_PANEL_UNSAFE_CSS, }} />