Following #36. A pale shape on a pale panel is simply gone, and this
shell has a light mode - so both icons now carry a light tone and a
dark one, a fill with a keyline in the opposite tone. Whichever way the
panel goes, one of the two is still there to see.
Waiting is the same bubble inverted, plus the badge. Inverting is the
largest change two icons of one shape can make, and unlike colour it
survives what this shell does to tray icons, which is render them in
monochrome - the reason the original pale pink ball arrived looking
white, and the reason a red one arrives grey.
Co-Authored-By: Claude Opus 5 <[email protected]>
Issue #36. The tray alert fired only for buffers in pinnedBuffers, on
the reasoning that a direct message had already had its desktop
notification and the tray was for things important enough to pin. In
practice that left the icon nearly inert: somebody messages you, the
notification fades, and the one indicator still on screen says nothing
unless you happened to have pinned that exact conversation. Any unread
direct message now raises it, and pinned buffers still do too.
That needed the buffer list seeding on connect. The daemon usually
outlives this process, so its buffers were announced long before the
connection existed and no bufferListChange is coming for them - main
knew of no conversations at all, and could not have told a direct
message from a channel. The mute rules were reading the same empty map.
The badge is bigger and separated from the bubble by a gap, rather than
a paler dot resting against its outline. Colour alone was never going
to carry it: the shell this was reported from renders tray icons in
monochrome, so the red arrives grey - which is also why the old pale
pink one looked white.
Co-Authored-By: Claude Opus 5 <[email protected]>
The daemon moves to its own repository as nobilis, so both frontends - this
one and dms-chat - depend on it as a peer instead of one of them vendoring it.
The vendored chatd tree and the Rust workspace are gone; `npm run daemon`
builds the submodule, and packaging pulls the binary out of it.
The Sneedchat smiley images go with it, next to the table that names them.
Previously nobilis held the filenames while this repository held the files,
so the two could drift apart with nothing to catch it.
Fixes found while testing against live accounts:
- The sidebar did not truncate. A flex item's automatic minimum size is its
content's min-content width, so prose-titled Matrix rooms made the buffer
list wider than its pane and painted over the message list.
- Discord's QR never rendered: the event field is `qrCodePath`, not `path`.
The Sneedchat and Matrix login progress text was blank for the same reason -
all four status events carry `detail`, not `status`.
- Every Matrix message rendered as a grey system line with no author or
avatar. IRC, Discord and Sneedchat tag an ordinary message "chat" but Matrix
tags it "message"; only the first was treated as something a person said.
- Context menus and the emoji picker swallowed their own clicks. Both
dismissed on a capture-phase mousedown, which unmounts the item before the
click can land on it - so pin, mute, hide and emoji selection all did
nothing. Presses inside the popup are now ignored.