Commit Graph
2849 Commits
Author SHA1 Message Date
Tobias Genannt 2b5a9dbfc5 feat: mirror regional presentation settings to plugin sandboxes
Plugins running in iframe sandboxes previously lacked access to the user's regional formatting settings (dateLocale, timeFormat 12h/24h, timeZone, and firstDayOfWeek) unless they requested privileged settings:read permissions.

This mirrors the host's resolved presentation preferences into the plugin sandbox:
- Adds RegionalSnapshot (locale, dateLocale, hour12, timeZone, firstDayOfWeek) to BackgroundInit, SlotInit, and LocaleChangeMsg.
- Implements snapshotRegionalSettings() in host-bridge, reusing host resolveDateLocale() and getEffectiveTimeZone().
- Subscribes stores/plugin-store.ts to useSettingsStore to broadcast updates to running sandboxes when regional preferences change.
- Exposes api.i18n.formatTime(date, options) and api.i18n.formatDate(date, options) along with regional getters on api.i18n.
2026-10-24 11:01:13 +02:00
Linus Rath d1f4ccaccf Update CHANGELOG for version 1.17.1 release
Updated the changelog to reflect the release of version 1.17.1 and removed the unreleased section for version 1.17.2.
2026-10-22 23:49:30 +02:00
Linus Rath 8a31a83bc9 fix: update next.js and dompurify for published advisories 1.17.1 2026-10-22 23:39:03 +02:00
Linus Rath 2be5408be5 chore: release 1.17.1 2026-10-22 23:22:40 +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
Linus Rath 310f910a6a fix: hand a mobile sign-in to the app when the browser was already signed in 2026-10-22 08:02:08 +02:00
Linus Rath 0650067884 chore: update vitest and vite to clear npm audit findings 1.17.0 2026-10-21 23:42:21 +02:00
Linus Rath ba44434401 chore: release 1.17.0 2026-10-21 23:28:02 +02: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 33212f1fad Merge pull request #1300 from VasilisNtovolos/fix/message-drag-blob-routing
fix: route dragged emails by owning account
2026-10-20 22:36:00 +02:00
Linus Rath 96c1cec19f Merge branch 'main' into fix/message-drag-blob-routing 2026-10-20 22:22:13 +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 8428219699 chore: drop the drag test notes from the test folder 2026-10-20 21:15:36 +02:00
Linus Rath eb6fb310da Merge branch 'main' into fix/message-drag-blob-routing 2026-10-20 21:15:36 +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 e1f2ba7dbc Merge pull request #1298 from dealerweb/fix/push-preferences-sandboxed-frame
fix: stop the push preference mirror from throwing in sandboxed plugin frames
2026-10-20 21:14:58 +02:00
Linus Rath 4f942417c8 fix: show pdf attachment previews in safari #1301 2026-10-20 21:08:01 +02:00
Linus Rath b586dc467c fix: keep a plugin's passphrase dialog open while the user types #1302 2026-10-20 21:01:02 +02:00
Linus Rath d9d6eb9be7 feat: let plugins search the settings and read the user's preferences 2026-10-20 20:27:08 +02:00
Linus Rath 647c24132c feat: let plugins read the app's name and version with api.app.getInfo 2026-10-20 20:19:38 +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 42cb8a8bbe chore: let a dev server announce another app version for plugin tests 2026-10-20 18:17:00 +02:00
Linus Rath a191ef8b02 feat: let plugins search mail with api.email.search 2026-10-20 18:16:29 +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 2196a4e4f4 chore: revert the 1.17.0 release 2026-10-20 17:32:54 +02:00
Linus Rath df2e4eeb13 chore: release 1.17.0 2026-10-20 17:26:41 +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 7fa207e8e3 feat: translate the Cut and Copy entries of the selection menus into every language 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 cfa16e1bc2 docs: clarify message drag routing verification 2026-10-20 15:49:05 +03:00
VasilisNtovolos 345fe64515 fix: route dragged emails by owning account 2026-10-20 15:45:47 +03:00