Commit Graph
428 Commits
Author SHA1 Message Date
Linus Rath 785c19fe8c fix: show the version footer in the settings sidebar only with advanced settings on 2026-10-28 19:57:01 +01:00
Linus Rath 4421c3ce7e fix: spin refresh icons the way their arrows point 2026-10-28 17:00:50 +01:00
Linus Rath 96797597c5 Merge branch 'main' into feat/org-features 2026-10-28 15:14:34 +01:00
Linus Rath 6724b04701 fix: put address book actions in settings behind a ⋮ menu on the phone, like calendars 2026-10-28 13:02:19 +01:00
Linus Rath f441f3e6d1 fix: show calendar, subscription and account addresses in settings left to right in arabic 2026-10-28 12:58:10 +01:00
Linus Rath b957bbcd8a fix: fit settings > calendar to touch screens and hide import and subscribe in the demo 2026-10-28 12:56:51 +01:00
Linus Rath 5be162d604 fix: name the calendar, contacts and files settings pages apart from the apps in the command palette 2026-10-28 12:54:34 +01:00
Linus Rath 0eb68f1743 Merge branch 'ux/settings-admin2' 2026-10-28 11:06:39 +01:00
Linus Rath 9bb94ebf62 fix: offer "go to <page>" for every settings page in the command palette, found by the settings search words 2026-10-28 10:51:01 +01:00
Linus Rath 5abc4a5334 fix: make the tag and address book row buttons and New tag full-size buttons with a touch hit area, and name each tag button after its tag 2026-10-28 10:44:18 +01:00
Linus Rath 8b2b77c349 fix: put the calendar row actions behind a ⋮ menu on the phone so names and the default badge fit, and make the row icons full-size named buttons 2026-10-28 10:41:08 +01:00
Linus Rath feac899133 fix: say "new calendar", "new app password", "new API key", "add public key", "sub-addressing" and "back to mail" in settings and the admin 2026-10-28 10:33:03 +01:00
Linus Rath 161c9d1de3 fix: ask "delete address book?" with a question mark, like the other delete prompts 2026-10-28 10:23:16 +01:00
Linus Rath 41b0afff4b test: expect the organisation lock note on a theme mode the admin locked 2026-10-28 10:20:15 +01:00
Linus Rath 9c2952c437 fix: take the tour to the screen of each step on a phone and count only the steps it shows 2026-10-28 10:19:13 +01:00
Linus Rath 5d90a850bd Merge branch 'feat/org-recovery' into feat/org-features
# Conflicts:
#	components/email/email-list.tsx
2026-10-28 09:17:56 +01:00
Linus Rath 272083399c Merge branch 'feat/org-tags' into feat/org-features
# Conflicts:
#	lib/admin/restriction-keys.ts
#	lib/jmap/client.ts
2026-10-28 09:15:17 +01:00
Linus Rath f1a666777b Merge branch 'feat/org-features' into feat/org-recovery 2026-10-28 09:08:49 +01:00
Linus Rath 4d846cfc91 fix: read the whole deleted items archive newest first and only for the account shown #1319
Stalwart's x:ArchivedItem/query without calculateTotal scans ids
ascending, stops at 5000 and only then reverses them, so the newest
items of a large archive never showed, and admin accounts got every
account's items. The review of the branch also found gaps around
account switches, restores and focus.

- Read the archive in pages of 500 with calculateTotal, newest first,
  stop at a whole page older than the days limit, and offer
  "Show older" after 2000 items; detection asks for one item.
- Send the accountId filter and fall back without it on
  unsupportedFilter; keep only items of the account, never one without
  an account id.
- Ask nothing until config and policy are loaded and the policy is the
  current account's; the later check after a refusal is forced.
- Show the Trash link only when the archive holds a message inside the
  days limit; the Settings page shows whenever the server has the
  feature and says that archiving must be on in Stalwart.
- Restore: notFound leaves the list with a note, forbidden hides the
  page, results for another account are dropped, the button keeps focus.
- Forget what servers said at a full sign-out.
2026-10-28 09:08:44 +01:00
Linus Rath 33ca8efb0f fix: keep shared tags safe when members edit at once or the server fails
The first version wrote the whole tag list on every change, guessed a
group when the server wouldn't say, and treated a failed read like a
server without metadata. Now:

- Definitions are a map by tag id under `tags`, and each change patches
  one tag (`metadata/org.bulwarkmail.tags/tags/<id>`), so two members
  adding tags at once both keep theirs. Fields and colors this version
  doesn't know survive. The `{ list }` and bare-array shapes are still
  read and converted by the first save.
- Shared tags appear only for confirmed group principals. A failed
  principal lookup keeps the user's own tags and asks again later.
- "No metadata advertised" (0.16) and "the read failed" are separate.
  A failed read keeps the last good tags; a failed save keeps the change,
  says so, and sends it with the next good read after the client's
  pause.
- Push reloads wait for 5 s of quiet and skip the echo of our own save;
  a returning tab reloads definitions only, and the scan for unnamed tags
  runs once per sign-in and then at most every 30 minutes.
- The editor names its buttons after the tag, shows the delete warning
  and 44 px buttons on phones, returns focus to the edit button, and
  asks for Inbox rights only for confirmed groups.
2026-10-28 08:58:11 +01:00
Linus Rath 7f06ed7637 Merge branch 'feat/org-features' into feat/org-tags
# Conflicts:
#	lib/admin/restriction-keys.ts
2026-10-28 08:14:39 +01:00
Linus Rath ba6e6af014 feat: recover deleted items from Stalwart's archive #1319 2026-10-28 07:27:47 +01:00
Linus Rath 528450db61 fix: name the edit button of a shared tag after the tag, not the list 2026-10-28 07:10:42 +01:00
Linus Rath b5e92ba176 Merge branch 'feat/org-features' into feat/org-templates
# Conflicts:
#	lib/admin/restriction-keys.ts
2026-10-28 07:10:25 +01:00
Linus Rath b049b6f470 feat: share tag names and colours in group mailboxes #1310 2026-10-28 06:43:46 +01:00
Linus Rath 82918fc7d7 Merge branch 'feat/org-features' into feat/org-delegates
# Conflicts:
#	lib/admin/restriction-keys.ts
2026-10-28 06:30:09 +01:00
Linus Rath 49c9ec6a45 fix: start a delegate's Change from what they have and keep what fits no choice as it is
Change used to pre-fill the closest choice and then replace everything
of that type, so a folder added after "all", a single non-Inbox folder,
a non-default calendar, free/busy only or manager rights were narrowed
or widened on Save. Now a type gets a choice only when the grants match
it exactly; anything else starts at "Keep as it is", which leaves that
type out of the patch. Mixed levels keep each type's rights.

Also in the Delegates page:
- Change and Remove wait, with Try again, while a type couldn't be read
- an answer from the account before an account switch is dropped
- calendars, contacts and files follow their feature gates
- Remove says it covers what was shared from the user's own account
- typing your own address says "That's you"
- groups named only by the session get the group badge
- on Stalwart 1.0 the read hint says read delegates can flag mail
- the person list is plain buttons, not a listbox without arrow keys
- the rights follow sharingRights
2026-10-28 06:28:02 +01:00
Linus Rath f0539a33f6 feat: let admins limit every share dialog to read access with sharingRights 2026-10-28 06:27:49 +01:00
Linus Rath afd5d8263c fix: delete a contact category the same way in Settings and Contacts, with the same Undo toast 2026-10-28 06:16:10 +01:00
Linus Rath 47c47b4f08 feat: keep personal templates in the account on Stalwart 1.0 2026-10-28 06:13:47 +01:00
Linus Rath d61511bdc1 Merge branch 'main' into ux/settings-admin
# Conflicts:
#	components/settings/address-book-management-settings.tsx
2026-10-28 06:02:59 +01:00
Linus Rath 57065d7ef2 feat: show an organisation template library from the admin 2026-10-28 05:53:50 +01:00
Linus Rath 638e7c2670 fix: start the delegate dialog in the search field 2026-10-28 05:42:04 +01:00
Linus Rath 0bd63fca08 fix: name a delegate from the accounts they share with you when the directory won't 2026-10-28 05:38:44 +01:00
Linus Rath b0eb9fcfe1 fix: say the organisation blocks remote content instead of offering to load it with no third-party traffic #903 2026-10-28 05:38:39 +01:00
Linus Rath f5f536f7c9 fix: one kind of button in the Files selection bar, a closable details panel on tablets, and a share dialog that takes the focus 2026-10-28 05:29:23 +01:00
Linus Rath 9e809a31db Merge branch 'feat/org-features' into feat/org-thirdparty 2026-10-28 05:27:58 +01:00
Linus Rath 1a92eba702 test: check that a refused address lookup shows the directory note on its own 2026-10-28 05:18:49 +01:00
Linus Rath 50620c2bdc fix: use sentence case and one verb per action in Settings: New for creating, Save for saving 2026-10-28 05:18:32 +01:00
Linus Rath bcf4f3a7a6 feat: give a delegate access to mail, calendars and contacts in one step 2026-10-28 05:11:23 +01:00
Linus Rath 4b243dbdbe Merge branch 'main' into ux/contacts-files
# Conflicts:
#	components/contacts/contact-list.tsx
2026-10-28 05:01:48 +01:00
Linus Rath 7cb7aaff52 fix: give settings switches, jump chips, selects and search results a 44px touch target on the phone 2026-10-28 04:58:07 +01:00
Linus Rath 6dbaa0fd30 Merge branch 'main' into ux/settings-admin 2026-10-28 04:50:27 +01:00
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 9aa810f20d refactor: keep the share rights presets in one module for every share dialog 2026-10-28 04:46:45 +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 daae45e379 fix: ask for the details every sending address needs and preview the signature that is sent 2026-10-28 04:35:26 +01:00