Overview
This one's heavy on the fixes and a little light on the features. I had a couple oddballs that needed to be squared away before I got the full Linux WebRTC and markdown composer parity wired up.
What's New
UI
5 changes
UI
5 changes
- User Presence Indicator Rapidly Flashing On Non-Self Presence IndicatorsThe presence indicator for users other than self in voice channels would rapidly flash. subscribe run fired forever and the trigger [person] write looped back into the effect. This was fixed by untracking the subscribe.
- Users Kicked From Voice By Self Would Still Show Presence For Self but not OthersPresence indicators became stale for self upon joining of a voice channel due to being ignored from presence subscriptions for currently joined voice channels. Client stopped listening for presence changes, leaving orphaned presence indicators and no response to the leave from the removed user. The fix for this was to re-order participents to ensure the LiveKit presence wins the race for the active channel.
- Speaking Indicator Deforms The Avatar Icon Disrupting The UI LayoutOccupantRow's wrapper was a plain <span> meaning the ring-2 that draws around the taller box looked oblong. Fix was making the wrapper class="inline-flex rounded-full".
- Voice Channel Dropdown Closes When Speaking Indicator Changes StateSpeaking toggled applyParticipants -> core.voice.setParticipants(newRoster). Nexus setParticipants does this.setState("participants", participants) which as a full replace with new objects. <For each={occupants()}> keyed by object reference -> new object -> tears down and rebuilds OccupantRow -> the open DropdownMenu inside it gets destroyed. Fix was reconciling by userId so existing rows keep the reference and only the changed field updates.
- Members Presence Indicators Vanish During JoinThe moment you click join, startConnect sets activeChannel/currentChannelId immediately (phase "connecting"). The reordered memo now says "active channel → use LiveKit participants but LiveKit is empty until the room actually connects. Presence for that channel is simultaneously being excluded/cleared. So for a very brief window, both sources are empty → the roster blinks out visually to users. Fix is to seed LiveKit from presence at connect time so there's no empty gap.
UX
1 change
UX
1 change
- SignOut Button Added To Settings