@@ -19,11 +19,7 @@ import { DiffStatLabel, hasNonZeroStat } from "./DiffStatLabel";
1919import { PierreEntryIcon } from "./PierreEntryIcon" ;
2020import { Button } from "../ui/button" ;
2121import { Tooltip , TooltipPopup , TooltipTrigger } from "../ui/tooltip" ;
22- import {
23- changedFileName ,
24- selectChangedFilePreview ,
25- summarizeChangedFileScopes ,
26- } from "./changedFilesPresentation" ;
22+ import { changedFileName , selectChangedFilePreview } from "./changedFilesPresentation" ;
2723
2824const EMPTY_DIRECTORY_OVERRIDES : Record < string , boolean > = { } ;
2925
@@ -50,21 +46,20 @@ export const ChangedFilesCard = memo(function ChangedFilesCard(props: {
5046 onOpenTurnDiff,
5147 } = props ;
5248 const summaryStat = useMemo ( ( ) => summarizeTurnDiffStats ( files ) , [ files ] ) ;
53- const scopeSummary = useMemo ( ( ) => summarizeChangedFileScopes ( files ) , [ files ] ) ;
5449 const previewFiles = useMemo ( ( ) => selectChangedFilePreview ( files ) , [ files ] ) ;
5550 const compactPreviewVisible = showCompactPreview && ! expanded ;
5651
5752 return (
5853 < div
59- className = "@container/changed-files mt-4 rounded-2xl border border-border/70 bg-secondary p-2 dark:border-transparent dark:bg-input/32"
54+ className = "@container/changed-files mt-4 rounded-xl border border-border/70 bg-secondary p-1.5 dark:border-transparent dark:bg-input/32"
6055 data-changed-files-state = {
6156 expanded ? "expanded" : compactPreviewVisible ? "preview" : "collapsed"
6257 }
6358 >
6459 < div
6560 data-changed-files-header = ""
6661 className = { cn (
67- "flex items-center justify-between gap-2 rounded-xl " ,
62+ "flex items-center justify-between gap-2 rounded-lg px-1 " ,
6863 expanded &&
6964 "sticky top-2 z-10 mb-2 bg-secondary dark:bg-[color-mix(in_srgb,var(--foreground)_2.5%,var(--background))]" ,
7065 ) }
@@ -73,36 +68,31 @@ export const ChangedFilesCard = memo(function ChangedFilesCard(props: {
7368 type = "button"
7469 aria-expanded = { expanded }
7570 data-scroll-anchor-ignore
76- className = "group flex min-w-0 flex-1 items-center rounded-xl px-2 py-1.5 text-left transition-colors hover:bg-accent/60 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
71+ className = "flex min-w-0 items-center gap-1.5 rounded-md px-1 py-1 text-left transition-colors hover:bg-accent/60 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
7772 onClick = { ( ) => onExpandedChange ( ! expanded ) }
7873 >
79- < span className = "flex min-w-0 flex-1 items-center gap-1.5 overflow-hidden" >
80- < ChevronRightIcon
81- aria-hidden = "true"
82- className = { cn (
83- "size-3.5 shrink-0 text-muted-foreground transition-transform" ,
84- expanded && "rotate-90" ,
85- ) }
86- />
87- < span className = "flex shrink-0 items-center gap-1 whitespace-nowrap font-medium text-foreground text-xs leading-4" >
88- < span >
89- { files . length } changed file{ files . length === 1 ? "" : "s" }
90- </ span >
91- { hasNonZeroStat ( summaryStat ) && (
92- < DiffStatLabel
93- additions = { summaryStat . additions }
94- className = "text-xs leading-4"
95- deletions = { summaryStat . deletions }
96- layout = "inline"
97- />
98- ) }
99- </ span >
100- < span className = "ml-1 hidden min-w-0 flex-1 truncate text-[11px] text-muted-foreground group-hover:text-foreground/80 @[24rem]/changed-files:inline" >
101- { expanded ? "Hide files" : "Show files" }
74+ < ChevronRightIcon
75+ aria-hidden = "true"
76+ className = { cn (
77+ "size-3.5 shrink-0 text-muted-foreground transition-transform" ,
78+ expanded && "rotate-90" ,
79+ ) }
80+ />
81+ < span className = "flex shrink-0 items-center gap-1 whitespace-nowrap font-medium text-foreground text-xs leading-4" >
82+ < span >
83+ { files . length } changed file{ files . length === 1 ? "" : "s" }
10284 </ span >
85+ { hasNonZeroStat ( summaryStat ) && (
86+ < DiffStatLabel
87+ additions = { summaryStat . additions }
88+ className = "text-xs leading-4"
89+ deletions = { summaryStat . deletions }
90+ layout = "inline"
91+ />
92+ ) }
10393 </ span >
10494 </ button >
105- < div className = "flex shrink-0 items-center gap-1.5 pr-1 " >
95+ < div className = "flex shrink-0 items-center gap-1.5" >
10696 { expanded ? (
10797 < Tooltip >
10898 < TooltipTrigger
@@ -160,43 +150,35 @@ export const ChangedFilesCard = memo(function ChangedFilesCard(props: {
160150 onOpenTurnDiff = { onOpenTurnDiff }
161151 />
162152 ) : compactPreviewVisible ? (
163- < div className = "px-2 pb-1.5 pt-1" >
164- < p className = "flex flex-wrap items-center gap-x-1.5 gap-y-0.5 text-[11px] text-muted-foreground" >
165- { scopeSummary . map ( ( scope , index ) => (
166- < span key = { scope . label } className = "inline-flex items-center gap-1" >
167- { index > 0 ? < span aria-hidden = "true" > ·</ span > : null }
168- < span className = "font-mono text-foreground/75" > { scope . label } </ span >
169- < span >
170- { scope . fileCount } file{ scope . fileCount === 1 ? "" : "s" }
171- </ span >
172- </ span >
173- ) ) }
174- </ p >
175- < div className = "mt-2 flex flex-wrap items-center gap-1.5" >
153+ < div className = "px-1.5 pb-1 pt-0.5" >
154+ < div className = "flex min-w-0 items-center gap-x-3 overflow-hidden" >
176155 { previewFiles . map ( ( file ) => (
177156 < button
178157 key = { file . path }
179158 type = "button"
180159 title = { file . path }
181- className = "inline- flex max-w-48 items-center gap-1 rounded-md border border-border/70 bg-background/45 px-1.5 py-1 font-mono text-[10px] text-muted-foreground transition-colors hover:bg-accent/60 hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
160+ className = "group flex min-h-6 min-w-0 max-w-72 shrink items-center gap-1.5 rounded-md px-1 text-left transition-colors hover:bg-accent/45 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring"
182161 onClick = { ( ) => onOpenTurnDiff ( turnId , file . path ) }
183162 >
184163 < PierreEntryIcon
185164 pathValue = { file . path }
186165 kind = "file"
187166 theme = { resolvedTheme }
188- className = "size-3 shrink-0 text-muted-foreground/70"
167+ className = "size-3.5 shrink-0 text-muted-foreground/70"
189168 />
190- < span className = "truncate" > { changedFileName ( file . path ) } </ span >
169+ < span className = "min-w-0 truncate font-mono text-xs text-foreground/75 group-hover:text-foreground" >
170+ { changedFileName ( file . path ) }
171+ </ span >
172+ { hasNonZeroStat ( file ) ? (
173+ < DiffStatLabel
174+ additions = { file . additions }
175+ deletions = { file . deletions }
176+ layout = "inline"
177+ className = "shrink-0 text-[10px]"
178+ />
179+ ) : null }
191180 </ button >
192181 ) ) }
193- < button
194- type = "button"
195- className = "rounded-md px-1.5 py-1 text-[11px] font-medium text-muted-foreground transition-colors hover:bg-accent/60 hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
196- onClick = { ( ) => onExpandedChange ( true ) }
197- >
198- Show all { files . length } files
199- </ button >
200182 </ div >
201183 </ div >
202184 ) : null }
@@ -272,11 +254,11 @@ export const ChangedFilesTree = memo(function ChangedFilesTree(props: {
272254 ) : (
273255 < FolderClosedIcon className = "size-3.5 shrink-0 text-muted-foreground/75" />
274256 ) }
275- < span className = "truncate font-mono text-[11px] text-muted-foreground/90 group-hover:text-foreground/90" >
257+ < span className = "min-w-0 truncate font-mono text-[11px] text-muted-foreground/90 group-hover:text-foreground/90" >
276258 { node . name }
277259 </ span >
278260 { hasNonZeroStat ( node . stat ) && (
279- < span className = "ml-auto shrink-0 font-mono text-[10px] tabular-nums" >
261+ < span className = "ml-1 shrink-0 font-mono text-[10px] tabular-nums" >
280262 < DiffStatLabel additions = { node . stat . additions } deletions = { node . stat . deletions } />
281263 </ span >
282264 ) }
@@ -307,11 +289,11 @@ export const ChangedFilesTree = memo(function ChangedFilesTree(props: {
307289 theme = { resolvedTheme }
308290 className = "size-3.5 text-muted-foreground/70"
309291 />
310- < span className = "truncate font-mono text-[11px] text-muted-foreground/80 group-hover:text-foreground/90" >
292+ < span className = "min-w-0 truncate font-mono text-[11px] text-muted-foreground/80 group-hover:text-foreground/90" >
311293 { node . name }
312294 </ span >
313295 { node . stat && (
314- < span className = "ml-auto shrink-0 font-mono text-[10px] tabular-nums" >
296+ < span className = "ml-1 shrink-0 font-mono text-[10px] tabular-nums" >
315297 < DiffStatLabel additions = { node . stat . additions } deletions = { node . stat . deletions } />
316298 </ span >
317299 ) }
0 commit comments