mirror of
https://github.com/bulwarkmail/webmail.git
synced 2026-10-31 08:13:50 +00:00
The Labels quick-action on an email row called `onSetTag(null)`, which clears every tag on the message rather than offering one to apply. On an untagged message that writes nothing, so the button appeared dead: no picker, no feedback. Assigning a tag from the opened email worked, since the reading pane renders a real picker. Clicking the row's tag icon now opens the same `TagPicker` used by the context menu and the reading pane, wired to the existing `onSetTag` handler, so a tag can be applied or removed without opening the message. The picker is portalled to the body: every row sits inside a `transform`ed virtual item, which would otherwise make a `fixed` child scroll with the list and clip it at the scroller's edge. It flips above the row near the viewport bottom, and dismisses on outside click, Escape, scroll or resize. The hover toolbar stays visible while the picker is open, since the row is no longer hovered once the pointer moves onto it. Covered by integration/tests/14-hover-tag.spec.ts, which checks the picker opens, the keyword reaches the server under `$label:`, a second click removes it, and the click does not fall through and open the message. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>