Conversation header: aligned 48px bar, consistent toggles, channel topic #289

Closed
opened 2026-10-07 20:43:05 -04:00 by Salastil · 1 comment
Owner
  • .main-header has no fixed height and no divider (app.css:116-131); at ~38px it doesn't line up with the sidebar's .group-title (4394) or .nicklist-header (1841). Discord uses one 48px row with a single divider across all columns.
  • Toggles are inconsistent: the member list swaps group/group_off icons (App.tsx:213) while other header toggles use an active class (ConversationTools.tsx:147, 221).
  • No channel topic is shown. The Buffer wire type has no topic (only VoiceChannel.topic).

Fix: one 48px header row aligned across columns; every toggle uses active + filled icon; the topic shown on one line, click for the full text. Daemon work: add topic to Buffer (nobilis/src/model.rs:236) from IRC 332/TOPIC, Matrix m.room.topic, Discord channel.topic.

Part of the v1.0 UI pass.

- `.main-header` has no fixed height and no divider (app.css:116-131); at ~38px it doesn't line up with the sidebar's `.group-title` (4394) or `.nicklist-header` (1841). Discord uses one 48px row with a single divider across all columns. - Toggles are inconsistent: the member list swaps `group`/`group_off` icons (App.tsx:213) while other header toggles use an `active` class (ConversationTools.tsx:147, 221). - No channel topic is shown. The `Buffer` wire type has no topic (only `VoiceChannel.topic`). **Fix:** one 48px header row aligned across columns; every toggle uses `active` + filled icon; the topic shown on one line, click for the full text. **Daemon work:** add `topic` to `Buffer` (`nobilis/src/model.rs:236`) from IRC 332/TOPIC, Matrix `m.room.topic`, Discord `channel.topic`. _Part of the v1.0 UI pass._
Salastil added this to the v1.0 milestone 2026-10-07 20:43:05 -04:00
Salastil added the feature label 2026-10-07 20:43:05 -04:00
Author
Owner

Finished: 2ef9e35.

The header is one row across the window, and it now says what the conversation is for.

  • 48px, aligned: the server name, the conversation header and the member list header share --header-height (48px) and each has the same divider under it, so it is one line across the window. Measured in the running app: all three at 44→92. (The channel list had 4px of padding above its heading, which put it 4px low; gone.)
  • Toggles are consistent: the member list no longer swaps group/group_off; it is the group glyph with the active class like the others, and any IconButton with active is now drawn filled as well as tinted, so every header toggle reads as on without relying on colour.
  • Topic: shown on one line beside the name with a divider; clicking opens the whole of it with live links. Daemon (nobilis 44d1611): Buffer.topic, set from IRC 332 / 331 / TOPIC, Matrix m.room.topic (kept against the room so a buffer made later gets it), and Discord channel topic (including the edit that arrives as a channel update with the name unchanged). Broadcast only when it changes, and a cleared topic is carried through to the window.
  • Clippy and the 860 daemon tests pass; the layout check is unchanged.
  • Not exercised live: the topic itself coming from a real server - the pictures use a staged topic. IRC 332/TOPIC and Matrix are the parts that have no test beyond compiling.

The row - before (top), after (bottom):

row

The topic opened:

topic

Finished: [2ef9e35](https://git.salastil.com/Salastil/moho/commit/2ef9e35c9e8c3cf72f92dd373bcab36dff63c94a). The header is one row across the window, and it now says what the conversation is for. - **48px, aligned:** the server name, the conversation header and the member list header share `--header-height` (48px) and each has the same divider under it, so it is one line across the window. Measured in the running app: all three at 44→92. (The channel list had 4px of padding above its heading, which put it 4px low; gone.) - **Toggles are consistent:** the member list no longer swaps `group`/`group_off`; it is the `group` glyph with the `active` class like the others, and any `IconButton` with `active` is now drawn filled as well as tinted, so every header toggle reads as on without relying on colour. - **Topic:** shown on one line beside the name with a divider; clicking opens the whole of it with live links. **Daemon (nobilis 44d1611):** `Buffer.topic`, set from IRC 332 / 331 / TOPIC, Matrix `m.room.topic` (kept against the room so a buffer made later gets it), and Discord channel `topic` (including the edit that arrives as a channel update with the name unchanged). Broadcast only when it changes, and a cleared topic is carried through to the window. - Clippy and the 860 daemon tests pass; the layout check is unchanged. - Not exercised live: the topic itself coming from a real server - the pictures use a staged topic. IRC 332/TOPIC and Matrix are the parts that have no test beyond compiling. The row - before (top), after (bottom): ![row](https://git.salastil.com/attachments/83bd4fea-8cc3-406e-a121-0bd85d1f6b9e) The topic opened: ![topic](https://git.salastil.com/attachments/fe3d2fc8-1b60-43f4-b2d0-7bc48c774261)
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Salastil/moho#289