Messaging · People: members, a profile card, online status and a status setter

MemberList sets members online and offline by name, each group a list
under its count. A press or an arrow chooses one; Enter or a double
press acts on them; offline members go quiet. UserProfileCard shows a
person's picture with presence, name and standing, title, status, the
time in their zone, and Message and Call, each only with a handler.
OnlineStatus draws a presence's dot and word; Presence now names itself
and gives its color, in data_display, its one home.

StatusSetter holds a draft seeded from the owner's status: an emoji
from a picker field, words in its own text field, and when they clear.
Suggestions fill all three; Save hands the status over and Clear status
removes it. The emoji field reuses the date pickers' field, whose
trigger ignores the Enter release after a pick.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
ZacharyZhang-NYandClaude Opus 5.5 committed 2026-09-26 22:08:25 -04:00
1 parent 5bbfdcd766
commit 37e56c7ab7
14 files changed
+1308 -7

No files matched your search

+20
View File
@@ -8,6 +8,7 @@ use gpui::{AnyElement, App, IntoElement, ParentElement, SharedString, Styled, Wi
use jiff::{SignedDuration, Timestamp};
mod messages;
mod people;
use super::Page;
use crate::{
@@ -34,6 +35,22 @@ const SCRIPT: &[Step] = &[
Step::HoverAt("messaging-conversation", 200.0, 89.0),
Step::Wait(200),
Step::Shot("run-time"),
Step::DownAt("messaging-members", 200.0, 91.0),
Step::UpAt("messaging-members", 200.0, 91.0),
Step::Wait(200),
Step::Shot("member-chosen"),
Step::DownAt("messaging-status", 35.0, 48.0),
Step::UpAt("messaging-status", 35.0, 48.0),
Step::Wait(200),
Step::Key("tab"),
Step::Type("palm tree"),
Step::Wait(200),
Step::Shot("status-emoji"),
Step::Key("enter"),
Step::Key("tab"),
Step::Type("On leave till Monday"),
Step::Wait(200),
Step::Shot("status-draft"),
];
/// The demo's chats: which is open and what waits unread in each.
@@ -218,5 +235,8 @@ fn render(window: &mut Window, cx: &mut App) -> AnyElement {
.child(messages::conversation(window, cx))
.child(messages::thread(window, cx))
.child(messages::receipts(cx))
.child(people::members(window, cx))
.child(people::statuses(cx))
.child(people::setter(window, cx))
.into_any_element()
}