Reactions that actually work, sidebar expand ribbon, huddle transcription #553
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/sidebar-collapse-ribbon"
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?
Follow-ups to the redesign (#552). Mostly fixes for things that looked finished but were never wired up, plus the sidebar expand affordance and transcription in huddles.
Reactions
Reactions could not be added through the UI at all. The picker was authored around a shared
#lc-reaction-popoverhost with tab / filter / recent / close hooks, but the host element did not exist and the script driving it was never in the tree, so the add-reaction control did nothing and only an already-present chip could be toggled. There was no way to create the first reaction.reactions.jsrestores that runtime: opens the picker into a fixed host (added tolayout.html), positions it by the trigger, switches category tabs, filters by name, keeps a recent-emoji MRU, and closes on react / Escape / outside-click.+renders only when a message already has at least one reaction, so others can pile onto an existing set; at zero reactions there is no+and no picker under the text.data-lc-quick-barplaceholder that shipped hidden with nothing to fill it; it is now seeded from/api/reactions/frequent(which existed but was never called) merged with the local MRU.toggle_reactionwasSELECTthen a separateINSERT/DELETEwith no transaction, so a double-tap could both see "absent", both insert, violate the primary key and 500 while leaving the reaction on. Each branch is now one atomic statement keyed on rows-affected, withINSERT OR IGNORE.id="reactions-{id}": the bar was nested inside a second element carrying the same id, so the firstouterHTMLtoggle replaced the wrong node and dropped the spacing wrapper.Sidebar
Collapsing hid the sidebar entirely and left only a tile inside the rail to bring it back, so it read as the sidebar vanishing into the rail. That tile is replaced by a half-round ribbon on the rail's outer seam carrying the double-chevron, shown only while collapsed on desktop, themed from the existing rail/sidebar tokens.
Transcription in huddles
A huddle is the same mesh as an enclave voice channel with the same per-participant mic capture, and was excluded only because its room is not flagged
is_voice: the surface check accepted a DM or a voice room and 404'd everything else, and the huddle bar omitted the controls. Captions therefore worked in DMs and voice channels but silently failed in group huddles. Any room is now a call surface and authority moved torequire_participant, which demands live mesh membership for anything that is not a DM, so a member who has not joined is forbidden rather than the room being hidden. Controls added to the huddle bar.Other fixes
.lc-mdinput, which setscolor: transparentbecause in the main composer a.lc-mdbackbackdrop paints the text; the thread box has no such backdrop, so only the caret showed.Verification
Driven in a real browser against seeded data: picker opens/positions/closes, the first reaction creates a chip and reveals the
+, quick-react adds and toggles off, concurrent double-toggle returns no 5xx, the ribbon shows only when collapsed and re-expands on click, and the huddle bar carries the transcribe controls. Full server test suite passes, including the transcripts test updated for the new huddle contract.Note:
last_visited.rshas two pre-existing failures (home_renders_welcome_when_no_cookie,home_welcome_renders_quick_actions). Confirmed unrelated to this branch by reproducing them with these changes stashed.Follow-ups filed
LC-594 (reactions on thread replies + the duplicate thread-panel
msgid), LC-595 (make group video calls easy: ring/invite, discovery, SFU-backed huddles), LC-597 (Stage SFU transcription).Reactions could not actually be added through the UI: the picker was authored around a shared #lc-reaction-popover host and a set of tab/filter/recent/close hooks, but the script that opened and drove it was never in the tree, and the host element did not exist. So the add-reaction control did nothing and only pre-existing chips could be toggled. Restore the missing runtime and reshape the affordances per the requested UX: - Add reactions.js: opens the picker into a fixed #lc-reaction-popover host (added to layout.html), positions it by the trigger, switches category tabs, filters by name, keeps a recent-emoji MRU, and closes on react / Escape / outside-click. Wired into base.html. - Move the primary emoji-select into the message hover bar (next to reply / thread / more), so starting a reaction happens there. - The under-message "+" now renders only when a message already has at least one reaction, so anyone can add to an existing set; at zero reactions there is no "+" and no picker under the text. - Fix a duplicate id: the reaction bar was nested inside a second element also carrying id="reactions-{id}", so the first outerHTML toggle replaced the wrong node and dropped the spacing wrapper. reaction_bar.html's own root is now the sole #reactions-{id}, server-hidden when empty so no gap is reserved at rest. - Align the WS OOB echo (ws/reaction_update.html) with reaction_bar.html so a live update no longer clobbers the rich bar with degraded markup for the reactor who also receives the broadcast. #LC-553