Commit Graph
412 Commits
Author SHA1 Message Date
Linus Rath ed988a2aae ci: keep the a11y guard out of lint and vitest and mock narrowerThan in attachment tests 2026-10-29 21:08:59 +01:00
Linus Rath c0fb427eec feat: tick a row from anywhere beside its avatar or checkbox #1381 2026-10-29 20:53:52 +01:00
Linus Rath 357b6af3c9 feat: offer to remove a cancelled meeting from the calendar in the cancellation mail #1425 2026-10-29 20:24:27 +01:00
Linus Rath a78d03a18d fix: color attachment icons by file type in the reader like in the list 2026-10-29 20:06:15 +01:00
Linus Rath 5dfc958723 fix: stop a mail's own body overflow from adding a second scrollbar in the reader 2026-10-29 20:06:15 +01:00
Linus Rath e57e922950 feat: make buttons, menu items, rows and switches 44px when large targets is on 2026-10-29 19:38:45 +01:00
Linus Rath f43eb9f41a fix: give chip remove buttons, tree expanders, task circles and month events a 24px target 2026-10-29 19:38:45 +01:00
Linus Rath be423637fc feat: show one column and an optional paged message list in simple mode 2026-10-29 19:14:41 +01:00
Linus Rath 8e201954b4 fix: make the message list one Tab stop that screen readers read row by row
The list was a stack of clickable divs. Screen readers heard nothing when
j or k moved the selection, every row added several Tab stops (Compose
sat 253 Tabs from the top), and a deleted message left the focus on the
page.

The list is now a treegrid named "Messages": one Tab stop, rows named in
one sentence (unread, sender, subject, date, flags, and the preview when
that setting is on), conversations with aria-expanded and their
messages a level down, position and list size on every row. j, k and the
arrows move the focus with the selection, Space ticks a row, Enter opens
it, Shift+F10 or the menu key opens its actions, and after a delete the
focus lands on the next row. With the actions button setting on, each
row shows a button for the same menu, for pointers that can't hover or
right-click.
2026-10-29 18:53:05 +01:00
Linus Rath 6143aaa80d fix: move the focus into the batch tag menu and make the full-screen compose window a dialog 2026-10-29 18:02:59 +01:00
Linus Rath 37a14eca6a fix: name the inbox category tabs in the user's language and tie them to the list 2026-10-29 18:02:57 +01:00
Linus Rath 75b4ec37fb fix: say whether a conversation attachment button previews or downloads, next to the file name 2026-10-29 17:53:59 +01:00
Linus Rath a982c3f235 feat: dim the open message except a band of lines with the reading mask 2026-10-29 17:53:59 +01:00
Linus Rath caed2d313a feat: open a message in a reader view with the app's font, spacing and colours 2026-10-29 17:53:59 +01:00
Linus Rath bb78697981 feat: pause animated images in mail with a play button 2026-10-29 17:53:57 +01:00
Linus Rath 1e929b0a95 feat: read HTML mail as plain text, by default or per message 2026-10-29 17:53:57 +01:00
Linus Rath 8cc0f8f258 feat: keep message lines to about 80 characters with the comfortable reading width 2026-10-29 17:53:56 +01:00
Linus Rath dcc0d600f4 feat: show HTML mail in the app's font, colours and spacing when styles are overridden 2026-10-29 17:53:56 +01:00
Linus Rath 24a13cc1f8 fix: stop animations inside mail when reduce motion is on 2026-10-29 17:53:55 +01:00
Linus Rath 324a0f76b2 fix: leave mail colours to the browser in Windows contrast themes 2026-10-29 17:53:55 +01:00
Linus Rath c07ba1a370 feat: show message bodies at the chosen text size and enlarge text below the minimum 2026-10-29 17:53:55 +01:00
Linus Rath b63038a644 fix: name the file on attachment buttons and say whether a conversation message is expanded 2026-10-29 17:53:54 +01:00
Linus Rath c20b9846b9 fix: name each message frame after its subject and give it the mail's language 2026-10-29 17:53:54 +01:00
Linus Rath 4c1f24947e fix: tell screen readers when a draft is saved and read a failed upload out once 2026-10-29 17:53:50 +01:00
Linus Rath 374ae9c8dc feat: ask before deleting or archiving when the confirm settings are on 2026-10-29 17:53:48 +01:00
Linus Rath e2fc2c750a feat: read toasts out to screen readers, errors assertively 2026-10-29 17:53:44 +01:00
Linus Rath 53cb49d3ce feat: ask for alt text when an image goes into a message
Pasted and dropped images used to get the file name as alt text, and
there was no way to change it. Now a small dialog asks what the image
shows right after it is inserted, with a "Decorative image" option that
writes alt="". An image already in the text can be described from the
toolbar or from the ALT button on the selected image. The plain-text
part of an HTML mail writes described images as "[Image: ...]" and
leaves decorative ones out.

The formatting toolbar now also re-renders when only the selection
changes, so its pressed states and the image button follow the caret.
2026-10-29 17:53:43 +01:00
Linus Rath 1b24c1980c feat: start new messages in the default compose font and size 2026-10-29 17:53:42 +01:00
Linus Rath 4d91d9b296 feat: ask before sending when confirm before sending is on 2026-10-29 17:53:42 +01:00
Linus Rath 4f35aa13fa fix: show attachment upload progress and failures in words for screen readers 2026-10-29 17:53:41 +01:00
Linus Rath 447a3fa474 fix: make the formatting toolbar one tab stop that says which styles are on 2026-10-29 17:53:41 +01:00
Linus Rath caee90facc fix: name the message body and tie its error to it for screen readers 2026-10-29 17:53:40 +01:00
Linus Rath 0aa751a3a0 feat: move a recipient between To, Cc and Bcc from the chip's menu 2026-10-29 17:53:39 +01:00
Linus Rath ee486077de fix: name the recipient fields and let the keyboard reach and remove chips 2026-10-29 17:53:38 +01:00
Linus Rath 3962900035 fix: show a tag's letter in its dot and its full name with colour names on 2026-10-29 17:53:37 +01:00
Linus Rath dcc504fcfa feat: add landmarks, an h1 per app, skip links and F6 between panes 2026-10-29 17:53:35 +01:00
Linus Rath 69d2f35d78 fix: keep the install card off the send button and remember not now #1411 2026-10-29 14:32:43 +01:00
Linus Rath 6d96f31652 fix: keep the composer's spacing on the reply attribution line 2026-10-29 14:14:41 +01:00
Linus Rath a75db40f7f Merge pull request #1421 from pcatapan/codex/composer-quote-collapse 2026-10-29 14:12:41 +01:00
Linus Rath 5ab935a879 Merge pull request #1417 from b3rsrk/fix/foreign-draft-paragraph-spacing 2026-10-29 14:12:38 +01:00
Linus Rath 47ee263d76 Merge pull request #1419 from HOLOEYE-JZ/feat/plugin-search-results-pending
# Conflicts:
#	components/email/plugin-search-results.tsx
2026-10-29 14:11:34 +01:00
Linus Rath 8e533f090c Merge pull request #1418 from HOLOEYE-JZ/feat/plugin-search-result-marks 2026-10-29 14:11:11 +01:00
Linus Rath 720a903d57 Merge pull request #1428 from VasilisNtovolos/fix/download-all-error-feedback 2026-10-29 14:11:07 +01:00
VasilisNtovolos 995262bde2 fix: report partial and failed attachment ZIP downloads 2026-10-29 14:02:24 +02:00
pcatapan 9e00896043 feat(composer): collapse quoted reply history behind an ellipsis 2026-10-29 11:00:58 +01:00
Jacob Zeitz 03876158fe feat(plugins): hold the search results block's place while a plugin still searches
A plugin's results to a search came all at once after its handler answered,
with nothing before: the block then appeared above the message list and
pushed it down, under a pointer about to click a row. onProvideSearchResults
handlers that search elsewhere (a CRM's search by meaning) take seconds.

Each plugin's answer now shows as it comes, and the store keeps the plugins
still asked. One that has not answered after 300 ms gets the block at a fixed
height with placeholder rows under "Searching for more results…"; its
entries then fill that height, so the list moves once, with its own results.
A plugin that answers at once (one not searching for this query) shows
nothing.
2026-10-29 10:25:59 +01:00
Jacob ZeitzandClaude Opus 5.5 fa4db60032 feat(plugins): let a plugin search result's snippet mark what matched
An entry from onProvideSearchResults may wrap what matched in <mark>, as
SearchSnippet/get does, and the block above the message list highlights
it with the list's own SearchSnippetText. The host keeps the marks,
escapes everything else and cuts the snippet by its text, closing a mark
it cuts, so the snippet is still never rendered as HTML.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 10:03:27 +01:00
Till OberbeckmannandClaude Opus 5 797fb875e1 fix: keep the paragraph spacing of a draft written elsewhere #1416
A draft does not have to come from the composer: the JMAP API, another
client, an automation or a template can leave one in Drafts, and its
paragraphs carry no style, so every mail client lays them out with the
user agent's 1em margins. Since #1340 the composer stamps its own 4px
margin on every paragraph it serializes, so opening such a draft to read
it over and pressing Send re-flowed the message, and the composer showed
it at a spacing the recipient would never see.

What is loaded now keeps the spacing it came with: a paragraph with text
and no margin of its own is stamped with the mail default on the way in,
so the editor shows the message's own layout and what goes out is what
came in. The empty paragraph a new message is scaffolded with is left
alone, as are table cells, the quoted original and an embedded
signature. addParagraphSpacing skips a paragraph that already states a
margin, so nothing is declared twice.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-10-29 10:01:12 +01:00
Linus Rath 4aea0976a4 chore: update dependencies, postal-mime 4 and jest-dom 7 2026-10-29 01:52:40 +01:00
Linus Rath 6559b34135 fix: keep Mountain View's row actions, checkbox and star on the subject line when attachment chips make the row taller 2026-10-28 19:53:33 +01:00