Mail · Reading: a message reader, a conversation, and quoted text

MailReader opens a message under its subject: the sender's picture,
name and address, who it went to, when it came, and Reply, Reply all
when it went to more than one, and Forward, each only with a handler;
then its words and its files, each downloadable. MailThreadView lays a
conversation oldest first: the newest stands open, the others fold to
a line of the sender, their first words and when, which a press, Enter
or Space opens. QuotedText folds words quoted from before behind a
small mark; open, they sit behind a rule. Long names give way at the
label width.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
ZacharyZhang-NYandClaude Opus 5.5 committed 2026-09-26 23:57:06 -04:00
1 parent 0a281d91ab
commit f946af6216
12 files changed
+920 -4

No files matched your search

+12
View File
@@ -8,6 +8,8 @@ use ely_gpui_component::{
use gpui::{AnyElement, App, IntoElement, ParentElement, SharedString, Styled, Window, div, px};
use jiff::{SignedDuration, Timestamp};
mod read;
use super::Page;
use crate::{
probe::probe,
@@ -33,6 +35,14 @@ const SCRIPT: &[Step] = &[
Step::UpAt("mail-list", 417.0, 112.0),
Step::Wait(200),
Step::Shot("starred"),
Step::DownAt("mail-reader", 12.0, 227.0),
Step::UpAt("mail-reader", 12.0, 227.0),
Step::Wait(300),
Step::Shot("quoted-open"),
Step::DownAt("mail-thread", 200.0, 120.0),
Step::UpAt("mail-thread", 200.0, 120.0),
Step::Wait(300),
Step::Shot("thread-opened"),
];
fn boxes(window: &mut Window, cx: &mut App) -> impl IntoElement + use<> {
@@ -200,5 +210,7 @@ fn render(window: &mut Window, cx: &mut App) -> AnyElement {
.child(boxes(window, cx))
.child(list(window, cx))
.child(zero(cx))
.child(read::reader(cx))
.child(read::thread(cx))
.into_any_element()
}