tulsi baf56fb661 drag and drop chats between projects in sidebar (#114)
* feat: drag and drop chats between projects

Chat rows are draggable. Drop on a project header to move a chat into
that project, or drop on the Recents header to unassign from a project.
Visual feedback (highlight + ring) on valid drop targets.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: expand drop zones to full section containers and fix grab cursor

Drop targets now cover the entire project section (header + chat list)
and entire recents section, not just the headers. Grab cursor now
appears on the button element directly to override default pointer.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: replace drop zone indicators with ghost fill on dragged element

Remove ring/highlight from drop targets. Instead, the dragged chat row
gets opacity-40 with a subtle accent fill to indicate it's being moved.
Cleaned up unused dragOver state variables.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: add black line drop indicator below project and recents headers

A thin horizontal line appears below the section header when dragging
a chat over a project or recents section, indicating where it will land.
Uses proper dragLeave with contains() check to prevent flicker.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: prevent layout shift from drop indicator and fix grab cursor

Drop indicator line is now absolutely positioned within the section
header so it doesn't push content down. Grab cursor only appears
during active drag (active:cursor-grabbing), not on hover.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* chore: remove leftover rounded-md from drop target wrapper divs

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: always render Recents drop target even when empty

The Recents section header and drop zone now render regardless of
whether standalone chats exist, so users can always drag a project
chat to Recents to unassign it. The chat list inside still only
renders when there are standalone sessions.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 14:35:18 -07:00
S
Description
No description provided
Apache-2.0 1.5 GiB
Languages
Rust 63.6%
TypeScript 29.6%
JavaScript 1.7%
Shell 1.6%
Python 1.5%
Other 1.8%