Commit Graph
410 Commits
Author SHA1 Message Date
Linus Rath 6975f96a4b Merge branch 'feat/desktop-offline' into feat/do-ux-p2-mail-fix
# Conflicts:
#	components/email/email-viewer.tsx
#	components/email/thread-conversation-view.tsx
#	components/mail/mail-app.tsx
#	components/ui/toast.tsx
#	lib/keyboard-shortcuts/mail.ts
#	lib/window-controls-overlay.ts
2026-11-04 13:37:49 +01:00
Linus Rath 0f2fa7bafe Merge branch 'feat/do-ux-p2-compose-fix' into feat/desktop-offline 2026-11-04 13:28:56 +01:00
Linus Rath 063d9c9c47 fix: drop the scheduled mark from a reply in the conversation once it has gone out 2026-11-04 13:10:38 +01:00
Linus Rath 850ebce944 fix: open a resumed reply draft under its message 2026-11-04 12:57:24 +01:00
Linus Rath c5eb55467d fix: lift toasts above the quick reply box and a docked reply while they are on screen
The toast-layout assertion changes because toasts now clear a bar taller
than 5rem while a composer is open, instead of a fixed 5rem.
2026-11-04 12:53:52 +01:00
Linus Rath 0728f854d2 fix: keep the message in view above a docked reply, which starts compact and grows to half the pane, and takes short panes with a Show the message bar 2026-11-04 12:50:22 +01:00
Linus Rath 98f814fced fix: open a mail link from another program from the default account with no question, and drop "protocol link" from the account picker 2026-11-04 12:42:30 +01:00
Linus Rath 1417c38a20 Merge branch 'feat/do-ux-p2-compose-send2' into feat/do-ux-p2-compose-fix 2026-11-04 12:41:03 +01:00
Linus Rath 358ba58b39 Merge branch 'feat/do-ux-p2-compose-drafts' into feat/do-ux-p2-compose-fix 2026-11-04 12:40:56 +01:00
Linus Rath 90e959a092 fix: show a sent reply in the open conversation at once, keep it out of Sent and Scheduled during Undo, and bring an undone reply back where it was written 2026-11-04 12:35:50 +01:00
Linus Rath 03ea1ab1aa fix: open files sent from Explorer's Send to and Open with in a compose window, leaving the main window where it is 2026-11-04 12:32:54 +01:00
Linus Rath df62335545 feat: name the desktop app's windows in the Window menu by folder and account, subject or New message 2026-11-04 12:25:33 +01:00
Linus Rath 801aa51b24 fix: discard a draft with the bin at once and offer Undo
The bin no longer asks "Discard draft?". The discard tests now expect no
question: the first one checks the late delete and the Undo instead of
the dialog, and the upload test that cancelled the question is gone,
since there is no question to cancel.
2026-11-04 12:20:42 +01:00
Linus Rath 0da07335cc fix: give every message of a conversation the same header with Reply, Reply all and Forward, and open the newest one 2026-11-04 12:17:27 +01:00
Linus Rath e93e0419b8 Merge branch 'feat/do-ux-p2-mail-desk' into feat/do-ux-p2-mail-fix 2026-11-04 11:58:31 +01:00
Linus Rath 712236867e Merge branch 'feat/do-ux-p2-mail-folders' into feat/do-ux-p2-mail-fix
# Conflicts:
#	components/email/email-viewer.tsx
2026-11-04 11:57:23 +01:00
Linus Rath e9e5a43391 fix: say when a message needs a connection in a browser that keeps no mail offline 2026-11-04 11:51:47 +01:00
Linus Rath c50726a15a fix: run Message > Move to… on every selected message, and offer no Reply or Forward with several selected 2026-11-04 11:51:45 +01:00
Linus Rath e7cef5ba1c feat: open a draft in the composer on click, and Reply resumes the reply already drafted 2026-11-04 11:44:53 +01:00
Linus Rath c2f80e2d29 fix: count every account's unread mail in the rail's Mail badge and the tab title, as the favicon does 2026-11-04 11:42:22 +01:00
Linus Rath 30e8cd02a4 feat: select every loaded conversation with one click and offer the rest of the folder 2026-11-04 11:36:55 +01:00
Linus Rath cbb42c1f47 fix: count the undo send toast down and say Sent with View when undo ends
The undo send test allowed the toast at most the undo time; it now stays one second longer, since it turns into "Sent" when Undo ends instead of going away.
2026-11-04 11:34:41 +01:00
Linus Rath 9ae258cc74 fix: count conversations in batch toasts and say "Archived" after archiving in a message window
The moved-undo and popout-host tests expected "Email archived" from a
message window; the main window says "Archived", and now so does the
window.
2026-11-04 11:32:03 +01:00
Linus Rath 0a09fec123 fix: offer Empty Trash and Empty Spam only there, with the message count, and drop folder actions that can't apply
The folder menu tests no longer expect "Empty folder" on a folder of
your own: emptying is offered on Trash and Spam only now. The Mountain
View list test expects the entry to read "Empty Trash".
2026-11-04 11:30:11 +01:00
Linus Rath 890c49169b fix: save the open message as a draft before Compose, Reply all or Forward opens another 2026-11-04 11:26:02 +01:00
Linus Rath 79fde240ac fix: stop the app crashing when Compose is pressed while a reply is docked 2026-11-04 11:22:58 +01:00
Linus Rath ea6b20d7ff fix: show the selection in the reading pane once rows beyond the open message are ticked 2026-11-04 11:21:35 +01:00
Linus Rath 989385f4f6 Merge branch 'feat/desktop-offline' into feat/do-ux-compose-fixes
# Conflicts:
#	components/email/email-viewer.tsx
#	components/settings/accessibility-settings.tsx
#	lib/__tests__/settings-search.test.ts
#	lib/settings-search.ts
2026-11-04 09:54:25 +01:00
Linus Rath ceaceb7f2a Merge branch 'feat/desktop-offline' into feat/do-ux-compose-fixes
# Conflicts:
#	components/email/email-composer.tsx
#	components/email/email-viewer.tsx
#	locales/ar/common.json
#	locales/ca/common.json
#	locales/cs/common.json
#	locales/da/common.json
#	locales/de/common.json
#	locales/en/common.json
#	locales/es/common.json
#	locales/et/common.json
#	locales/fa/common.json
#	locales/fr/common.json
#	locales/he/common.json
#	locales/hu/common.json
#	locales/it/common.json
#	locales/ja/common.json
#	locales/ko/common.json
#	locales/lv/common.json
#	locales/mn/common.json
#	locales/nb/common.json
#	locales/nl/common.json
#	locales/pl/common.json
#	locales/pt/common.json
#	locales/ro/common.json
#	locales/ru/common.json
#	locales/sk/common.json
#	locales/th/common.json
#	locales/tr/common.json
#	locales/uk/common.json
#	locales/vi/common.json
#	locales/zh-TW/common.json
#	locales/zh/common.json
2026-11-04 09:20:50 +01:00
Linus Rath adbbfe8149 test: give the welcome banner mock the due hook the notice bar now reads 2026-11-04 09:18:32 +01:00
Linus Rath f1266889ed fix: list To and Cc in the header of a message forwarded from the reader 2026-11-04 09:15:42 +01:00
Linus Rath fcc9fc0cc0 Merge branch 'feat/desktop-offline' into feat/do-ux-mail-fixes
# Conflicts:
#	components/email/email-viewer.tsx
#	components/mail/mail-app.tsx
#	components/offline/offline-host.tsx
#	components/ui/welcome-banner.tsx
#	locales/ar/common.json
#	locales/ca/common.json
#	locales/cs/common.json
#	locales/da/common.json
#	locales/de/common.json
#	locales/en/common.json
#	locales/es/common.json
#	locales/et/common.json
#	locales/fa/common.json
#	locales/fr/common.json
#	locales/he/common.json
#	locales/hu/common.json
#	locales/it/common.json
#	locales/ja/common.json
#	locales/ko/common.json
#	locales/lv/common.json
#	locales/mn/common.json
#	locales/nb/common.json
#	locales/nl/common.json
#	locales/pl/common.json
#	locales/pt/common.json
#	locales/ro/common.json
#	locales/ru/common.json
#	locales/sk/common.json
#	locales/th/common.json
#	locales/tr/common.json
#	locales/uk/common.json
#	locales/vi/common.json
#	locales/zh-TW/common.json
#	locales/zh/common.json
2026-11-04 09:11:09 +01:00
Linus Rath 9df9505da0 test: look for the archive toast by its new wording in the undo reopen test 2026-11-04 09:09:18 +01:00
Linus Rath 044647ff34 fix: keep the desktop layout in a half-screen window and at 150 % zoom
A window snapped to half the screen (640-800 px) or a 1366x768 laptop
at 150 % (911 px) got the phone and tablet layout: bottom tab bar,
folders in a drawer, Settings as a phone list with a Back arrow. The
layout switched at the 64rem (1024 px) breakpoint.

Now the phone layout starts below 600 px. From 600 to 1024 px the app
is a compact desktop: app rail at the side, folder sidebar folded to
its icons (the existing collapsed state, opened per session with its
toggle), Settings with its two panes and a narrower page list. Below
840 px the split layout opens a message in the list's place, as the
focused layout does. This holds in the browser and the desktop app,
in the Pro shell (which now runs from 600 px) and under Mountain View.

- `hooks/use-media-query.ts`: classifyWidth, PHONE_BELOW 600,
  FULL_DESKTOP 1024; the tablet class (`isTablet`) is gone, the store
  has `isCompact` instead. Plugins still see "tablet" for it.
- `app/globals.css`: a `desk:` breakpoint at 37.5rem for the layout
  classes, and a `tap:` variant for 44px rows on phones and touch
  screens below 1024 px (was every window below 1024 px).
- Touch screens below 1024 px keep swiping list rows (was phones only).
- The boot skeletons, boot script, mail app, sidebar, reader, admin
  shell and calendar, contacts and files follow the new widths.

Tests changed with the behaviour: the tablet cases in pro-gate,
mail-app-mv-composer-move, mail-app-compose-handoff,
mail-app-thread-expand-mark-read, mobile-tour-end and
thread-list-item-columns now run on a phone or a compact desktop, as
those widths no longer exist as a tablet. mail-app-short-window-tab-bar
is replaced by mail-app-compact-layout: a phone on its side is a
compact desktop with the rail at the side, so the short-window tab bar
rule is gone. Class and media-query assertions follow desk:/tap: and
37.5rem; the 32px-text test uses 1100 px, since 1440 px at 32px is now
a compact desktop.
2026-11-04 09:07:06 +01:00
Linus Rath ad0b238e3d feat: open a reply under the message it answers, which stays readable above it 2026-11-04 08:32:05 +01:00
Linus Rath 7517b024ec fix: make Discard on the Continue draft bar delete the draft, with Undo, and reach it by keyboard 2026-11-04 08:23:01 +01:00
Linus Rath 2f31b435a2 Merge branch 'feat/desktop-offline' into feat/do-menu-fixes
# Conflicts:
#	components/desktop/desktop-host.tsx
2026-11-04 07:57:50 +01:00
Linus Rath 1e51ff6e69 Merge branch 'feat/do-ux-mail-conv' into feat/do-ux-mail-fixes
# Conflicts:
#	components/mail/mail-app.tsx
2026-11-04 07:24:19 +01:00
Linus Rath d2f1e4bcc9 Merge branch 'feat/do-ux-mail-keys' into feat/do-ux-mail-fixes 2026-11-04 07:23:33 +01:00
Linus Rath efa875ccc7 Merge branch 'feat/do-ux-mail-accounts' into feat/do-ux-mail-fixes
# Conflicts:
#	components/email/email-list.tsx
2026-11-04 07:23:30 +01:00
Linus Rath 5fbc9b1f47 feat: open a mail link from another program in a compose window of its own in the desktop app 2026-11-04 07:12:06 +01:00
Linus Rath a19bdefdc1 feat: open the next message after archive or delete when the list is beside the reader 2026-11-04 07:08:31 +01:00
Linus Rath fe8fff338e fix: let j and k go on from the last opened message after Escape 2026-11-04 07:02:23 +01:00
Linus Rath 0746679475 feat: reply with Ctrl+R, mark read with Ctrl+Q and search with Ctrl+E in the desktop app, as in Outlook 2026-11-04 07:00:38 +01:00
Linus Rath 8bfc7cf8e0 feat: show the whole conversation in the reading pane
The default layout showed only the newest message of a thread in the
reader and unfolded the rest as rows inside the list. The reader now
shows the conversation on every layout but a phone's, as Mountain View
does: older messages folded to one line each, unread ones unfolded, the
newest open. A conversation is one row in the list, with no chevron,
and `x` no longer unfolds it. "Show emails as individual messages"
keeps the single message.

Two existing tests changed their setup, not their assertions: the
attachment download tests in `blob-routing.test.tsx` turn threading off
so the conversation fetch doesn't take the requests they count, and the
`x` expansion tests now run on Mountain View on a tablet, the one place
where the list still unfolds a conversation.
2026-11-04 06:57:43 +01:00
Linus Rath 2859260a72 feat: add Move to the selection bar and use the empty reading pane for a selection and the first-run tips
The selection bar showed Archive, Delete and Tag, with Move only in its
more menu and both read buttons only on wide bars. The reading pane said
"No conversation selected" next to a selection, and the first-run tips
took a third of the list.

- The bar has Archive, Delete, Move, one read/unread button ("Mark as
  read" while anything selected is unread) and Tag, then the rest.
- With a selection the empty reading pane shows "5 conversations
  selected" and the same buttons.
- The first-run tips sit in the empty reading pane where it shows beside
  the list; phones and layouts without that pane keep them above the list.
- A bulk move's toast names the folder.
2026-11-04 06:51:13 +01:00
Linus Rath 295eb35671 fix: say a move, archive or delete once in its toast and drop the menu's ellipsis from the New folder dialog title
The delete Undo test looked for the "Email deleted" toast; a delete to Trash now says "Moved to Trash", so it looks for that one.
2026-11-04 06:44:45 +01:00
Linus Rath e634884d4e fix: count conversations and their messages above search results 2026-11-04 06:43:45 +01:00
Linus Rath 781013cc44 feat: close the composer as soon as Send is pressed and show Sending, then Sent with View 2026-11-04 06:41:51 +01:00
Linus Rath 4224149ab5 feat: move Compose to the top of the folder sidebar on desktop and keep one account switcher and one list menu
Two mail-app tests clicked the round Compose button on a desktop; their
mocked sidebar now draws the Compose button the real one has there.
2026-11-04 06:39:16 +01:00