Commit Graph
2051 Commits
Author SHA1 Message Date
Linus Rath d37fa4de44 Merge pull request #1496 from HOLOEYE-JZ/feat/plugin-side-panel 2026-11-02 20:24:02 +01:00
Linus Rath cd99a5a410 Merge pull request #1495 from HOLOEYE-JZ/feat/plugin-task-reminders 2026-11-02 20:24:01 +01:00
Linus Rath 51a0481718 Merge pull request #1479 from tobiasge/feat/plugin-calendar-birthdays 2026-11-02 20:24:00 +01:00
Linus Rath 7b59f2562f Merge pull request #1493 from ibayue/feat/signature-insert-toggles 2026-11-02 20:23:58 +01:00
Linus Rath 42add9400c Merge pull request #1502 from pirate/fix/mailbox-pagination-only 2026-11-02 20:23:57 +01:00
Linus Rath 45c1d9b3d6 Merge pull request #1499 from Schrobo/fix/shared-mailbox-push-target 2026-11-02 20:23:56 +01:00
Linus Rath b8aa44c16f Merge pull request #1492 from shadow1runner/feat/template-inline-images 2026-11-02 20:23:55 +01:00
Linus Rath 8ef3ad901e fix: page large folder lists on stalwart 1.0 and retry when mail arrives mid-load #1502 2026-11-02 20:18:49 +01:00
Linus Rath 1a3306322f fix: let only plugins that may change the calendar or tasks silence a reminder #1495 2026-11-02 20:17:11 +01:00
Linus Rath 2b7f5b1b4e Merge branch 'feat/boot-skeleton' 2026-11-02 20:16:37 +01:00
Linus Rath 29e7a5b8c7 fix: give plugins the birthdays whose day overlaps the asked range #1479 2026-11-02 20:15:59 +01:00
Linus Rath 244e8b7b5a fix: keep the login and mailbox owner in notification links on safari 16 #1499 2026-11-02 20:15:34 +01:00
Linus Rath f1b2c20f1d chore: undo stray formatting changes from the signature toggles #1493 2026-11-02 20:15:29 +01:00
Linus Rath 14e1ab5f26 test: cover quick reply with the reply signature toggle off #1493 2026-11-02 20:14:49 +01:00
Linus Rath 0bacfb389e Merge branch 'feat/boot-skeleton-mail' into feat/boot-skeleton
# Conflicts:
#	app/boot-skeleton.css
#	lib/boot-skeleton/boot-script.ts
2026-11-02 20:01:22 +01:00
Linus Rath 3db7b745d0 Merge branch 'feat/boot-skeleton-calendar' into feat/boot-skeleton
# Conflicts:
#	app/boot-skeleton.css
#	components/boot-skeleton/shell.tsx
2026-11-02 19:51:39 +01:00
Nick Sweeting c862909fdd fix: respect single-call paging and preserve folders on page failures 2026-11-02 10:50:50 -08:00
Linus Rath 56678fd499 Merge branch 'feat/boot-skeleton-auth' into feat/boot-skeleton
# Conflicts:
#	components/boot-skeleton/shell.tsx
2026-11-02 19:42:04 +01:00
Nick Sweeting 2262b2baf1 fix: paginate mailbox retrieval without sidebar changes 2026-11-02 09:06:27 -08:00
Szymon Chroboczek 62906e45dc fix: preserve mailbox owner in push notification links 2026-11-02 12:47:44 +01:00
daluchenandClaude Code 1f8b1f4533 feat: add signature auto-insert toggles, off by default
Automatic signature insertion was unconditional: any identity with a
signature got it embedded in new mail and appended to replies, forwards
and quick replies. Users who want a signature only in specific contexts
had no way to opt out.

Add two per-account synced settings, both defaulting to off:

- signatureNewMailEnabled: insert the signature in new messages (and
  re-opened drafts, which open in compose mode)
- signatureReplyForwardEnabled: append it in replies, forwards and the
  quick reply box

With a toggle off the composer neither embeds the signature into the
body, nor appends one at send or draft-save time, nor shows the
read-only preview under the editor - the preview would promise a
signature that never goes out. A signature pasted in by hand is never
stripped (bodyCarriesSignature still short-circuits the append).

Also flip signatureSeparatorEnabled's default from true to false: the
RFC 3676 "-- " delimiter surprised users more than it helped. Only the
default changes - no migration, so users who already set it keep their
choice.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-11-02 11:05:17 +08:00
Helmut Wolf 48f0b94ee6 feat: send a template's data: images as inline parts #1490
Images in a template arrive as data: URIs (an imported templates file, or a
template saved from a message with a pasted image) and went out as they
were, so Gmail and Outlook did not show them. Inserting a template now
uploads each one like a pasted image and tags it with the cid, so the send
path turns it into a cid: part in multipart/related.
2026-11-01 20:15:52 +01:00
Jacob Zeitz b5558a66d8 feat(plugins): a side panel beside the mail for plugins
A frame slot `side-panel`: a plugin's panel right of the mail list and
reader, opened from a button in the panel rail (Mountain View's, or a slim
rail in the default layout while a plugin offers one). `ui.setSidePanel`
names its button; `ui.openPanel('side-panel')` opens it.

`ui.setSidePanel` takes `rail: false`: the rail draws no button for the
plugin's panel, which then opens only on the plugin's request
(openPanel / togglePanel('side-panel')), e.g. from a top bar action. A
rail left without buttons is not drawn, in the default layout and in
Mountain View's side panel alike.
2026-11-01 20:07:03 +01:00
Jacob Zeitz 9050724fd1 feat(plugins): task reminders reach plugins, which may show a reminder themselves
onCalendarAlert now fires for a task's display alert too, as
{ id, taskId, taskTitle, triggerTime }, and closing that reminder's toast
fires onCalendarAlertAcknowledge with { alertId, taskId }. A task's
reminder reaches only plugins with tasks:read, an event's only plugins
with calendar:read; either permission registers the hooks, and the host
hands each call only to a plugin holding the one it needs.

onBeforeCalendarAlert, a new intercept, runs before Bulwark shows a
reminder of an event or a task, with the same payload. A plugin that
shows reminders itself returns false: Bulwark then plays no sound, sets
no title alert and shows no toast for that reminder, while
onCalendarAlert still fires. Like the reminder it runs in every open
tab, and each tab follows its own answer. It fails open within five
seconds, so a hung plugin delays a reminder but never drops it. Without
a handler the reminder shows at once, as before.
2026-11-01 20:06:38 +01:00
Linus Rath d2205b9c09 Merge branch 'feat/boot-skeleton-cfa' into feat/boot-skeleton
# Conflicts:
#	app/boot-skeleton.css
2026-11-01 19:59:52 +01:00
Linus Rath 63e62865d6 Merge branch 'feat/boot-skeleton-settings' into feat/boot-skeleton
# Conflicts:
#	app/boot-skeleton.css
2026-11-01 19:59:39 +01:00
Linus Rath c06b4b5e28 feat: show the calendar's grid while the app loads 2026-11-01 19:48:20 +01:00
Linus Rath b6ca61f8a7 feat: draw the new-contact form while the app loads on /contacts/new 2026-11-01 19:47:19 +01:00
Linus Rath 57c1d5d472 feat: show the contacts, files and plugin page shapes while the app loads 2026-11-01 19:36:09 +01:00
Linus Rath afe3fca08a feat: draw the mail page's folders, list and reader while the app loads 2026-11-01 19:33:35 +01:00
Linus Rath f5bcc8d47d feat: show the sign-in, admin and setup pages' shape while they load 2026-11-01 19:25:13 +01:00
Linus Rath 5166cd0a5a feat: show the settings page's shape while the app loads 2026-11-01 19:24:13 +01:00
Linus Rath 8ae78fe641 feat: read the Pro tabs before the first paint 2026-11-01 19:15:54 +01:00
Tobias Genannt 19a522a4a0 feat: expose contact birthday calendar and events in plugin calendar api
- Include virtual birthday calendar in api.calendar.listCalendars when showBirthdayCalendar is enabled and plugin holds contacts:read
- Merge contact birthday events into api.calendar.getEvents and support single event retrieval in api.calendar.getEvent when plugin holds contacts:read
- Use same start and end date range bounds as regular events in getEvents
- Guard against mutating birthday calendar or events via createEvent, updateEvent, or deleteEvent
- Emit onCalendarChange when showBirthdayCalendar setting changes or when contacts are modified
- Add unit tests for birthday calendar listing, querying, filtering, permission checks, and mutation guards
2026-11-01 18:54:06 +01:00
Linus Rath 3f3dfebb84 test: keep archived items without accountId in the client test #1480 2026-11-01 18:53:12 +01:00
Linus Rath 441371554b feat: draw the rail's add app button in the page skeleton 2026-11-01 18:48:01 +01:00
Linus Rath 8d790b29fd feat: show the page's skeleton on Lite pages while their language loads 2026-11-01 18:41:58 +01:00
Linus Rath 943276696b feat: paint the saved theme, density and layout before the app loads 2026-11-01 18:41:58 +01:00
Linus Rath f5ed12f5cb refactor: keep the density tables and legacy settings tabs in plain modules 2026-11-01 18:41:36 +01:00
Linus Rath 55f1875f20 refactor: take quick reply plugin recipients from the quick reply envelope #1445 2026-11-01 18:18:48 +01:00
Linus Rath 5caf3378b2 Merge pull request #1445 from illuwa-soft/feat/upstream-quick-reply-actions
feat: offer composer plugin actions in quick reply
2026-11-01 18:15:18 +01:00
Linus Rath dd94a2b7c8 refactor: keep composer snapshot comments in English #1443 2026-11-01 18:15:13 +01:00
Linus Rath 4a597eb0dc Merge pull request #1443 from illuwa-soft/feat/upstream-composer-read-api
feat: add composer snapshots and conditional edits

# Conflicts:
#	lib/__tests__/plugin-sandbox-runtime-host-gate.test.ts
#	lib/plugin-sandbox/host-api.ts
2026-11-01 18:13:10 +01:00
Linus Rath 4cd75f4d07 refactor: keep the toast limits named and comments in English #1442 2026-11-01 18:12:42 +01:00
Linus Rath 6915813262 Merge pull request #1442 from illuwa-soft/feat/upstream-progress-toasts
feat: expose frame-scoped plugin progress toasts

# Conflicts:
#	lib/plugin-sandbox/host-bridge.ts
2026-11-01 18:11:12 +01:00
Linus Rath b903ba1e7a Merge pull request #1482 from HOLOEYE-JZ/feat/plugin-task-links
feat: let plugins set task links and related mail
2026-11-01 18:10:57 +01:00
Linus Rath cc6b8899d8 Merge pull request #1481 from HOLOEYE-JZ/feat/plugin-task-alerts
feat: let plugins set task alerts
2026-11-01 18:10:56 +01:00
Linus Rath a3d4853974 fix: hide out of office when the account lacks the vacation permission #1488 2026-11-01 17:48:11 +01:00
Linus Rath c4d9a918bf feat: let admins preset and lock where a new search looks #1485 2026-11-01 17:44:37 +01:00
Linus Rath e4338ac47d feat: add the Search in setting to Message list settings #1485 2026-11-01 17:44:15 +01:00