Commit Graph
109 Commits
Author SHA1 Message Date
Linus Rath c60cc702f7 fix: open Save to Files with My files selected so Save here works right away 2026-10-28 10:45:12 +01:00
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 7f9a8bc5e7 fix: show images and other files in one preview frame, with ←/→ to the next file of the folder 2026-10-28 05:39:10 +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 15446aa0b6 fix: say when duplicating a contact fails, and why a folder rename failed 2026-10-28 05:22:46 +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 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 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 c87baa8408 feat: sync the Files settings with the other settings, with export, reset and a one-time move from this device 2026-10-28 03:51:27 +01:00
Linus Rath e12aa1f5b9 feat: download a folder as a zip built in the browser, with progress and cancel 2026-10-28 03:44:34 +01:00
Linus Rath 408a2c90dc feat: move files and folders with Move to… and a folder picker instead of only dragging 2026-10-28 03:40:10 +01:00
Linus Rath 3d72d426d4 feat: keep deleted files in a Files trash with Restore, Delete permanently and Empty trash 2026-10-28 03:35:46 +01:00
Linus Rath 91f9213110 fix: make Backspace delete the selection in Files, as in Mail, and keep Alt+Up for going up 2026-10-28 03:22:37 +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 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 14aacd95b8 fix: let Back close an image preview or the document editor instead of leaving Files 2026-10-28 02:48:48 +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 6014142358 fix: show conversation and attached-message attachment names without directional override characters 2026-10-26 11:22:10 +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
VasilisNtovolos 7fefc128a1 fix: keep file previews open during Strict Mode replay 2026-10-19 16:08:56 +03:00
Linus Rath c02aadd6a9 fix: preview HTML attachments as sanitised text in a locked frame instead of a same-origin blob document 2026-10-19 00:58:31 +02:00
Linus Rath b646ff0dc1 fix: preview attachments in the installed app instead of opening a blank window #865 2026-10-17 19:17:55 +02:00
Linus Rath 41a0716c50 Merge branch 'main' into feat/stalwart-1.0 2026-10-16 01:41:48 +02:00
Linus Rath d16edfe402 fix: put plugin file actions behind a more button in the phone selection toolbar 2026-10-14 09:48:50 +02:00
Linus Rath eb34caa381 feat: let plugins add entries to file menus and the selection toolbar, and a section to file previews 2026-10-14 04:58:21 +02:00
Linus Rath 96f0681ab5 feat: tell plugins when files are uploaded, downloaded, deleted, renamed, moved or copied, and let them stop it 2026-10-14 03:36:13 +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 d98f0684d9 test: click the My files breadcrumb in the file picker test 2026-10-11 18:12:14 +02:00
Linus Rath 44bfb7ebfd fix: translate the new Files app strings and label the picker root My files 2026-10-11 17:29:30 +02:00
Linus Rath bf00ea27cf fix(files): show the loading skeleton instead of "No files yet" before the first listing 2026-10-11 17:00:56 +02:00
Linus Rath a4909ae106 fix(files): drop the cursor outline from a file once it is deselected 2026-10-11 16:57:00 +02:00
Linus Rath 958aa500b8 feat(files): add right-click menus to My files, folders, starred and recent in the sidebar 2026-10-11 16:50:08 +02:00
Linus Rath 8f146509ca fix(files): give the image zoom bar the same card and buttons as the rest of the app 2026-10-11 16:44:37 +02:00
Linus Rath dfa68a1d2f fix(files): keep the items a drag selection covers after letting go 2026-10-11 16:42:43 +02:00
Linus Rath e60840c0e6 fix(files): say the upload was canceled instead of counting it as done
Cancelling an upload ended the loop like a normal finish, and the Files
app then reported every picked file as uploaded. Uploads now return how
many files went up and whether they were cancelled, so a cancel shows
"Upload canceled" (with the count of files that made it, if any).

Folder uploads also passed no cancel signal or progress callback to the
blob upload, so Cancel did not stop the file in flight and the progress
line stood still; they now behave like file uploads.
2026-10-11 16:40:32 +02:00
Linus Rath cd5fe770e4 feat: show file uploads as a toast like every other notice
Uploads in Files had their own card with a thick progress bar, larger
corners and a heavier shadow, so they looked unlike the toasts around
them.

Toasts can now show work in progress: the thin line at the bottom fills
with progress instead of counting down, and the toast stays until it is
updated or removed. Uploads use it, with the file and percentage below
the title and Cancel as the toast action.
2026-10-11 16:38:05 +02:00
Linus Rath 87915f8bf1 feat(files): zoom and pan images in the preview, close by clicking beside them
The image viewer only zoomed with its buttons, scaled the image inside
a fixed box so a zoomed image could not be moved, and the area around
the image swallowed clicks, so clicking beside it did nothing.

Both the Files image viewer and the attachment preview now use one
viewer that:

- zooms with the wheel, trackpad or two-finger pinch, centred on the
  pointer, and with a zoom bar at the bottom (-, percentage, +, fit,
  rotate)
- toggles between fit and full size on double-click or double-tap
- pans by dragging, or with the arrow keys, while zoomed
- closes on a click or tap beside the image, but not after a drag
- keeps + / - / 0 / r as shortcuts and Escape to close
2026-10-11 16:32:51 +02:00
Linus Rath d07939fc04 feat(files): drop the large file upload warning 2026-10-11 16:25:11 +02:00
Linus Rath 4ba39cef0e feat(files): rework the Files app layout and interactions
The Files app had two layouts (folders inline or in a tree), a back bar
and a permanent warning above the list, a toolbar of ten unlabelled
icons, and a Recent list whose entries did nothing. In the tree layout
folders could not be renamed or deleted at all, and the default view,
default sort and hidden-files settings were ignored.

It now follows the contacts and calendar layout:

- a full-height sidebar with a "+" New menu, My files with the folder
  tree, Starred, Recent and Shared with me; folders accept dropped items
- a header with collapsing breadcrumbs (also drop targets), search, sort,
  list/grid switch and a details toggle; selecting items swaps it for an
  action bar
- list rows open from the name and select from the row, with hover
  actions; the grid shows folders as chips and files as cards with
  lazy, cached thumbnails
- a details panel for the selection or the current folder, empty-folder
  and no-results states, a floating upload card, a dismissible
  stability warning, and keyboard navigation with the arrow keys
- touch: tap opens, long-press selects, a "+" button in narrow panes

The tree is built from the listing the store already fetches instead of
one full fetch per folder, so it is current after every change. Recent
files open in their folder, and the settings for view, sort, hidden
files and icons now apply. The inline/sidebar setting is gone.
2026-10-11 16:23:19 +02:00