Linus Rath
bb2393cf04
feat: open messages and drafts in their own windows and save all attachments to a folder
...
An installed app had no title bar of its own, no way to save attachments
except a zip, and "pop out" stayed inside the page. A new window was a
second copy of the app that had to restore the session itself, and on
start-up that evicts any login made without "Remember me" from the list
every window shares.
- Title bar: `display_override` with `window-controls-overlay`, one
`--titlebar-inset` variable at the page roots and skeletons, and a drag
strip with the window title. 0 without an overlay, so nothing moves.
- Save all to a folder: `showDirectoryPicker`, asking the device policy
before the picker and before each file, with the zip as the fallback.
- Pop-out routes `/popout/message/<id>` and `/popout/compose`, on offer in
an installed app or when the desktop bridge has windows. Hidden in Lite.
- A pop-out borrows the main window's session and never evicts or starts a
token timer. Every renewal now takes a Web Lock, so two windows can't
send the same refresh token, which Stalwart 1.0 may treat as a replay.
- A draft moves to its window under the same id. A closing window hands
unsaved text to the main window to save, since its own request wouldn't
survive the close.
- Read state, drafts, theme and language follow across windows, and
`html[data-desktop]` gates the app-like behaviour in `app/desktop.css`.
2026-11-03 06:50:21 +01:00
Linus Rath
e9e07ddb64
Merge main into feat/assistant-everywhere
2026-11-03 01:35:57 +01:00
Linus Rath
a3e83c0290
refactor: drop an unused constant from the message skeleton
2026-11-02 20:28:21 +01:00
Linus Rath
1a3377c6e1
fix: keep a linked message's reader still when the message arrives
2026-11-02 20:24:47 +01:00
Linus Rath
0bacfb389e
Merge branch 'feat/boot-skeleton-mail' into feat/boot-skeleton
...
# Conflicts:
# app/boot-skeleton.css
# lib/boot-skeleton/boot-script.ts
2026-11-02 20:01:22 +01:00
Linus Rath
b623cd388d
perf: leave the Pro frame's panes empty on standard pages
2026-11-02 19:55:32 +01:00
Linus Rath
3db7b745d0
Merge branch 'feat/boot-skeleton-calendar' into feat/boot-skeleton
...
# Conflicts:
# app/boot-skeleton.css
# components/boot-skeleton/shell.tsx
2026-11-02 19:51:39 +01:00
Linus Rath
e47eceb242
feat: draw the calendar toolbar's own words and task list in its skeleton
2026-11-02 19:42:52 +01:00
Linus Rath
90044b9d5a
perf: draw the mail skeleton's rows with less markup
2026-11-02 19:42:40 +01:00
Linus Rath
56678fd499
Merge branch 'feat/boot-skeleton-auth' into feat/boot-skeleton
...
# Conflicts:
# components/boot-skeleton/shell.tsx
2026-11-02 19:42:04 +01:00
Linus Rath
37b8cc0640
test: count settings rows and Pro bodies in the frames that draw them
2026-11-02 19:39:09 +01:00
Linus Rath
78ebb62e40
fix: fill tall screens and dark sidebars in the mail skeleton
2026-11-01 20:00:48 +01:00
Linus Rath
d2205b9c09
Merge branch 'feat/boot-skeleton-cfa' into feat/boot-skeleton
...
# Conflicts:
# app/boot-skeleton.css
2026-11-01 19:59:52 +01:00
Linus Rath
63e62865d6
Merge branch 'feat/boot-skeleton-settings' into feat/boot-skeleton
...
# Conflicts:
# app/boot-skeleton.css
2026-11-01 19:59:39 +01:00
Linus Rath
3428291acf
perf: draw only the page's own body in its hidden Pro frame
2026-11-01 19:59:03 +01:00
Linus Rath
30dc6340ec
feat: draw the login page's accessibility button for signed-out visitors of the app
2026-11-01 19:53:48 +01:00
Linus Rath
3b99ce26ae
feat: draw the reader's toolbar and a phone's conversation view while a linked message loads
2026-11-01 19:52:36 +01:00
Linus Rath
c06b4b5e28
feat: show the calendar's grid while the app loads
2026-11-01 19:48:20 +01:00
Linus Rath
b6ca61f8a7
feat: draw the new-contact form while the app loads on /contacts/new
2026-11-01 19:47:19 +01:00
Linus Rath
3b27a69d66
fix: end the Mountain View top bar skeleton with the account avatar
2026-11-01 19:47:19 +01:00
Linus Rath
e113411300
feat: match the settings skeleton's section row to the open page
2026-11-01 19:46:59 +01:00
Linus Rath
3c09658c81
fix: keep the admin panel's sidebar foot and rail still while the session is checked
2026-11-01 19:42:50 +01:00
Linus Rath
cdf661d320
feat: keep the mail skeleton's shapes until the folders, list and linked message arrive
2026-11-01 19:40:20 +01:00
Linus Rath
57c1d5d472
feat: show the contacts, files and plugin page shapes while the app loads
2026-11-01 19:36:09 +01:00
Linus Rath
e1cfc1d726
test: check the sign-in, admin and setup skeletons stand in for their spinners
2026-11-01 19:33:39 +01:00
Linus Rath
afe3fca08a
feat: draw the mail page's folders, list and reader while the app loads
2026-11-01 19:33:35 +01:00
Linus Rath
7efae37645
fix: mark the active Pro tab and draw the stored tab count in the skeleton
2026-11-01 19:27:43 +01:00
Linus Rath
f5bcc8d47d
feat: show the sign-in, admin and setup pages' shape while they load
2026-11-01 19:25:13 +01:00
Linus Rath
5166cd0a5a
feat: show the settings page's shape while the app loads
2026-11-01 19:24:13 +01:00
Linus Rath
4ea0292d78
feat: draw the Pro workspace's tabs and panes while the app loads
2026-11-01 19:24:00 +01:00
Linus Rath
dce1ed9ca6
refactor: split each page skeleton into its frame and its content
2026-11-01 18:51:40 +01:00
Linus Rath
441371554b
feat: draw the rail's add app button in the page skeleton
2026-11-01 18:48:01 +01:00
Linus Rath
8d790b29fd
feat: show the page's skeleton on Lite pages while their language loads
2026-11-01 18:41:58 +01:00