Commit Graph
2215 Commits
Author SHA1 Message Date
Linus Rath d5ce67e167 feat(calendar): create events from a quick editor next to the clicked slot
Clicking or dragging over empty time in the week or day view used to
open the full event panel. On wide screens it now draws the new event
at that spot as a "(No title)" block and opens a small editor beside
it with a title field, the picked time, a calendar picker, Save and
"More options". More options carries the title, time and calendar
over into the full editor. Enter saves, Escape or a click elsewhere
discards. Phones keep opening the full editor.

The placeholder for an event being created is now drawn like a saved
event, in the calendar's colour, instead of a dashed outline.
2026-10-10 22:57:37 +02:00
Linus Rath 95d21c49a9 feat(calendar): open a day from the week header and show a clearer now line
The week and day headers now show a small weekday above a large date,
with today's date in a filled circle and its weekday in the primary
colour. Clicking a date in the week header opens that day in the day
view. The all-day row moved below the dates, where it lines up with
the columns it belongs to.

The current time line is thicker with a larger dot at the start of
today's column, and events shorter than 45 minutes show their start
time next to the title instead of hiding it.
2026-10-10 22:38:59 +02:00
Linus Rath 90b1db0432 feat(calendar): fold calendar lists and show options on hover in the sidebar
The calendar list in the sidebar now works like Google Calendar's:
- "My calendars" and a new "Other calendars" section (shared
  calendars, still grouped by owner) fold away, and stay folded
- each calendar has a checkbox filled in its colour with a check mark
- hovering a calendar shows an options button that opens the same
  menu as a right-click

In the mini month, today is the filled circle and the selected day is
tinted, so the two no longer look alike.
2026-10-10 22:34:35 +02:00
Linus Rath beda42a500 refactor(calendar): keep the webmail's own buttons in the new calendar bar
The previous commit copied Google Calendar's look along with its
layout. The bar and the sidebar now use the webmail's regular buttons,
sizes and title style again; only the arrangement stays: menu button,
Today and arrows with the title, the view menu on the right and the
create button at the top of the sidebar.
2026-10-10 22:30:56 +02:00
Linus Rath b5373bd528 feat(calendar): move the calendar bar above the sidebar like google calendar
The bar now spans the sidebar and the grid. It starts with a menu
button that hides or shows the sidebar (remembered across visits),
then a pill Today button, the arrows and a large period title. On
the right a view menu lists Day, Week, Month and Agenda (and Tasks)
with their shortcut keys, and import and subscribe moved into a
"more actions" menu instead of a button of their own.

The Create button moved to the top of the sidebar. While the sidebar
is hidden or an overlay, a compact create button sits in the bar.
2026-10-10 22:28:38 +02:00
Linus Rath a2e36e6e86 fix: open read-only documents in ONLYOFFICE without the -103 warning #1187 2026-10-08 14:32:39 +02:00
Linus Rath 3d48b12204 chore: release 1.13.0 1.13.0 2026-10-07 20:37:49 +02:00
Linus Rath f87be32388 fix: keep an empty draft subject empty so send still warns #1189 2026-10-07 20:22:51 +02:00
Linus Rath fbde506454 chore: update sharp and source-map-js for security fixes 2026-10-07 20:12:53 +02:00
Linus Rath eb84810f1e fix: translate the unverified sender warning into all languages 2026-10-07 20:06:35 +02:00
Linus Rath a60768eb17 test: wait for the lazy viewer in the blob routing tests #1188 2026-10-07 19:49:37 +02:00
Linus Rath 7bf5e0d802 fix: keep a shared-folder message's thread key in line with its row #1188 2026-10-07 19:34:20 +02:00
Linus Rath 2e262b9d5c fix: title the browser tab after the Pro tab in view #1186 2026-10-07 19:34:19 +02:00
Linus Rath 1b9aeff4e5 Merge pull request #1188 from VasilisNtovolos/fix/shared-account-blob-downloads
fix: route shared-account blob downloads by message owner
2026-10-07 19:33:24 +02:00
Linus Rath cd3099e1f6 Merge pull request #1186 from oguzyilmaznet/feat/tab-title-account
feat: name the account in the tab title, and let operators keep the subject out
2026-10-07 19:33:23 +02:00
Linus Rath 832651bcaf fix: include sent mail when searching from unified all mail 2026-10-07 19:28:44 +02:00
Linus Rath 8889346371 feat: warn when a message's sender can't be verified 2026-10-07 19:04:15 +02:00
VasilisNtovolos bb3ef6d9fc fix: route shared-account blob downloads by message owner 2026-10-07 15:57:45 +03:00
Oğuz YılmazandClaude Opus 5.5 54ec8c6584 feat: let operators keep the message subject out of the tab title
Opening a message puts its subject in the browser-tab title. The title does
not stay in the tab strip: browsers keep it in history and in the
session-restore list, and screen shares show it. For mailboxes that hold
other people's correspondence that is a leak nobody audits.

A new feature gate, tabTitleSubjectEnabled ("Subject in Tab Title" under
Admin -> Policy), is on by default, so nothing changes for existing
installs. With it off, the title names the folder instead, so the tab still
says where you are. It is an admin gate rather than a user setting: whose
mail the boxes hold is a deployment decision.

The gate counts as off until the policy has loaded, so a subject never
slips into history while the setting is still unknown.

Refs #1159

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 08:26:51 +03:00
Oğuz YılmazandClaude 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
Oğuz YılmazandClaude Opus 5.5 8ca7dbbe9b feat: name the active account in the browser-tab title
The tab title was "<context> - <app>", so two mailboxes open side by side
read the same in the tab strip and in the browser's session-restore list.

It is now "<context> - <account> - <app>", the order Gmail and Outlook Web
use: browsers cut a long title from the end, so the part that changes comes
first and the app name last. There is no setting for it; the account is what
tells the tabs apart.

The formatting, and the mail view's choice of context (composer, then
message, then mailbox), live in lib/tab-title.ts with tests. The mail view
sets its title through useDocumentTitle(), which other surfaces can use too.
Next renders the root layout's metadata <title> again on every client-side
navigation, after the surface has mounted; the hook puts its title back when
that happens. Only the surface that set the title last does so, so two
titles never fight.

Refs #1159

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 08:26:23 +03:00
Linus Rath ccf6bf7706 Merge remote-tracking branch 'origin/main'
# Conflicts:
#	locales/cs/common.json
2026-10-07 01:03:34 +02:00
Linus Rath 8cc53e63d9 chore: translate files picker and bulk folder move strings 2026-10-07 01:02:20 +02:00
Linus Rath 506f47e155 fix: show the translated message when no Archive folder can be created #1176 2026-10-06 23:31:20 +02:00
Linus Rath 7f78d4837a fix: don't offer the auto-reply audience on a shared account #1152 2026-10-06 23:31:03 +02:00
Linus Rath 7d08353c80 fix: keep the filter script editable elsewhere after switching out-of-office forwarding off #1152 2026-10-06 23:31:03 +02:00
Linus Rath 9881c20ddd fix: keep Stalwart as the authenticator entry name on unbranded installs #1177 2026-10-06 23:29:42 +02:00
Linus Rath cbfcdf3b69 Merge pull request #1152 from dealerweb/feat/rule-periods-out-of-office
feat: out of office forwarding and recipients, filter rule periods
2026-10-06 23:28:58 +02:00
Linus Rath 31a9a65b2e Merge pull request #1177 from cybersmurf/fix/branding-after-sign-in
fix: use the configured name and logo for the TOTP issuer, About card and Files preview
2026-10-06 23:28:57 +02:00
Linus Rath e731c0849d Merge pull request #1184 from gwku/fix/pointer-cursor
fix: show the pointer cursor on buttons and other controls
2026-10-06 23:28:56 +02:00
Linus Rath d8b7a6919c Merge pull request #1176 from cybersmurf/fix/archive-auto-create
fix: create the Archive folder on first use when the account has none
2026-10-06 23:28:55 +02:00
Linus Rath 898e250a6a Merge pull request #1175 from cybersmurf/fix/calendar-agenda-shared-accounts
fix: show shared and group calendars in the Calendar Agenda
2026-10-06 23:28:54 +02:00
Linus Rath 3cb5482825 Merge pull request #1174 from cybersmurf/fix/czech-translations
fix(i18n): translate the remaining English strings in the Czech locale
2026-10-06 23:28:53 +02:00
Linus Rath 1aefeedf4f Merge pull request #1165 from owgreen-dev/fix/i18n-placeholders-fa-he-hu-mn-sk
fix(i18n): restore dropped and renamed placeholders in fa, he, hu, mn and sk
2026-10-06 23:28:52 +02:00
Linus Rath 6e5c5390df Merge pull request #1162 from dealerweb/fix/focus-trap-rerender
fix: keep the focus in dialogs while the page behind renders again
2026-10-06 23:28:51 +02:00
Linus Rath 1829bd8ee4 fix: stop a previous account's settings leaking into the next sign-in #1185 2026-10-06 23:26:27 +02:00
Linus Rath 992ede9500 fix: show and share shared folders in both folder layouts #1181 2026-10-06 22:27:56 +02:00
Linus Rath 9738231c2a fix: stop stale tabs and devices from dropping synced templates 2026-10-06 22:14:29 +02:00
Gerwin Kuijntjes 682fc086d1 fix: show the pointer cursor on buttons and other controls
Tailwind v4's preflight no longer gives buttons a pointer cursor, so most
buttons, menu items, tabs, switches and selects showed the arrow. A base-layer
rule in globals.css gives them the pointer again and gives disabled ones
not-allowed. Cursor utilities on components still take precedence.
2026-10-06 21:31:11 +02:00
Linus Rath 1e10aa9bd6 feat: move several folders at once from the folder settings #1173 2026-10-06 15:49:53 +02:00
Linus Rath 92f1973bcc feat: attach files from the Files app in the composer #1179 2026-10-06 15:18:58 +02:00
Linus Rath 463309c99a test: expect cross-account moves to remove the source 2026-10-06 15:07:42 +02:00
Linus Rath 5133d618d1 ci: run the docker integration suite nightly and on labelled PRs #647 2026-10-06 14:52:37 +02:00
sudandClaude Fable 5.1 adc9d61aba fix: use the configured name and logo for the TOTP issuer, About card and Files preview
On a branded deployment (APP_NAME, APP_LOGO_*) three places after sign-in
still showed Bulwark or Stalwart (#1160):

- the TOTP issuer was 'Stalwart', so the authenticator app listed the
  mail server instead of the service; it is now the configured app name,
- the About card used the Bulwark wordmark and title; with APP_NAME set
  it shows the configured name and logo (light/dark as configured), and
  keeps the Bulwark mark otherwise,
- the Files settings preview thumbnail used the bundled logo; it now uses
  the configured one when there is one.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-06 06:56:10 +02:00
sudandClaude Fable 5.1 45c7e2c360 fix: create the Archive folder on first use when the account has none
Stalwart's default folder set has no archive-role mailbox, so on a fresh
account Archive did nothing but raise the not-found toast (#578). Both
archive paths now go through ensureArchiveMailbox(), which creates
"Archive" with the archive role in the account the action targets (own,
the selected shared folder's owner, or the pinned account in unified
view), reloads the mailbox list and continues with the store's own
object. createMailbox() takes an optional role for this. A refused
creation or a folder that does not come back still surfaces as an error.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-06 06:55:02 +02:00
sudandClaude Fable 5.1 61fc130a74 fix: show shared and group calendars in the Calendar Agenda
The agenda sidecar queried only the session's primary calendar account,
so events in a shared or group account (a family or team calendar) never
reached the Calendar Agenda plugin, although the calendar app shows them.

Read every account the calendar app reads: the primary account plus
accounts that advertise the calendar capability or are not personal,
mirroring the client's getCalendarCapableAccountIds(). Event and
calendar ids repeat across accounts, so the DTO id is scoped as
<accountId>:<id> and carries accountId; calendar colours are looked up
per account. A shared account whose calendars cannot be read is skipped
instead of failing the whole agenda; a failure of the primary account is
still reported.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-06 06:24:17 +02:00
sudandClaude Fable 5.1 7ebdf1db99 fix(i18n): translate the remaining English strings in the Czech locale
Forty strings in locales/cs/common.json were still identical to English:
removing an account, tinting list rows, the date-format region and time
zone settings, inbox-only notifications, cache refresh, file sharing,
contact groups, and a few folder roles and labels. Placeholders are
unchanged and the file keeps its CRLF line endings.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-06 06:20:23 +02:00
Linus Rath 85b3bb86ed fix: keep the meeting link when duplicating an event #1170 2026-10-05 23:09:48 +02:00
Linus Rath 7e1a659c06 fix: open the WOPI editor behind a reverse proxy with split addresses #1130 2026-10-04 22:16:29 +02:00
Linus Rath b51de3baaa feat: add or remove a label on all selected mails at once #1077 2026-10-04 20:54:32 +02:00