Commit Graph
1200 Commits
Author SHA1 Message Date
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 4637f67b37 fix: draw the To field's focus ring whole 2026-11-04 12:40:49 +01:00
Linus Rath af8c8a6ea4 fix: keep toasts above the quick reply box 2026-11-04 12:39:07 +01:00
Linus Rath 664ec3831d fix: open a recipient's menu when its chip is clicked 2026-11-04 12:36:16 +01:00
Linus Rath d03d4a0b78 fix: show whole rows of attachments and keep uploading files in their place
The attachment order test now expects uploading files where they were
added: moved to the front, a big upload jumped out of sight once done.
2026-11-04 12:33:28 +01:00
Linus Rath 1984a33f86 fix: draw the full-screen composer over the folder sidebar 2026-11-04 12:31:41 +01:00
Linus Rath b02ce23ace feat: ask for the link's text and address in Insert link, also with nothing selected
The first link dialog test now finds the address by its "Link" label and
checks the linked text, since the dialog has two fields.
2026-11-04 12:29:01 +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 b439fd5e6a fix: put the cursor at the end of the text when the space under it is clicked 2026-11-04 12:11:54 +01:00
Linus Rath 8be420b41e fix: keep a click in a reply above the folded quote 2026-11-04 12:11:54 +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 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 aa62855759 Merge branch 'feat/do-ux-settings-fixes' into feat/desktop-offline
# Conflicts:
#	components/layout/__tests__/account-switcher-mountain-view.test.tsx
#	components/layout/account-switcher.tsx
#	components/settings/accessibility-settings.tsx
#	components/settings/reading-settings.tsx
2026-11-04 09:44:51 +01:00
Linus Rath d91b8a879c fix: say Draft saved on Ctrl+S also when autosave already had everything
The shortcut help test now counts two Ctrl + K entries (command palette and Insert link), and the Cc/Bcc key test waits for the To field's opening focus first.
2026-11-04 09:42:40 +01:00
Linus Rath 4a764150b2 Merge branch 'feat/desktop-offline' into feat/do-ux-settings-fixes 2026-11-04 09:22:44 +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 56e833fe6a fix: use the filterable Move list on the selection bar 2026-11-04 09:18:32 +01:00
Linus Rath 2ca4946c6e feat: add Ctrl+K for a link, Ctrl+S to save the draft and Ctrl+Shift+C or B for Cc and Bcc in the composer 2026-11-04 09:13:05 +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 b509ce067f fix: move Use a sub-address and Edit sender into the From list instead of buttons on every message
The custom From gate tests now look for the Edit sender entry in the From list instead of the Override button.
2026-11-04 09:08:17 +01:00
Linus Rath 76c0bd1d41 test: save a subject-less draft by closing, as closing now saves without asking 2026-11-04 09:08:09 +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 2b2b7b8298 fix: show every attachment in the composer, with type icons and a total, failed and uploading files first
The attachment list test now expects every chip and a bounded, scrolling row instead of three chips and a +N counter.
2026-11-04 09:01:04 +01:00
Linus Rath 69ec26fe33 fix: remove a recipient whole on the second Backspace instead of turning it into text
The mention test's Backspace check now expects the chip to be selected, not put back into the field as text.
2026-11-04 08:43:29 +01:00
Linus Rath 1fdfffad45 fix: read the send hook count safely in the composer's Options menu 2026-11-04 08:42:39 +01:00
Linus Rath 3841bdd630 Merge branch 'feat/do-drop-overlay' into feat/desktop-offline
# Conflicts:
#	desktop-policies/de-DE/Bulwark.adml
#	desktop-policies/en-US/Bulwark.adml
2026-11-04 08:37:26 +01:00
Linus Rath 472ee53d88 fix: insert pasted and dropped images without a dialog, with an optional Add description chip
The image description tests now open the dialog from the chip on the image, since a drop no longer opens it by itself.
2026-11-04 08:36:25 +01:00
Linus Rath 91b237330e Merge branch 'feat/desktop-offline' into feat/do-ux-settings-fixes
# Conflicts:
#	components/settings/desktop-os-settings.tsx
#	components/settings/notification-settings.tsx
#	components/settings/protocol-handler-settings.tsx
2026-11-04 08:35:53 +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 d98132b8e1 fix: close every composer the same way, keeping the draft with Draft saved and Discard
X, Escape, clicking another message and Escape in a pop-out window
now all save the draft and close, with a "Draft saved" toast that has
Discard (with Undo). The Save or discard question shows only when that
save fails. A Reply or Forward closed before the user changed anything
leaves no draft. Undo send being on by default no longer asks "Send
without a delay?" on servers without delayed sending; only a delay the
user picked does.

Changed test assertions: the close-guard, priority, account-switch,
threading, sign-out, mention, draft-attachments, discard-uploads and
save-pending-attachments tests reached saving or discarding through the
Save or discard dialog on close, which now only appears after a failed
save. They now close directly, or use the Discard button, or check the
failed-save question. The send-delay test marks its delay as chosen.
2026-11-04 08:22:56 +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 de09da137b Merge branch 'feat/do-menu-winctl' into feat/do-menu-fixes 2026-11-04 07:50:16 +01:00
Linus Rath 8570f678e2 Merge branch 'feat/do-ux-compose-windows' into feat/do-ux-compose-fixes
# Conflicts:
#	components/email/email-composer.tsx
2026-11-04 07:42:11 +01:00
Linus Rath 17bf3c4e6f Merge branch 'feat/do-ux-compose-send' into feat/do-ux-compose-fixes 2026-11-04 07:41:26 +01:00
Linus Rath b082ce582e feat: put offline, privacy and about on settings pages of their own and widen the settings search
Offline sat in the middle of Backup & reset, privacy settings were spread
over Reading, Composing and Message list, and the version card took room
from the page list in the sidebar's footer. The search matched letters
inside words ("lock" found Time format and Send Checks) and knew no other
words for a setting ("offline", "autoreply", "logout" found nothing).

- Offline is a page in the top group: Keep mail on this device, what is
  kept, Remove everything from this device, and the Outbox as its own
  section. Old `/settings/backup/offline` links and the offline notice
  land there.
- Privacy holds remote images and trusted senders, read receipts, sender
  pictures from the web, the desktop app's usage info and crash reports,
  and a link to the push relay on Notifications. Reading, Composing and
  Message list keep a link row; old links to those sections land on
  Privacy.
- About is the last page and holds the version card; the footer keeps the
  Advanced switch.
- The search matches whole words and word starts (substrings only in
  Chinese, Japanese and Thai), and each row can carry synonyms in the
  user's language. A page matches by its name and keywords or when one of
  its rows has every word. Account gets a Sign out row so "logout" leads
  somewhere.
- The index test now also fails when a page draws a section the index
  doesn't know, and a new test fails on two indexed rows with the same
  name. Tests that rendered remote content and sender pictures on Reading
  and Message list render Privacy instead, since that's where the rows are.
2026-11-04 07:37:25 +01:00
Linus Rath 48df0db1af feat: list To and Cc in the header of a forwarded message 2026-11-04 07:34:29 +01:00
Linus Rath e6f8c7a241 fix: show who a quick reply goes to and offer the full editor by name
The quick reply tests find the box by its new placeholder key, which
names the recipients instead of "Write a quick reply...".
2026-11-04 07:25:05 +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 c48d51d1b0 Merge branch 'feat/do-ux-mail-toolbar' into feat/do-ux-mail-fixes 2026-11-04 07:23:31 +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 165c949960 feat: save a message as a template with just a name, and show each template's name once 2026-11-04 07:13:05 +01:00
Linus Rath 1b13b4ce88 feat: show Offline in the composer and keep the message when Send can't go out 2026-11-04 07:12:24 +01:00
Linus Rath 43c9ef9ad1 fix: name the TLS-only delivery option plainly and point to encryption add-ons 2026-11-04 07:11:03 +01:00
Linus Rath 021712d55e Merge branch 'feat/do-menu-pos' into feat/do-menu-fixes 2026-11-04 07:09:17 +01:00
Linus Rath 2fcb7cd544 fix: print an invitation with its date, time, place and organiser 2026-11-04 07:05:31 +01:00
Linus Rath 0ced5482d5 feat: list your contacts in the composer's recipient picker, with the directory on its own tab 2026-11-04 07:03:15 +01:00
Linus Rath e29a6553e6 fix: keep notices and the offline bar clear of the window's controls, give each a close, and put a pane's close first where it would sit beside the window's 2026-11-04 07:02:53 +01:00
Linus Rath f8a803ad44 fix: keep the composer's toolbar menus on screen in a short window 2026-11-04 07:00:58 +01:00
Linus Rath 3a9ec61232 fix: mark the row a menu is open for, and leave the item under the pointer alone until it moves 2026-11-04 07:00:56 +01:00