- Shipped
- August 27, 2026 at 1:42 AM UTC
- Author
- kamo
- Commit
- 2cf9938
A member asked for both on the individual chat. They land on the same per-message menu the window already has, beside Copy and Unsend. Reactions render as a chip bar under the bubble — the emoji, how many people used it, and whether the viewer is one of them, with the chip itself as the toggle so reacting and un-reacting are one control rather than two. The tooltip names who reacted, resolved against the session member list the window already holds. A trailing "+" opens the picker where there is already a bar to hang it on; a message with no reactions yet goes through the menu. The picker opens as the six people actually use and expands into the existing searchable one on demand, because a 320px panel dropped into a 320px chat window is not a quick reaction. Editing swaps the bubble for a box holding what the SENDER wrote — originalText, not the translation a reader may be looking at — with Enter to save and Escape to cancel. Escape stops there rather than reaching the window chrome, which would have closed the whole chat on a cancelled edit. An edited message carries "(edited)" for everyone, which is what makes editing after somebody has read it honest; that disclosure is why edit, unlike unsend, is still offered on a message that has been seen. While the box is open the conversation is told somebody is editing — the "…is editing" indicator has existed on both ends since the typing work and nothing on web has ever raised it. Reference-counted and republished on an interval, because receivers clear a stale indicator after three seconds and a long correction would otherwise appear to have stopped. Both controls come off with the composer when the organization's chat policy freezes this member: they go through the same gate on the server, and offering a control that will be refused is worse than not offering it. Takes @kamo/chat-core 0.1.8 and @kamo/realtime 0.1.1.