- Shipped
- August 7, 2026 at 1:58 AM UTC
- Author
- kamo
- Commit
- 8ab88d5
Right-click any folder for its actions. The menu header is not chrome — it names the folder and shows its live unread/total, so Mark all read and Empty folder can be judged before they are clicked rather than after. Actions that cannot apply are shown disabled with the reason (nothing unread, folder empty, built-in folders keep their names) instead of being Empty and Delete route through a confirmation built for the mail chrome. The app-wide MUI ConfirmationDialog demands a typed challenge word every time; a challenge on a recoverable action only trains people to type through warnings. So the gate is reserved for the two that destroy mail outright — deleting a folder and emptying Trash — and both name the consequence exactly: everything else moves to Trash and says so. Folders reorder by drag, per member, stored in the shared ui-preferences table so the arrangement follows them across devices. The order is one flat list of folder names: siblings are only compared against each other, so one list orders every level, and a folder that gets renamed or moved falls back to its natural position instead of corrupting a tree. Drops across levels are ignored — that would be a reparent on the mail server, not a sort. Selecting mail now works the way selection works everywhere else: shift-click for a range from the anchor, cmd/ctrl-click to pick one out, and the avatar turns into a checkbox on hover rather than taxing every row with a permanent checkbox column. The actions ride in a bar that floats over the list and leaves with the selection, instead of a strip wedged into the chrome that shoved the list down on every tick. Also: the Manage Folders footer is gone — the button beside the Folders heading already creates folders — and the refresh button is finally square. CSS could not do that on its own: in a flex row the main size resolves before align-self:stretch gives the item its height, so aspect-square had no height to derive a width from. It measures the row instead.