Commit Graph
283 Commits
Author SHA1 Message Date
Linus Rath 7025548ba1 fix: drop the composer footer labels when the composer itself is narrow #1375 2026-10-27 23:27:51 +01:00
Linus Rath ec295ad59f Merge pull request #1384 from VasilisNtovolos/fix/bulk-delete-partial-results
fix: reconcile confirmed permanent bulk deletions
2026-10-27 23:14:11 +01:00
Linus Rath be5fc12622 feat: let each translation list its own placeholder fill-in words 2026-10-27 23:03:41 +01:00
Linus Rath 011ff0e93a feat: warn before sending a message with unfilled placeholders 2026-10-27 22:30:33 +01:00
VasilisNtovolos ac99c68ef3 fix: reconcile confirmed permanent bulk deletions 2026-10-27 14:51:38 +02:00
Linus Rath 2f8b4863ff Merge pull request #1338 from HOLOEYE-JZ/feat/plugin-search-results 2026-10-26 19:32:56 +01:00
Linus Rath edba184bc0 fix: keep an Outlook-style reply from loading the quoted message's remote images 2026-10-26 19:30:18 +01:00
Linus Rath 12ee24a81a Merge pull request #1355 from maxhaomh/fix/outlook-quote-lines 2026-10-26 19:28:56 +01:00
Linus Rath e99cce05fe Merge pull request #1370 from maxhaomh/feat/disable-quick-reply 2026-10-26 19:24:49 +01:00
Max Hao 7216089629 feat: add quick reply feature with toggle in settings and tests 2026-10-26 11:40:47 -04:00
Linus Rath ceaa9cea39 fix: highlight only the open message in lists that mix accounts, not another account's message with the same id 2026-10-26 16:11:52 +01:00
Linus Rath 0b917d6262 fix: mark the replied, forwarded or receipted message as answered in its own account, not another account's message with the same id 2026-10-26 16:11:52 +01:00
Linus Rath f0392a6705 fix: check a meeting reply's sender against the attendee who answers, not the organizer 2026-10-26 15:15:58 +01:00
Linus Rath 8c9cf8e63e test: check draft account and threading headers in createDraft's options after the merge 2026-10-26 12:26:57 +01:00
Linus Rath b038c82dcc fix: only offer to apply a counter proposal sent by one of the meeting's participants 2026-10-26 12:25:31 +01:00
Linus Rath b5c6b67ba4 fix: keep a link in a printed message from redirecting the webmail tab 2026-10-26 11:22:10 +01:00
Linus Rath 6014142358 fix: show conversation and attached-message attachment names without directional override characters 2026-10-26 11:22:10 +01:00
Linus Rath c133659c83 fix: run links in conversation messages through the reader's link gate 2026-10-26 11:22:10 +01:00
Linus Rath cf2c27157d Merge branch 'main' into feat/stalwart-1.0
# Conflicts:
#	components/contacts/contacts-app.tsx
#	components/email/__tests__/composer-discard.test.tsx
#	components/email/calendar-invitation-banner.tsx
#	components/email/email-composer.tsx
#	components/mail/mail-app.tsx
#	components/pro/pro-compose-tab-body.tsx
#	components/pro/pro-email-tab-body.tsx
#	components/ui/__tests__/avatar.test.tsx
#	components/ui/avatar.tsx
#	hooks/use-mailbox-drop.ts
#	lib/__tests__/calendar-alerts.test.ts
#	lib/__tests__/jmap-calendar-tasks.test.ts
#	lib/__tests__/jmap-send-threading.test.ts
#	lib/demo/demo-client.ts
#	lib/demo/fixtures/calendars.ts
#	lib/jmap/client-interface.ts
#	lib/jmap/client.ts
#	lib/web-push.ts
#	stores/__tests__/contact-store.test.ts
#	stores/__tests__/email-store-thread-key.test.ts
#	stores/calendar-store.ts
#	stores/contact-store.ts
#	stores/email-store.ts
2026-10-26 10:14:12 +01:00
Max Hao 5430b9e446 fix: honor borderless Outlook-style HTML quotes 2026-10-25 22:22:41 -04:00
Jacob ZeitzandClaude Opus 5.5 fc438c275f feat: open the message a plugin's search result names
An entry of onProvideSearchResults may carry email: { id, accountId? }.
A click on it opens the message in the reader through the login that
reaches the account, as a list row does, and marks the entry while it
is open; any other click stays onAction.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 15:22:38 +01:00
Jacob ZeitzandClaude Opus 5.5 d02988f431 feat: show the results plugins provide through onProvideSearchResults
The hook was called on every search, but nothing showed its entries,
the list waited for it, and an entry's onClick could not cross from the
plugin's sandbox. Its entries are now drawn as a block above the
search's message list, a group per plugin and source.

Each plugin is asked on its own (HookBus.collect) beside the search, so
the list no longer waits, and the answer to a search that was replaced
is dropped. The answer is checked: at most 20 entries, a key and a
title, plain text cut to its limits. A click goes to the plugin that
gave the entry as onAction with surface "search-results", the entry's
key and the query; ExternalSearchResult loses onClick.

Closes #1336

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 15:22:33 +01:00
Linus Rath f7a4087c91 feat: split the Mountain View inbox into Unread and Everything else, as Gmail's unread first 2026-10-25 13:13:46 +01:00
Linus Rath 0b1463b7d5 feat: show attachment and code chips as Gmail pills in Mountain View 2026-10-25 12:48:49 +01:00
Linus Rath 9c360694bf fix: send paragraphs with the spacing the composer shows #1340 2026-10-25 12:27:13 +01:00
Linus Rath a49ab079ec fix: sanitize quoted and signature HTML in re-opened drafts (GHSA-g35q-3gpc-x2rr) 2026-10-24 22:13:19 +02:00
Linus Rath 6d459674f8 Merge pull request #1109 from hildebrandttk/fix/group-identity-sent-copy
fix: save a group identity's drafts in the group account's Drafts (#1…
2026-10-24 17:55:10 +02:00
Linus Rath b594a354a0 Merge remote-tracking branch 'origin/main' 2026-10-21 16:56:59 +02:00
Linus Rath 68047e7fdb fix: open the contact card in place instead of sliding in from the top left 2026-10-21 16:54:29 +02:00
Linus Rath 24317a7d92 test: drag the composer's plugin panels with pointer events 2026-10-20 21:25:18 +02:00
Linus Rath 69ae5200dc test: drag the composer's plugin panels with pointer events 2026-10-20 21:24:27 +02:00
Linus Rath c083c7e075 Merge pull request #1297 from dealerweb/fix/hover-actions-after-delete
fix: show the hover actions on a row that moves under a resting pointer
2026-10-20 21:15:03 +02:00
Linus Rath 976f3ea543 feat: keep the reader's side panel open across messages with its toggle in the toolbar 2026-10-20 19:12:20 +02:00
Linus Rath b825a54a73 fix: close the reader's toolbar menus when a click goes into the message or a plugin panel 2026-10-20 18:58:55 +02:00
Linus Rath e7a622d4ee feat: run the reader toolbar over the side panels to the right edge 2026-10-20 18:52:50 +02:00
Linus Rath ad3e529b8e feat: tell reader plugin frames whether they are on a phone, a tablet or a desktop 2026-10-20 17:21:13 +02:00
Linus Rath b89c127ed6 fix: tell a plugin that a composer panel is not on screen on a phone 2026-10-20 17:21:13 +02:00
Linus Rath 95003fd28b feat: let a plugin panel start folded until the user or the plugin opens it 2026-10-20 17:21:13 +02:00
Linus Rath 95bfb1681c feat: let a plugin's panel frame fill the panel and scroll inside 2026-10-20 17:21:13 +02:00
Linus Rath 2319f6a0f0 feat: let the user drag the composer's plugin panels wider or narrower 2026-10-20 17:21:13 +02:00
Linus Rath 2bb5a62ac4 feat: let a plugin open, close and toggle the panel its slot sits in 2026-10-20 17:21:13 +02:00
Linus Rath 8deb887e95 feat: let plugins see and act on text selected in a message, with a right-click menu and the side panel's selection 2026-10-20 17:21:12 +02:00
Linus Rath 00142540f6 feat: let plugins add entries to the right-click menu on selected text in the composer 2026-10-20 17:21:12 +02:00
Linus Rath a2136319fb feat: hand composer plugin panels the composer id, the draft and the selected text 2026-10-20 17:21:12 +02:00
dealerweb 2b01866399 fix: show the hover actions on a row that moves under a resting pointer 2026-10-20 11:38:34 +02:00
Linus Rath b5964ac544 fix: find the invited attendee under any sending identity when answering an invite #1283 2026-10-19 18:41:05 +02:00
Stefan Hildebrandt 04efcfc1f3 fix: save a group identity's drafts in the group account's Drafts (#1090)
Drafts were always created in the primary account, so a message composed as
a group identity sat in the member's own Drafts while its Sent copy (since the
previous commit) went to the group.

- createDraft takes { accountId, previousDraftAccountId }: the draft goes to
  the account that owns the From identity (resolveSendAccountId, now public
  and briefly caching the identity lists for autosave), and the replaced
  version is destroyed in the account it lives in.
- The composer tracks draftAccountId next to draftId (save, re-resolve of
  attachment blobs, send, discard, stashed state), since draft ids are only
  unique within one account.
- sendEmail destroys the sent draft in options.draftAccountId; discarding
  (inline and Pro tab) deletes it there, through the identity's login.
- Re-opening a draft from a group/shared Drafts folder (or a stamped
  aggregate row) keeps its account.
- resolveSendAccountId is optional on IJMAPClient; without it drafts stay in
  the primary account.
- Tests: client unit tests for draft placement / replacement / send cleanup,
  E2E spec 18 draft cases (autosave + send, discard).
2026-10-19 16:33:27 +02:00
Linus Rath 391ed6c018 Merge branch 'fix/security-audit-2026-10' 2026-10-19 12:58:50 +02:00
Linus Rath ff98865f90 fix: keep a quoted original from painting over the composer with a fixed-position overlay 2026-10-19 01:15:39 +02:00
Linus Rath aeb2aeda66 fix: stop a click on a mention chip from opening the mailto handler in Firefox 2026-10-19 00:47:05 +02:00