move group actions to sidebar and add invite link copying

This commit is contained in:
2026-10-01 09:52:41 +07:00
parent 857795a92e
commit 75b0f49d9e
12 changed files with 310 additions and 353 deletions
+9 -9
View File
@@ -588,15 +588,15 @@ before they reach the consumer, so a replay cannot double-hydrate.
- **Administration is built on the client side.** The sidebar's `Groups` tab lists
`GroupsRegistry::groups()`, opens a `GroupPanel`, and offers the new-group and
join dialogs; `crates/workspace/src/panels/browse.rs` browses a relay and joins
from a result. The panel has a read-only details dialog, a header `Manage` menu
(edit metadata, invite link, members and roles) shown to admins, a message menu
with reactions and admin pin/delete, a pins strip, a fork banner, and leave.
Opening a group also fills the sidebar with the group itself — banner (the
`39000` `banner` tag, falling back to its `picture`), avatar and name, and the
collapsible `Admins`/`Members` lists. Members are clickable and open a profile
dialog. The panel header shows the group's `about` instead of its name, plus a
button that shows or hides the sidebar's group information. What a given account
may actually do is the relay's call; the client shows the refusal verbatim.
from a result. The panel has a read-only details dialog, a message menu with
reactions and admin pin/delete, a pins strip, a fork banner, and leave. Opening a
group also fills the sidebar with the group itself — banner (the `39000` `banner`
tag, falling back to its `picture`), avatar and name, a row of info / edit / invite /
members / leave buttons, and the collapsible `Admins`/`Members` lists. Members are
clickable and open a profile dialog. The panel has no header: the group's `about` lives in the
details dialog, and the composer's leading button shows or hides the sidebar's
group information. What a given account may actually do is the relay's call; the
client shows the refusal verbatim.
- **The composer uploads to the configured blossom server.** `GroupPanel`'s
paperclip uploads one file at a time, unencrypted, and appends its URL to the
message on send — the same plain-attachment path the chat composer uses when a