Fix worktree card border-radius for multi-selected state (#5058)

This commit is contained in:
Brennan Benson 2026-06-09 16:51:11 -07:00 committed by GitHub
parent 25e0877b23
commit 0f8ec54c28
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 87 additions and 21 deletions

View File

@ -121,7 +121,11 @@ function RepoIdentityChip({
<TooltipTrigger asChild>
<span
className="inline-flex size-4 shrink-0 items-center justify-center rounded-[4px] border border-worktree-sidebar-border bg-worktree-sidebar-accent/55"
aria-label={translate("auto.components.sidebar.WorktreeCard.35ccfe2475", "Project {{value0}}", { value0: repo.displayName })}
aria-label={translate(
'auto.components.sidebar.WorktreeCard.35ccfe2475',
'Project {{value0}}',
{ value0: repo.displayName }
)}
>
{children}
</span>
@ -808,7 +812,7 @@ const WorktreeCard = React.memo(function WorktreeCard({
className={cn(
'group relative flex items-start gap-0.5 pl-0 pr-1.5 pt-1.5 pb-2 cursor-pointer transition-[background-color,border-color,opacity,box-shadow] duration-200 outline-none select-none',
flushSurface ? 'ml-1 w-[calc(100%-0.25rem)]' : 'ml-1',
isMultiSelected ? 'rounded-sm' : 'rounded-lg',
'rounded-lg',
isActiveSurface
? 'bg-black/[0.08] shadow-[0_1px_2px_rgba(0,0,0,0.04)] border border-black/[0.015] dark:bg-white/[0.10] dark:border-border/40 dark:shadow-[0_1px_2px_rgba(0,0,0,0.03)]'
: isMultiSelected
@ -837,7 +841,8 @@ const WorktreeCard = React.memo(function WorktreeCard({
<div className="absolute inset-0 z-10 flex items-center justify-center rounded-lg bg-background/50 backdrop-blur-[1px]">
<div className="inline-flex items-center gap-1.5 rounded-full bg-background px-3 py-1 text-[11px] font-medium text-foreground shadow-sm border border-border/50">
<LoaderCircle className="size-3.5 animate-spin text-muted-foreground" />
{translate("auto.components.sidebar.WorktreeCard.691ccfd622", "Deleting…")}</div>
{translate('auto.components.sidebar.WorktreeCard.691ccfd622', 'Deleting…')}
</div>
</div>
)}
@ -890,7 +895,15 @@ const WorktreeCard = React.memo(function WorktreeCard({
</span>
</TooltipTrigger>
<TooltipContent side="right" sideOffset={8}>
{isSshDisconnected ? translate("auto.components.sidebar.WorktreeCard.021538e1d1", "SSH disconnected") : translate("auto.components.sidebar.WorktreeCard.ca74db7550", "Remote project via SSH")}
{isSshDisconnected
? translate(
'auto.components.sidebar.WorktreeCard.021538e1d1',
'SSH disconnected'
)
: translate(
'auto.components.sidebar.WorktreeCard.ca74db7550',
'Remote project via SSH'
)}
</TooltipContent>
</Tooltip>
)}
@ -933,13 +946,21 @@ const WorktreeCard = React.memo(function WorktreeCard({
onClick={handleOpenRenameErrorDialog}
onDoubleClick={handleOpenRenameErrorDialog}
className="h-4 shrink-0 gap-0.5 rounded !px-0.5 text-[10px] font-medium leading-none text-destructive border border-destructive/40 bg-destructive/10 hover:bg-destructive/15 hover:text-destructive has-[>svg]:!px-0.5"
aria-label={translate("auto.components.sidebar.WorktreeCard.02e19349f4", "Auto-rename failed: view error")}
aria-label={translate(
'auto.components.sidebar.WorktreeCard.02e19349f4',
'Auto-rename failed: view error'
)}
>
<AlertCircle className="size-2.5" />
{translate("auto.components.sidebar.WorktreeCard.74522ee457", "rename failed")}</Button>
{translate('auto.components.sidebar.WorktreeCard.74522ee457', 'rename failed')}
</Button>
</TooltipTrigger>
<TooltipContent side="right" sideOffset={8}>
{translate("auto.components.sidebar.WorktreeCard.4eba2ea99e", "Auto-name failed. Click to see details.")}</TooltipContent>
{translate(
'auto.components.sidebar.WorktreeCard.4eba2ea99e',
'Auto-name failed. Click to see details.'
)}
</TooltipContent>
</Tooltip>
) : worktree.pendingFirstAgentMessageRename === true && !titleRenaming ? (
<Tooltip>
@ -951,13 +972,21 @@ const WorktreeCard = React.memo(function WorktreeCard({
onClick={handlePendingFirstAgentMessageRenameInfo}
onDoubleClick={handlePendingFirstAgentMessageRenameInfo}
className="h-4 shrink-0 gap-0.5 rounded !px-0.5 text-[10px] font-medium leading-none text-muted-foreground border border-worktree-sidebar-border/60 bg-worktree-sidebar-accent/45 hover:bg-worktree-sidebar-accent hover:text-foreground has-[>svg]:!px-0.5"
aria-label={translate("auto.components.sidebar.WorktreeCard.c6833b5187", "Will be renamed from first agent message")}
aria-label={translate(
'auto.components.sidebar.WorktreeCard.c6833b5187',
'Will be renamed from first agent message'
)}
>
<Sparkles className="size-2.5" />
{translate("auto.components.sidebar.WorktreeCard.f62a3dadbc", "rename pending")}</Button>
{translate('auto.components.sidebar.WorktreeCard.f62a3dadbc', 'rename pending')}
</Button>
</TooltipTrigger>
<TooltipContent side="right" sideOffset={8}>
{translate("auto.components.sidebar.WorktreeCard.c6833b5187", "Will be renamed from first agent message")}</TooltipContent>
{translate(
'auto.components.sidebar.WorktreeCard.c6833b5187',
'Will be renamed from first agent message'
)}
</TooltipContent>
</Tooltip>
) : null}
@ -968,10 +997,15 @@ const WorktreeCard = React.memo(function WorktreeCard({
variant="outline"
className="h-[16px] px-1.5 text-[10px] font-medium rounded shrink-0 leading-none text-foreground/70 border-foreground/20 bg-foreground/[0.06]"
>
{translate("auto.components.sidebar.WorktreeCard.7d517f82e2", "primary")}</Badge>
{translate('auto.components.sidebar.WorktreeCard.7d517f82e2', 'primary')}
</Badge>
</TooltipTrigger>
<TooltipContent side="right" sideOffset={8}>
{translate("auto.components.sidebar.WorktreeCard.0777de5970", "Primary worktree (original clone directory)")}</TooltipContent>
{translate(
'auto.components.sidebar.WorktreeCard.0777de5970',
'Primary worktree (original clone directory)'
)}
</TooltipContent>
</Tooltip>
)}
@ -982,11 +1016,17 @@ const WorktreeCard = React.memo(function WorktreeCard({
variant="outline"
className="h-[16px] px-1.5 text-[10px] font-medium rounded shrink-0 leading-none text-amber-700 dark:text-amber-300 border-amber-500/30 bg-amber-500/5"
>
{translate("auto.components.sidebar.WorktreeCard.4f964d5e8c", "sparse")}</Badge>
{translate('auto.components.sidebar.WorktreeCard.4f964d5e8c', 'sparse')}
</Badge>
</TooltipTrigger>
<TooltipContent side="right" sideOffset={8} className="max-w-72">
<div className="space-y-1">
<div>{translate("auto.components.sidebar.WorktreeCard.0f33af979b", "Partial checkout. Files outside these paths are not on disk.")}</div>
<div>
{translate(
'auto.components.sidebar.WorktreeCard.0f33af979b',
'Partial checkout. Files outside these paths are not on disk.'
)}
</div>
{worktree.sparseDirectories && worktree.sparseDirectories.length > 0 ? (
<div className="font-mono text-[11px] opacity-80">
{formatSparseDirectoryPreview(worktree.sparseDirectories)}
@ -1017,13 +1057,20 @@ const WorktreeCard = React.memo(function WorktreeCard({
<TooltipTrigger asChild>
<span
className="shrink-0 inline-flex items-center"
aria-label={translate("auto.components.sidebar.WorktreeCard.0d224eff10", "Primary worktree")}
aria-label={translate(
'auto.components.sidebar.WorktreeCard.0d224eff10',
'Primary worktree'
)}
>
<Star className="size-3 fill-amber-400 text-amber-400" />
</span>
</TooltipTrigger>
<TooltipContent side="right" sideOffset={8}>
{translate("auto.components.sidebar.WorktreeCard.0777de5970", "Primary worktree (original clone directory)")}</TooltipContent>
{translate(
'auto.components.sidebar.WorktreeCard.0777de5970',
'Primary worktree (original clone directory)'
)}
</TooltipContent>
</Tooltip>
)}
@ -1040,13 +1087,20 @@ const WorktreeCard = React.memo(function WorktreeCard({
'group-hover:opacity-100 group-focus-within:opacity-100 focus-visible:opacity-100',
'text-muted-foreground hover:bg-destructive/10 hover:text-destructive focus-visible:bg-destructive/10 focus-visible:text-destructive'
)}
aria-label={translate("auto.components.sidebar.WorktreeCard.6f09f58541", "Delete workspace")}
aria-label={translate(
'auto.components.sidebar.WorktreeCard.6f09f58541',
'Delete workspace'
)}
>
<Trash2 className="size-3.5" />
</button>
</TooltipTrigger>
<TooltipContent side="right" sideOffset={8}>
{translate("auto.components.sidebar.WorktreeCard.6f09f58541", "Delete workspace")}</TooltipContent>
{translate(
'auto.components.sidebar.WorktreeCard.6f09f58541',
'Delete workspace'
)}
</TooltipContent>
</Tooltip>
)}
</div>
@ -1070,7 +1124,9 @@ const WorktreeCard = React.memo(function WorktreeCard({
variant="secondary"
className="h-[16px] px-1.5 text-[10px] font-medium rounded shrink-0 text-muted-foreground bg-accent border border-border dark:bg-accent/80 dark:border-border/50 leading-none"
>
{repo ? getRepoKindLabel(repo) : translate("auto.components.sidebar.WorktreeCard.93aebe4529", "Folder")}
{repo
? getRepoKindLabel(repo)
: translate('auto.components.sidebar.WorktreeCard.93aebe4529', 'Folder')}
</Badge>
) : showBranch ? (
<span className="min-w-0 text-[11px] text-muted-foreground truncate leading-none">
@ -1112,7 +1168,9 @@ const WorktreeCard = React.memo(function WorktreeCard({
<div className="mt-0.5 flex items-start gap-1.5 rounded border border-amber-500/25 bg-amber-500/5 px-1.5 py-1 text-[10.5px] leading-snug text-amber-700 dark:text-amber-300">
<AlertTriangle className="mt-[1px] size-3 shrink-0" />
<span className="min-w-0 flex-1">
{remoteBranchConflict.remote}/{remoteBranchConflict.branchName} {translate("auto.components.sidebar.WorktreeCard.a88c92d0e3", "already exists.")}</span>
{remoteBranchConflict.remote}/{remoteBranchConflict.branchName}{' '}
{translate('auto.components.sidebar.WorktreeCard.a88c92d0e3', 'already exists.')}
</span>
</div>
)}
@ -1159,7 +1217,15 @@ const WorktreeCard = React.memo(function WorktreeCard({
</Button>
</TooltipTrigger>
<TooltipContent side="right" sideOffset={8}>
{lineageCollapsed ? translate("auto.components.sidebar.WorktreeCard.8cb634cda6", "Show child workspaces") : translate("auto.components.sidebar.WorktreeCard.57eaa61b55", "Hide child workspaces")}
{lineageCollapsed
? translate(
'auto.components.sidebar.WorktreeCard.8cb634cda6',
'Show child workspaces'
)
: translate(
'auto.components.sidebar.WorktreeCard.57eaa61b55',
'Hide child workspaces'
)}
</TooltipContent>
</Tooltip>
</div>