3 months ago
a7bfa1cHover-only affordances (opacity-0 pointer-events-none group-hover:*) are invisible to keyboard and no-hover users. This applies the existing house pattern (group-focus-within:*, already used by ChatThreadHeader and ResearchSourcesList) to every site, and adds a persistent per-thread overflow menu so thread actions are reachable without right-click. - Sidebar.tsx: add group-focus-within:opacity-100/group-focus-within: pointer-events-auto to the four section action buttons (chats collapse, new chat, projects collapse, project overflow). Extract canGenerateMemoryForThread / generateMemoryForThread / deleteThreadHistoryWithConfirm / displayTitleForThread from handleThreadContextMenu so the new DropdownMenu can reuse the same confirm-dialog logic. - SidebarOneOffChatItem.tsx / SidebarWorkspaceItem.tsx: reveal the archive button + age label on group-focus-within (and suppress the age-label fade so it doesn't fight the revealed button). - ThreadOverflowMenu.tsx (new): Radix DropdownMenu exposing Rename / Archive / Generate memory / Delete history per thread, reusing the existing actions. Fully keyboard navigable, works on touch. - conversation.tsx: ConversationScrollButton now reveals on focus-visible so the focus target itself becomes visible. - test/thread-overflow-menu.test.tsx: lock in the focusable, labeled trigger.
Parent11c290d