Linus Rath
4b2aba430c
fix: let Back close overlays the same way in calendar, contacts and files
2026-10-28 07:32:05 +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
aad2e01777
fix: print a contact even when the browser blocks pop-ups
2026-10-28 06:10:27 +01:00
Linus Rath
84093be964
fix: one word per action and sentence case in Contacts and Files, "Couldn't …" error titles, and "Address book" in the contact form
2026-10-28 05:42:37 +01:00
Linus Rath
15446aa0b6
fix: say when duplicating a contact fails, and why a folder rename failed
2026-10-28 05:22:46 +01:00
Linus Rath
b7d68191dd
fix: keep accented names in vCard file names, show an imported card's own name, stop starring both name fields, and compose from Contacts without asking for an account
2026-10-28 05:20:37 +01:00
Linus Rath
b540b68706
fix: tell an empty address book from an empty account, offer Import there, and use one empty state in Contacts and Files
2026-10-28 05:09:04 +01:00
Linus Rath
083bb1f6bc
fix: put New group, Import and Refresh in the phone header menu of Contacts and Files
2026-10-28 05:04:13 +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
26aef32786
fix: show the same actions in the same order in every menu of a contact, group or folder
2026-10-28 04:57:25 +01:00
Linus Rath
567880d57f
fix: remove the empty bands above and below a contact's name on the phone
2026-10-28 04:47:27 +01:00
Linus Rath
c04f850b16
fix: use theme colours for folder icons, stars and contact form errors instead of fixed blue, amber and pink
2026-10-28 04:45:59 +01:00
Linus Rath
d24b917c22
fix: use the app's selection colour in Files and the vertical More icon in Contacts and Files
2026-10-28 04:43:56 +01:00
Linus Rath
cdd7c0f0b5
fix: give the Contacts and Files buttons and rows a 44px touch target on phones
2026-10-28 04:42:21 +01:00
Linus Rath
1748b5329b
fix: name every icon button in Contacts and the file preview for screen readers
2026-10-28 04:34:08 +01:00
Linus Rath
6f371deaa7
fix: show contact dates, print headings and the disabled notice in the app's language
2026-10-28 04:28:09 +01:00
Linus Rath
46eb9cf42d
fix: mirror the Contacts drawer, search fields and Files chevrons correctly in right-to-left languages
2026-10-28 04:21:47 +01:00
Linus Rath
e53578454a
feat: list the Contacts and Files keys under ? and add their commands to the command palette
2026-10-28 04:20:48 +01:00
Linus Rath
a826214545
fix: show a new or duplicated contact after saving instead of an empty pane
2026-10-28 04:12:58 +01:00
Linus Rath
49b6405435
fix: give Contacts a create button and long-press menus on the phone, like Mail and Files
2026-10-28 04:09:08 +01:00
Linus Rath
57b7405ba0
fix: move through the contact list with the keyboard: arrows, Enter, Space, Ctrl+A, Delete, Escape and /
2026-10-28 04:06:03 +01:00
Linus Rath
754dbf56dc
fix: reach address book, category and group actions by ⋮, long-press and keyboard, move contacts with Move to…, and delete categories
2026-10-28 03:59:25 +01:00
Linus Rath
02ce389140
fix: make rename, new folder, address book and import dialogs close on Escape, keep focus and select the name
2026-10-28 03:20:09 +01:00
Linus Rath
f6e4aaa254
fix: start the new group with the selected contacts when Add to group finds no group
2026-10-28 03:12:17 +01:00
Linus Rath
2e86f7af07
fix: open the composer from a contact's right-click Send email instead of leaving the app
2026-10-28 03:08:21 +01:00
Linus Rath
ae412e0cda
feat: show notifications, the command palette and the account avatar in every app's phone header
2026-10-28 03:05:41 +01:00
Linus Rath
5447c40b7b
fix: ask before leaving a contact or group form with unsaved changes
2026-10-28 03:04:40 +01:00
Linus Rath
fdc3535c7b
fix: close the Contacts and Files drawer when you pick something in it
2026-10-28 02:43:58 +01:00
Linus Rath
893696791d
fix: keep the hidden Contacts and Files sidebar from covering the nav rail on tablets
2026-10-28 02:40:48 +01:00
Linus Rath
dcde570ebe
fix: say the directory can't be browsed instead of that a refresh failed when the server lists only the people you know
2026-10-26 12:25:32 +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
07627b3a60
fix: give every app's sidebar header and toolbar the same height as mail
2026-10-25 12:30:23 +01: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 and French-Asgeir
7163a5dcc1
fix: translate contact field types and more French strings
...
Co-authored-by: French-Asgeir <109287366+French-Asgeir@users.noreply.github.com >
2026-10-18 14:19:07 +02:00
Linus Rath
cbf917372c
fix: show the mail's own date in the list and keep it on .eml import #891
2026-10-17 19:17:58 +02:00
Linus Rath
964626794b
feat: browse the company directory in contacts and the composer #1253
2026-10-16 20:46:27 +02:00
Linus Rath
41a0716c50
Merge branch 'main' into feat/stalwart-1.0
2026-10-16 01:41:48 +02:00
Linus Rath
f8448c6a45
fix: stop reporting calendar, task and contact changes as done when a plugin stopped them
2026-10-14 19:56:06 +02:00
Linus Rath
5e71c22f56
feat: let plugins add a section to contact details and buttons for selected contacts
2026-10-14 04:46:08 +02:00
Linus Rath
8ec7dc54ab
feat: tell plugins when contacts are opened, selected, moved or imported and when groups change
2026-10-14 03:27:50 +02:00
Linus Rath
96f8aa6a63
feat: tell plugins when contacts are created, changed or deleted, and let them stop it
2026-10-14 03:24:19 +02:00
Linus Rath
67a36c59d9
fix: keep the contact name readable when the detail pane is narrow
2026-10-14 00:40:18 +02:00
Linus Rath
c633185cda
Merge branch 'main' into feat/stalwart-1.0
...
# Conflicts:
# CONTRIBUTING.md
# LICENSE
# README.md
# app/api/calendar-agenda/route.ts
# app/api/wopi/files/[fileId]/contents/route.ts
# app/api/wopi/launch/route.ts
# components/calendar/calendar-app.tsx
# components/calendar/calendar-day-view.tsx
# components/calendar/calendar-month-view.tsx
# components/calendar/calendar-week-view.tsx
# components/calendar/event-modal.tsx
# components/contacts/contact-detail.tsx
# components/email/email-composer.tsx
# components/email/email-list.tsx
# components/files/file-browser.tsx
# components/files/files-app.tsx
# components/files/folder-tree-sidebar.tsx
# components/filters/filter-rule-modal.tsx
# components/mail/mail-app.tsx
# hooks/use-mailbox-drop.ts
# integration/run-tests.sh
# lib/__tests__/calendar-agenda-route.test.ts
# lib/__tests__/jmap-draft-lifecycle.test.ts
# lib/__tests__/web-push.test.ts
# lib/account-state-manager.ts
# lib/jmap/client-interface.ts
# lib/jmap/client.ts
# lib/jmap/types.ts
# lib/message-list-order.ts
# lib/sieve/generator.ts
# lib/sieve/parser.ts
# lib/telemetry/payload.ts
# lib/thread-utils.ts
# lib/unified-mailbox.ts
# lib/web-push.ts
# lib/wopi/token.ts
# locales/ar/common.json
# locales/ca/common.json
# locales/cs/common.json
# locales/da/common.json
# locales/de/common.json
# locales/en/common.json
# locales/es/common.json
# locales/fa/common.json
# locales/fr/common.json
# locales/he/common.json
# locales/hu/common.json
# locales/it/common.json
# locales/ja/common.json
# locales/ko/common.json
# locales/lv/common.json
# locales/mn/common.json
# locales/nb/common.json
# locales/nl/common.json
# locales/pl/common.json
# locales/pt/common.json
# locales/ro/common.json
# locales/ru/common.json
# locales/sk/common.json
# locales/tr/common.json
# locales/uk/common.json
# locales/zh-TW/common.json
# locales/zh/common.json
# scripts/lite/lib.mjs
# stores/__tests__/calendar-store-synthetic-ids.test.ts
# stores/__tests__/email-store-shared-folder-keywords.test.ts
# stores/__tests__/email-store-unified-actions.test.ts
# stores/__tests__/file-store.test.ts
# stores/email-store.ts
# stores/file-store.ts
# stores/message-list-tabs-store.ts
2026-10-12 08:35:08 +02:00
Linus Rath
ae151cec25
feat: set Mountain View's content on a rounded card over a tinted canvas
2026-10-12 00:37:59 +02:00
Linus Rath
b846c7bf22
fix: make the contact more-actions menu look like the other menus
2026-10-11 17:22:16 +02:00
Linus Rath
6d518f1849
fix(contacts): show placeholders instead of "No contacts yet" while contacts load
2026-10-11 17:20:43 +02:00
lucamzanon
19e06d02ad
fix(mountain-view): keep the same top bar on every app
...
Calendar, contacts, files and settings still drew the left navigation
rail under Mountain View, so moving away from mail switched to the
default frame. They now show the Mountain View top bar too, without the
mail search and the menu button, which only make sense in mail.
2026-10-09 08:27:01 +02:00
Oğuz Yılmaz and Claude Opus 5
13e2855484
feat: set the tab title on Settings, Calendar, Contacts and Files
...
Only the mail shell updated document.title, so every other surface sat at the
static value the root layout renders: the tab could not tell you where you
were, and on a multi-account setup it could not tell you whose mailbox you
were in either.
Each surface now sets "<screen> - <account> - <app>" through the shared
useDocumentTitle hook. Labels reuse the sidebar navigation translations, so
the tab and the rail never disagree about what a screen is called - no new
translation keys.
Refs #1159
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com >
2026-10-07 08:26:23 +03:00
Linus Rath
6bce3323a9
fix: keep previews that only start like a style sheet #1136
...
The leading-CSS strip emptied or cut ordinary previews:
"@media team, the brief is attached", "@Page can you check?" and
"@import the CSV ..." became empty, and "Reminder: your appointment
{date: 2026-10-01} is confirmed" became "is confirmed".
At-rule names now match in lower case only, only `@import` and
`@charset` end at a semicolon, an at-rule word with no block after it
is prose, and a selector colon must not be followed by a space.
The conversation view's collapsed cards, contact activity, the pro
folder tab and the list's row-height estimate now use `cleanPreview`
too, so they agree with the list rows. The test's invisible characters
are written as escapes.
2026-10-01 11:02:26 +02:00
Linus Rath
6bd55c9501
fix: export contact photos in batches on Stalwart 1.0
...
On 1.0 a vCard export sent every blob photo through the avatar download
queue, a burst of 40 and then 6 a second, two at a time: about 160 s for
1000 photos. Avatars and print (which gives up after 5 s) waited behind
it, the Export button showed nothing, and a second click started the
whole export again.
- Export fetches the blob media of all cards with Blob/get
(`data:asBase64`), asking for the sizes first and packing the requests
to about 4 MiB. `urn:ietf:params:jmap:blob` goes into `using` only
when the session advertises it; without it, or when a request is
refused, the rest is downloaded one by one behind avatars and print,
which keep half of the download burst for themselves.
- The export buttons in the settings, the bulk bar, the context menu and
the detail menu show that an export is running and ignore clicks until
it is done.
- When the photo changes, the form rebuilds `media` on the card as the
server has it now. A logo or sound blobId from the list's older copy
made 1.0 refuse the whole update ("The following blobIds do not exist
or are not accessible").
- A new photo takes the key, place, `pref`, `label` and `contexts` of the
one it replaces, so it stays the photo shown on cards with several.
Removing the photo removes every photo the card had instead of only the
shown one, which brought up the next; logos and sounds stay.
- A card whose login has no client downloads nothing, instead of asking
the active login's server and remembering the refusal for two minutes.
- Photo downloads run at half the server's `maxConcurrentRequests`
instead of a fixed two.
- `invalidProperties` naming `media/...` also counts as a refused blobId
in media, not only `media` itself.
2026-09-25 20:05:19 +02:00