Commit Graph
2431 Commits
Author SHA1 Message Date
Linus Rath c633185cda Merge branch 'main' into feat/stalwart-1.0
# Conflicts:
#	CONTRIBUTING.md
#	LICENSE
#	README.md
#	app/api/calendar-agenda/route.ts
#	app/api/wopi/files/[fileId]/contents/route.ts
#	app/api/wopi/launch/route.ts
#	components/calendar/calendar-app.tsx
#	components/calendar/calendar-day-view.tsx
#	components/calendar/calendar-month-view.tsx
#	components/calendar/calendar-week-view.tsx
#	components/calendar/event-modal.tsx
#	components/contacts/contact-detail.tsx
#	components/email/email-composer.tsx
#	components/email/email-list.tsx
#	components/files/file-browser.tsx
#	components/files/files-app.tsx
#	components/files/folder-tree-sidebar.tsx
#	components/filters/filter-rule-modal.tsx
#	components/mail/mail-app.tsx
#	hooks/use-mailbox-drop.ts
#	integration/run-tests.sh
#	lib/__tests__/calendar-agenda-route.test.ts
#	lib/__tests__/jmap-draft-lifecycle.test.ts
#	lib/__tests__/web-push.test.ts
#	lib/account-state-manager.ts
#	lib/jmap/client-interface.ts
#	lib/jmap/client.ts
#	lib/jmap/types.ts
#	lib/message-list-order.ts
#	lib/sieve/generator.ts
#	lib/sieve/parser.ts
#	lib/telemetry/payload.ts
#	lib/thread-utils.ts
#	lib/unified-mailbox.ts
#	lib/web-push.ts
#	lib/wopi/token.ts
#	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/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/tr/common.json
#	locales/uk/common.json
#	locales/zh-TW/common.json
#	locales/zh/common.json
#	scripts/lite/lib.mjs
#	stores/__tests__/calendar-store-synthetic-ids.test.ts
#	stores/__tests__/email-store-shared-folder-keywords.test.ts
#	stores/__tests__/email-store-unified-actions.test.ts
#	stores/__tests__/file-store.test.ts
#	stores/email-store.ts
#	stores/file-store.ts
#	stores/message-list-tabs-store.ts
2026-10-12 08:35:08 +02:00
Linus Rath 37440e02b0 fix: let tasks move into and live in calendars shared with you #1204 2026-10-12 07:36:46 +02:00
Linus Rath 19797b4c65 fix: sort the message list by date sent when that order is picked #1219 2026-10-12 07:22:00 +02:00
Linus Rath c587ad459e fix: keep the dark body backdrop full width in Mountain View and show Gmail's help button 2026-10-12 02:00:02 +02:00
Linus Rath f160dae25c fix: stop the panes sliding when animations are turned off #1215 2026-10-12 01:55:57 +02:00
Linus Rath 66122ae652 feat: order Mountain View's bulk actions like Gmail's and search the Move to menu 2026-10-12 01:54:15 +02:00
Linus Rath 0a82835626 feat: lay out Mountain View's account card like Gmail's 2026-10-12 01:53:19 +02:00
Linus Rath 5efe718cf0 feat: order Mountain View's message menu like Gmail's and add Find emails from 2026-10-12 01:45:35 +02:00
Linus Rath 986daef90b feat: add Gmail's side panel with calendar, tasks and contacts to Mountain View 2026-10-12 01:40:30 +02:00
Linus Rath cedac10c29 feat: use Gmail's advanced search form in Mountain View 2026-10-12 01:34:02 +02:00
Linus Rath 78e68e8886 feat: write Mountain View replies in place under the conversation 2026-10-12 01:29:55 +02:00
Linus Rath c652fec371 feat: give Mountain View's compose window Gmail's title bar and bottom bar 2026-10-12 01:26:03 +02:00
Linus Rath 943a92bd42 feat: show the whole conversation around the open message in Mountain View 2026-10-12 01:16:15 +02:00
Linus Rath 1980de68c8 feat: give Mountain View's open message Gmail's toolbar, pager and header 2026-10-12 01:10:10 +02:00
Linus Rath 20b52a060f feat: draw Mountain View's message rows like Gmail's 2026-10-12 01:01:09 +02:00
Linus Rath cf558e7e9f feat: lay out Mountain View's navigation like Gmail's, with a Labels section 2026-10-12 00:46:48 +02:00
Linus Rath ae151cec25 feat: set Mountain View's content on a rounded card over a tinted canvas 2026-10-12 00:37:59 +02:00
Linus Rath 2534c4fde5 chore: release 1.14.1 1.14.1 2026-10-11 22:36:24 +02:00
Linus Rath 6e5e071078 fix: stop painting plain mails on a gray background in dark mode 2026-10-11 22:19:05 +02:00
Linus Rath 864d2a85e6 test: stub elementFromPoint for the mousedown in the mention tests 1.14.0 2026-10-11 21:27:06 +02:00
Linus Rath 517cd019a8 Merge branch 'main' of https://github.com/bulwarkmail/webmail 2026-10-11 21:16:27 +02:00
Linus Rath 866312129b test: click into the body before typing in the mention tests 2026-10-11 21:15:14 +02:00
Linus Rath 38f6ad805b fix: translate the rule menu's loading and run messages 2026-10-11 21:13:40 +02:00
Linus Rath 11cf2415d6 Merge pull request #1210 from lucamzanon/fix/mv-collapsed-rail
fix(mountain-view): let the collapsed rail fill its 72px column
2026-10-11 21:09:30 +02:00
Linus Rath a248144e54 chore: release 1.14.0 2026-10-11 21:08:32 +02:00
Linus Rath 1ed7ec0327 Merge pull request #1213 from shukiv/fix/draft-body-from-body-parts
fix: take a re-opened draft's body from its body parts only
2026-10-11 21:03:18 +02:00
Linus Rath 968c351d4d Merge pull request #1212 from shukiv/fix/composer-attachment-list-scroll
fix: scroll the attachment list instead of burying the send button
2026-10-11 21:03:14 +02:00
Linus Rath a61a7c503e fix: show the sender's name in the contact popover when the saved contact has none 2026-10-11 21:01:42 +02:00
Linus Rath b1a0c069c6 fix: keep the participant suggestions from being cut off by the event form 2026-10-11 20:55:00 +02:00
Linus Rath 687fde4185 fix: stop Bitwarden filling the participant field and line its suggestions up with the typed text 2026-10-11 20:50:10 +02:00
Linus Rath f382568d1d fix: stop Bitwarden offering logins in the mail search box 2026-10-11 20:49:37 +02:00
Linus Rath 8c7758b2f1 fix: line the recipient suggestions up with the typed text on desktop too 2026-10-11 20:45:52 +02:00
Linus Rath 6ea5526783 fix: stop Bitwarden offering logins in the recipient fields 2026-10-11 20:43:47 +02:00
Linus Rath 62a00f713f fix: widen the recipient suggestions on a phone to the whole row 2026-10-11 20:39:59 +02:00
Linus Rath 63c9835099 fix: translate the new composer and send strings 2026-10-11 20:36:38 +02:00
Linus Rath 90bd575e85 fix: make the formatting buttons easier to hit on a phone 2026-10-11 20:31:56 +02:00
Linus Rath 481fa06ed8 fix: keep Reply All on one line in the conversation view 2026-10-11 20:31:21 +02:00
Linus Rath 8d23cfc888 fix: show the suggested name above its address on a phone 2026-10-11 20:30:43 +02:00
Linus Rath 46a1adbb2d fix: start at the top of the body when tabbing into a new message 2026-10-11 20:26:43 +02:00
Linus Rath e3f0f6cb38 fix: fold the formatting toolbar away on a phone behind a Formatting button 2026-10-11 20:21:47 +02:00
Linus Rath f025b2101d fix: name the composer close and conversation back buttons for screen readers 2026-10-11 20:18:19 +02:00
Linus Rath 47f6378d3f fix: stop calling a reload without Remember me an expired session 2026-10-11 20:15:45 +02:00
Linus Rath 4b282e7064 fix: give touch tips in the welcome banner on a phone 2026-10-11 20:09:31 +02:00
Linus Rath 434ab6251e fix: show one Edit button on a draft 2026-10-11 20:07:46 +02:00
Linus Rath f8157a92f4 fix: hide the via badge when it repeats the sender name 2026-10-11 20:07:05 +02:00
Shuki Vaknin 2a45f6099c fix: take a re-opened draft's body from its body parts only
A draft that carried attachments and no message re-opened with the
contents of one of the attachments as its text. Attach a .csv to an
empty draft, save it, re-open it: the editor shows the rows of the csv
as what you had written, and the next save or send makes that the real
message.

Both edit-draft paths built the text body by joining every value in
bodyValues:

    Object.values(draft.bodyValues).map(v => v.value).join('\n')

bodyValues is keyed by part id, and getEmail asks for
fetchAllBodyValues, which per RFC 8621 4.1.4 returns a value for every
text/* part of the message - attachments included. So any attached
.csv, .txt, .log or .md was joined in as body text, and with no html
body to prefer it became the whole message.

Take the body from the parts the server lists as the body instead, and
from nothing else. A draft whose textBody is empty now re-opens empty,
which is what an attachments-only draft is.

The selection lives in lib/email-body-selection.ts beside
getRenderableHtmlBody, which exists because the viewer and the mobile
thread view had already drifted apart once (#489). mail-app and the pro
email tab held character-for-character copies of this join, so the same
drift was already in place.
2026-10-11 18:04:26 +00:00
Shuki Vaknin 58a4041aaa fix: scroll the attachment list instead of burying the send button
Expanding a long attachment list made the composer unusable. With a few
dozen files, "+N" grew the chip row past the bottom of the composer: the
last rows were off-screen, the send toolbar went with them, and nothing
scrolled, so the only way out was to collapse the list again.

The row is a shrink-0 sibling of the body's scroll container, so every
pixel it takes comes out of the composer and out of nothing else, and it
has no scroller of its own. Collapsed that is fine - three chips and a
counter. Expanded, its height is the attachment count.

So bound it when it is expanded and let it scroll itself. 30vh keeps the
toolbar on screen on a laptop and still shows several rows; collapsed
behaviour is untouched, since three chips never needed a cap.

overscroll-contain stops a scroll that reaches the end of the list from
continuing into the message body behind it, which is the usual annoyance
once a small scroller appears next to a large one.
2026-10-11 18:04:26 +00:00
Linus Rath 54b74363e7 feat: offer one-click times in the Schedule send dialog 2026-10-11 20:03:42 +02:00
Linus Rath 46e4f8385c fix: mark quotes and list items in the plain-text part of sent mail 2026-10-11 20:00:47 +02:00
Linus Rath e9a37e14bd fix: close an autosaved draft without asking about unsaved changes 2026-10-11 19:57:10 +02:00