diff --git a/packages/ui/src/components/session/SessionSidebar.tsx b/packages/ui/src/components/session/SessionSidebar.tsx index c22d8339..f721966e 100644 --- a/packages/ui/src/components/session/SessionSidebar.tsx +++ b/packages/ui/src/components/session/SessionSidebar.tsx @@ -149,6 +149,12 @@ interface SortableProjectItemProps { onNewSessionFromGitHubIssue?: () => void; onNewSessionFromGitHubPR?: () => void; onOpenMultiRunLauncher: () => void; + onRenameStart: () => void; + onRenameSave: () => void; + onRenameCancel: () => void; + onRenameValueChange: (value: string) => void; + renameValue: string; + isRenaming: boolean; onClose: () => void; sentinelRef: (el: HTMLDivElement | null) => void; children?: React.ReactNode; @@ -175,6 +181,12 @@ const SortableProjectItem: React.FC = ({ onNewSessionFromGitHubIssue, onNewSessionFromGitHubPR, onOpenMultiRunLauncher, + onRenameStart, + onRenameSave, + onRenameCancel, + onRenameValueChange, + renameValue, + isRenaming, onClose, sentinelRef, children, @@ -221,98 +233,141 @@ const SortableProjectItem: React.FC = ({ onMouseLeave={() => onHoverChange(false)} onContextMenu={(event) => { event.preventDefault(); - setIsMenuOpen(true); + if (!isRenaming) { + setIsMenuOpen(true); + } }} >
- {/* Project name with tooltip for path - draggable */} - - + {isRenaming ? ( +
{ + event.preventDefault(); + onRenameSave(); + }} + > + onRenameValueChange(event.target.value)} + className="flex-1 min-w-0 bg-transparent typography-ui-label outline-none placeholder:text-muted-foreground" + autoFocus + placeholder="Rename project" + onKeyDown={(event) => { + if (event.key === 'Escape') { + onRenameCancel(); + } + }} + /> - - - {projectDescription} - - - - {/* Project menu */} - - + + ) : ( + + + + + + {projectDescription} + + + )} + + {!isRenaming ? ( + + + + + + {isRepo && !hideDirectoryControls && settingsAutoCreateWorktree && onNewSession && ( + + + New Session + )} - aria-label="Project menu" - onClick={(e) => e.stopPropagation()} - > - - - - - {isRepo && !hideDirectoryControls && settingsAutoCreateWorktree && onNewSession && ( - - - New Session + {isRepo && !hideDirectoryControls && !settingsAutoCreateWorktree && onNewWorktreeSession && ( + + + New Session in Worktree + + )} + {isRepo && !hideDirectoryControls && onNewSessionFromGitHubIssue && ( + + + New session from GitHub issue + + )} + {isRepo && !hideDirectoryControls && onNewSessionFromGitHubPR && ( + + + New session from GitHub PR + + )} + {isRepo && !hideDirectoryControls && ( + + + New Multi-Run + + )} + {isRepo && !hideDirectoryControls && onOpenBranchPicker && ( + + + Manage Branches + + )} + + + Rename - )} - {isRepo && !hideDirectoryControls && !settingsAutoCreateWorktree && onNewWorktreeSession && ( - - - New Session in Worktree + + + Close Project - )} - {isRepo && !hideDirectoryControls && onNewSessionFromGitHubIssue && ( - - - New session from GitHub issue - - )} - {isRepo && !hideDirectoryControls && onNewSessionFromGitHubPR && ( - - - New session from GitHub PR - - )} - {isRepo && !hideDirectoryControls && ( - - - New Multi-Run - - )} - {isRepo && !hideDirectoryControls && onOpenBranchPicker && ( - - - Manage Branches - - )} - - - Close Project - - -
+ + + ) : null} - {isRepo && !hideDirectoryControls && onNewWorktreeSession && settingsAutoCreateWorktree && ( + {isRepo && !hideDirectoryControls && onNewWorktreeSession && settingsAutoCreateWorktree && !isRenaming && (