diff --git a/desktop/src/components/shared/RepositoryLaunchControls.tsx b/desktop/src/components/shared/RepositoryLaunchControls.tsx index 1159fe07..d2da78af 100644 --- a/desktop/src/components/shared/RepositoryLaunchControls.tsx +++ b/desktop/src/components/shared/RepositoryLaunchControls.tsx @@ -298,11 +298,11 @@ export function RepositoryLaunchControls({ }, [isLaunchReady, onLaunchReadyChange]) const worktreeLabel = useWorktree ? t('repoLaunch.worktreeIsolated') : t('repoLaunch.worktreeCurrent') - const workbarButtonClassName = 'group inline-flex h-9 max-w-full min-w-0 items-center gap-1.5 rounded-[7px] border border-transparent px-2.5 text-[13px] font-medium leading-none text-[var(--color-text-secondary)] transition-colors hover:bg-[var(--color-surface-container-lowest)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-brand)]/35 disabled:cursor-not-allowed disabled:opacity-50' + const workbarButtonClassName = 'group inline-flex h-9 min-w-0 items-center gap-1.5 rounded-[7px] border border-transparent px-2.5 text-[13px] font-medium leading-none text-[var(--color-text-secondary)] transition-colors hover:bg-[var(--color-surface-container-lowest)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-brand)]/35 disabled:cursor-not-allowed disabled:opacity-50' return (
-
+
{loading && workDir && ( @@ -328,7 +328,7 @@ export function RepositoryLaunchControls({ setWorktreeMenuOpen(false) setBranchFilter('') }} - className={`${workbarButtonClassName} max-w-[260px]`} + className={`${workbarButtonClassName} max-w-[260px] shrink`} > @@ -350,7 +350,7 @@ export function RepositoryLaunchControls({ setWorktreeMenuOpen((prev) => !prev) setBranchMenuOpen(false) }} - className={`${workbarButtonClassName} ${ + className={`${workbarButtonClassName} shrink-0 ${ useWorktree ? 'bg-[var(--color-surface-container-lowest)] text-[var(--color-text-primary)]' : '' diff --git a/desktop/src/pages/EmptySession.test.tsx b/desktop/src/pages/EmptySession.test.tsx index 4e1d7583..52fdcf34 100644 --- a/desktop/src/pages/EmptySession.test.tsx +++ b/desktop/src/pages/EmptySession.test.tsx @@ -304,6 +304,42 @@ describe('EmptySession', () => { }) }) + it('keeps the repository launch context on one row and truncates long branch names', async () => { + const longBranch = 'feature/super-long-branch-name-for-repository-launch-controls-e2e' + mocks.getRepositoryContext.mockResolvedValueOnce(okRepositoryContext({ + currentBranch: longBranch, + defaultBranch: 'main', + branches: [{ + name: longBranch, + current: true, + local: true, + remote: false, + checkedOut: true, + worktreePath: '/workspace/project', + }], + worktrees: [{ + path: '/workspace/project', + branch: longBranch, + current: true, + }], + })) + + render() + + fireEvent.change(screen.getByRole('textbox'), { + target: { value: 'draft question', selectionStart: 14 }, + }) + fireEvent.click(screen.getByRole('button', { name: 'Pick project' })) + + const branchButton = await screen.findByRole('button', { name: new RegExp(`Select branch: ${longBranch}`) }) + const branchClasses = branchButton.className.split(/\s+/) + expect(branchButton.parentElement?.className).toContain('flex-nowrap') + expect(branchButton.parentElement?.className).not.toContain('flex-wrap') + expect(branchClasses).toContain('max-w-[260px]') + expect(branchClasses).not.toContain('max-w-full') + expect(branchButton.querySelector('span')?.className).toContain('truncate') + }) + it('defaults to isolated worktree when the fallback branch is checked out elsewhere', async () => { mocks.getRepositoryContext.mockResolvedValueOnce(okRepositoryContext({ currentBranch: null,