Redesign chat UI to the prototype: rail, sidebar, panels, composer, settings #552
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/lc-576-active-row-invert"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Redesigns the Let's Chat web UI to match the amethyst-dark prototype comp end to end: the enclave rail, sidebar, room header, right column (Details + Thread), composer, and Settings. Every visual change is backed by real logic rather than styling alone, and was verified on real seeded multi-user data.
Chrome and layout
Composer
Timeline and indicators
Settings
Dev and verification
Refs: LC-576, LC-553.
Sidebar gains the prototype's org row: the current enclave's name with a chevron that opens its options. The enclave name is not a field on the page structs, so it is read off the `switcher` list the rail already carries, which avoids threading a new field through every view. Enclave settings inside that menu keeps the manager-only `can_manage` gate the rail gear uses; without it the menu leaked an admin link to every plain member, which the enclave-nav test caught. The Messages/People tabs take the prototype's metrics (two evenly split tabs on the sunken ramp, no bordered shell), and the "new room" button moves up beside the search field where the prototype puts it, instead of sitting on the ROOMS section header. It opens the same modal the ROOMS `+` opens, so there is still one create form. Room header: the actions go icon-only, as in the prototype. Every one already carried a tooltip and an aria-label, so no information is lost, and the text labels had been wide enough to push the notify pill and the overflow toward the edge. The notify control keeps its label because it shows state ("Unmuted"), not just an action name. The room search stops occupying a fifth of the bar and becomes an icon that discloses the same combobox: the input, its hx-wiring and search.js keyboard nav are untouched. The title gains the favorite star, which previously could only be reached by hovering the sidebar row; it posts to the same endpoint and swaps the same target, so header and sidebar stay in step. RoomPage and the notify-prefs header fragment both learned `is_starred` so the star survives a header swap. Details panel: reverted to the prototype's plain key/value rows. An earlier pass had wrapped each row in a bordered uppercase card, which was a deviation from the prototype rather than a match to it, and "Leave room" is a red text action rather than a filled button. #LC-576Adds the prototype's member avatar stack to the room header: overlapping round avatars (rendered via /avatars/{id}) with a "+N" overflow, linking to the room info page. Both the stack ids and the Details "Members" count now come from the effective member set - for a public room that is the ENCLAVE membership (its room_members roster is empty, which is why the count previously read 0), and for private rooms/DMs the explicit roster. Threaded through RoomPage and the RoomHeaderFragment swap path so the stack survives a notify-prefs header swap. #LC-553