1486 Commits
Author SHA1 Message Date
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 1bd1a6b123 Merge pull request #1334 from HOLOEYE-JZ/feat/sidebar-tags-first
feat: admin policy gate to list the Tags above the shared mailboxes
2026-10-24 17:55:01 +02:00
Linus Rath 3b8dd4cd82 Merge pull request #1317 from LeonardNJU/feat/plugin-sidebar-heading-actions
feat(plugins): allow inline actions in collapsible sidebar headers
2026-10-24 17:54:53 +02:00
Linus Rath 10caa9e2f3 Merge pull request #1316 from ghozty/feat/app-name-strings
feat: name the app with the configured APP_NAME in user-facing strings
2026-10-24 17:54:49 +02:00
Jacob ZeitzandClaude Opus 5.5 96526c1b41 feat: admin policy gate to list the Tags above the shared mailboxes
A new feature gate, tagsAboveSharedEnabled (default off, so the sidebar
keeps its order), lists the Tags section above the shared mailboxes
instead of below them. With many shared mailboxes expanded, the tags
otherwise end up out of sight. In Mountain View the tags then follow the
Labels list directly, also when More is open.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 08:54:23 +02:00
Linus Rath a037f9a6e9 fix: do not offer push onboarding while the resync is restoring the subscription #1321 2026-10-22 23:15:32 +02:00
Linus Rath 7049844cf3 fix: keep the message list within the screen on phones 2026-10-22 23:08:39 +02:00
lsamc 51404ed015 feat(plugins): allow inline actions beside sidebar section headings 2026-10-21 21:20:29 -04:00
ghoztyandClaude Opus 5.5 30f51e5ca4 feat: name the app with the configured APP_NAME in user-facing strings
Some user-facing strings still said "Bulwark" on a deployment with its own
APP_NAME: Settings > General > Default apps (protocol handlers), the "Open
Bulwark" notification, the rate-limit banner and toast, the plugin connect
dialog, one plugin permission text and the connector page.

These strings now take an {appName} placeholder, filled by productName():
the configured APP_NAME, or "Bulwark" when it is unset or the default
"Webmail" (the same rule as the TOTP issuer and the About card, #1160).
A stock install reads as before.

The settings search (the settings page and api.app.searchSettings) indexes
these texts with the name filled in, so "bulwark" or the configured name
finds Default apps and no result carries the raw placeholder.

Locales: the 13 keys in every locale that has "Bulwark" in them. Languages
that inflect the name (cs, et, hu, ko, ro, sk, tr) use a neutral form such
as "{appName} uygulamasında" instead of a declined "Bulwark'ta"; a native
check of those is welcome.

Not changed on purpose: the mobile app, push relay, Lite, demo and admin
texts, which speak about Bulwark itself.

Closes #1314

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 04:14:54 +03:00
Linus Rath ed42c5a92d fix: cancel the original scheduled send before creating its replacement on reschedule #1308 2026-10-21 19:42:56 +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 80323148d2 fix: hide sign out of admin for stalwart admins signed in automatically 2026-10-21 00:09:30 +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 b812fe62f4 fix: keep the composer's editor-ready handler stable so a repeated report can't loop 2026-10-20 21:25:17 +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 617b9b3b51 fix: keep the composer's editor-ready handler stable so a repeated report can't loop 2026-10-20 21:24:03 +02:00
Linus Rath d292f4c376 Merge pull request #1299 from VasilisNtovolos/fix/pro-blob-routing
fix: preserve message ownership in Pro blob downloads
2026-10-20 21:15:08 +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 1d9e908e63 fix: stop the pane divider from following the mouse after the button is released over a frame 2026-10-20 17:53:18 +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
Linus Rath 416e59fa54 fix: give the admin panel the real navigation rail, extension icons and the plugin settings last
The admin drew its own copy of the rail, with a logo and only the app
links, next to a sidebar that signed out from its footer. It now renders
the webmail's NavigationRail (desktop and phone), which needs the
translation, theme and tour providers under /admin, so the admin layout
loads the message catalog itself; the rail marks Admin as the current
app for password admins too. The sidebar footer carries the admin
session links and the same about footer as the settings. Plugin and
theme rows and the detail header show the extension's icon from the
directory listing instead of a generic one, and a plugin's own settings
move to the bottom of its page, after availability, permissions and
versions.
2026-10-20 15:38:55 +02:00
Linus Rath 10b4d2a9db feat: rework the admin panel around a settings-style sidebar and one URL per page
The old panel kept its active tab in a store, so every page sat at
/admin, the sidebar duplicated the webmail rail by hand, and each page
was a stack of boxed cards with their own save buttons. Plugin settings
were only reachable through a gear icon in a row of five.

- one catch-all route for the whole panel; pages switch through
  history.pushState, so `/admin/plugins/<id>`, the back button, bookmarks
  and connector links all work without a route transition
- sidebar laid out like the user settings: back to mail, search over
  pages and their sections, two group headings, change password and
  sign out at the bottom; the phone shows a list, then the page
- pages use SettingsSection rows instead of nested cards, with one page
  header, one flash message and one save bar at the bottom (Discard,
  Save, Ctrl+S); the unsaved-changes prompt still guards leaving
- plugins and themes are lists of rows with a toggle each; a row opens
  the extension's own page with its settings, force-on, permissions,
  kept versions and removal
- overview shows stat tiles, server facts and recent activity
- old `/admin?tab=x` links redirect; the tab store is gone and the
  connector registry resolves admin links to the page URL
- `NEXT_TURBOPACK_ROOT` overrides the Turbopack root so `next dev` runs
  from a worktree with a junctioned node_modules
2026-10-20 15:16:05 +02:00
VasilisNtovolos 41b70853fa fix: preserve message ownership in Pro blob downloads 2026-10-20 14:33:42 +03: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 dd8aa05151 feat: use simpler calendar, contacts and files icons in the app switcher 2026-10-19 21:08:25 +02:00
Linus Rath fdf448d0b7 fix: give the calendar, contacts, files and settings sidebar headers the mail header's height 2026-10-19 20:59:44 +02:00
Linus Rath 39857a4dac fix: make the settings search box look like the mail search box 2026-10-19 20:57:59 +02:00
Linus Rath 31f4a4b4b3 feat: show one row of themes with a show all button 2026-10-19 20:49:24 +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
Linus Rath c870c1f118 Merge pull request #1288 from VasilisNtovolos/fix/preview-history-lifecycle
fix: keep file previews open during Strict Mode replay
2026-10-19 18:33:23 +02:00
Linus Rath 65c3d90e4d Merge pull request #1287 from VasilisNtovolos/fix/conversation-blob-routing
fix: route conversation blobs by originating message
2026-10-19 18:33:22 +02:00
Linus Rath c0205bcb68 Merge pull request #1286 from tobiasge/fix/month-view-column-alignment
fix(calendar): align month view day columns with the header
2026-10-19 18:33:20 +02:00
Linus Rath f5aa338556 refactor: give every settings page section an anchor for the jump row and links 2026-10-19 18:19:28 +02:00
Linus Rath 401d49471e feat: let settings links name a section and add a jump row to each page 2026-10-19 18:14:01 +02:00
Linus Rath a615f96876 refactor: regroup the settings sidebar into mail and apps with plugin pages under add-ons 2026-10-19 18:07:48 +02:00
Linus Rath dc521e11ca refactor: combine sidebar apps and plugins into add-ons, about and debug into backup and reset 2026-10-19 18:03:42 +02:00
Linus Rath 0b3bd26c9c refactor: fold download naming into reading as an advanced section 2026-10-19 17:59:30 +02:00