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 Zeitz and Claude 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 Zeitz and Claude 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
Linus Rath
38c983a886
fix: open the mention card on click and show on hover that the chip is clickable
2026-10-19 00:38:01 +02:00
Linus Rath
eb18a13878
feat: show the contact card for @mentions in the composer and in received mail
2026-10-18 18:23:45 +02:00
Linus Rath
fbae8acfb8
feat: turn @mentions into chips with a hover card
2026-10-18 17:52:11 +02:00
Linus Rath
0ac7bcb385
feat: show the message list as columns with one-line conversation rows #262
2026-10-18 17:37:21 +02:00
Linus Rath
8791fa5176
feat: offer contacts in @ mentions and add the picked one as a recipient
2026-10-18 16:36:28 +02:00