Commit Graph
376 Commits
Author SHA1 Message Date
Linus Rath d0134c3f46 fix: name every icon button and switch in Settings for what it does 2026-10-28 04:50:27 +01:00
Linus Rath ab3addefc3 fix: show the focus ring on the About card in the settings sidebar and name it by what it shows 2026-10-28 04:42:36 +01:00
Linus Rath b45c914cf2 fix: give each settings page an h1 with its name on the desktop 2026-10-28 04:40:48 +01:00
Linus Rath 867ee3e828 fix: drop the Learn more button next to sub-addressing that opened the identity manager 2026-10-28 04:37:55 +01:00
Linus Rath c833e24471 fix: cancel editing a tag with Escape 2026-10-28 04:35:41 +01:00
Linus Rath b54d57065c fix: name the settings jump chips after their section without gluing on the Advanced badge 2026-10-28 04:33:42 +01:00
Linus Rath 3e1024957f fix: let every settings search result land on its row, match every word of a query, and turn on Advanced only for advanced rows 2026-10-28 04:31:53 +01:00
Linus Rath 286c1bd7c9 fix: show the tag, calendar and address book row actions on touch screens and on keyboard focus 2026-10-28 04:13:01 +01:00
Linus Rath c6f902dc32 feat: delete address books and contact categories from Settings 2026-10-28 04:11:23 +01:00
Linus Rath f4cade224c fix: ask in the app's own dialogs instead of browser confirm boxes in the admin panel 2026-10-28 03:54:36 +01:00
Linus Rath 714d2b84da fix: confirm resetting settings in a dialog and report backup results in toasts instead of alerts 2026-10-28 03:44:47 +01:00
Linus Rath b30c2764f0 fix: confirm deleting folders, calendars, credentials and other things that can't come back in one dialog 2026-10-28 03:41:53 +01:00
Linus Rath d70bf4ae74 fix: delete tags and filter rules at once with an Undo toast 2026-10-28 03:32:48 +01:00
Linus Rath 9d3ae2203f fix: ask before the identity, filter rule and Sieve editors drop unsaved changes, and dim the whole window behind them 2026-10-28 03:18:52 +01:00
Linus Rath 5dded2243a fix: save out of office changes as you make them, with date errors shown under the fields 2026-10-28 03:09:29 +01:00
Linus Rath 0f1d226d4c fix: show folder names in the phone folder settings and move the row actions into a menu 2026-10-28 02:43:29 +01:00
Linus Rath dc0fe7d980 fix: open the settings page a link names on the phone instead of the settings list 2026-10-28 02:33:09 +01:00
Linus Rath 6e97ca574d fix: make switches that are off visible against the page 2026-10-28 01:50:56 +01:00
Linus Rath c355b0d552 feat: add a setting to turn off the placeholder warning 2026-10-27 22:32:38 +01:00
Linus Rath 8940f45baa fix: apply a custom calendar color picked in the system color dialog #1366 2026-10-26 20:01:09 +01:00
Linus Rath 4bfaf8abce Merge pull request #1363 from lucamzanon/feat/account-archive-restore-prompt 2026-10-26 19:26:13 +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 7da326b86e fix: keep the server's path in the fallback CalDAV address 2026-10-26 15:15:58 +01:00
lucamzanon 2f8c6e13bf feat: offer to restore the saved account list on a new device
Part 3 of 3 of the account archive (#1198). Signing in on a browser that
knows no other account, with a list saved for that account, opens a dialog
asking for the backup password and restores the list as Settings does.
Not now hides the offer for that account in this browser; the restore
stays in Settings.
2026-10-26 12:23:18 +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
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 cb663d2222 fix: keep settings switches full width next to long labels 2026-10-25 12:49:55 +01: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 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 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
Linus Rath f8aca5bb25 refactor: put folders and tags on one page 2026-10-19 17:57:38 +02:00
Linus Rath c57f82f0a7 refactor: group composing into sections and fold templates and a signatures link into it 2026-10-19 17:55:12 +02:00
Linus Rath a591ae0683 refactor: merge language, default apps and the tour into a general page 2026-10-19 17:51:26 +02:00
Linus Rath 58f968a48c refactor: lead notifications with new mail, move the tab badge in and invitation parsing to calendar 2026-10-19 17:48:57 +02:00
Linus Rath d86aa1d12b refactor: group security into sign-in, other apps and devices, and encryption 2026-10-19 17:46:42 +02:00
Linus Rath b1fa88841d refactor: move identities, sub-addressing and multi-account options onto the account page 2026-10-19 17:44:11 +02:00
Linus Rath 5b1d056eef feat: split the message list out of reading and fold content and senders into it 2026-10-19 17:40:52 +02:00
Linus Rath 1025c1973d refactor: fold the layout and themes tabs into appearance as sections 2026-10-19 17:33:39 +02:00
Linus Rath 988416aa3d feat: add an advanced switch that hides power-user settings until turned on 2026-10-19 17:20:38 +02:00
Linus Rath 4c0017d0c1 feat: rework the demo around one persona with two accounts and a shared mailbox
The demo user becomes Nora Lindqvist, engineering lead at Meridian Labs,
in the week of a product launch. The fixtures tell one story across mail,
contacts, calendar, tasks and files, and exercise the features the
screenshots and the public demo should show:

- a second, mail-only login (her personal domain) and the shared Support
  mailbox delegated to the work account, so the account switcher, the
  shared section and the merged inbox have real content
- raw headers the way Stalwart writes them: the sender check fails on
  the phishing mail, newsletters carry a one-click unsubscribe, one mail
  asks for a read receipt, and spam scores show in the details
- an iMIP invitation with a served .ics, an event waiting for the answer
  on the calendar, and RSVP patches applied in the demo client
- @mentions as mailto links in a received mail, a verification code
  twelve minutes old, nested folders, named tags on the mail, contact
  groups, a scheduled message and tasks switched on
- every attachment and file backed by real bytes under public/demo,
  generated by `scripts/demo-assets/generate.mjs`; contact photos are
  bundled portraits instead of requests to randomuser.me
- folder counts computed from the mail instead of hand-kept numbers

Demo login seeds the tags, templates and merged-inbox settings once per
device and switches the cross-account gate on for the session; "Reset"
restores them. `bulwark-demo-simulate=off` in localStorage stops the
simulated incoming mail for screenshot runs.
2026-10-18 19:48: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
Linus Rath 4fa22200e7 fix: keep vacation forwarding and plugin vetoes when a tag rename rewrites the filters #854 2026-10-18 15:03:20 +02:00