From da85f0ba545a71a439fcd73a05af53bd11f2f28a Mon Sep 17 00:00:00 2001 From: Dennis Landmann Date: Tue, 21 Apr 2026 00:02:43 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20call=20UX=20overhaul=20=E2=80=94=20deaf?= =?UTF-8?q?en=20sync,=20share=20dialog,=20fullscreen=20redesign?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Speaking ring: - Switch useActiveSpeakers from LiveKit's smoothed isSpeaking / server- batched ActiveSpeakersChanged to Web Audio API AnalyserNode on each participant's raw audio MediaStreamTrack. Poll 50ms, RMS threshold 0.03, 250ms hold. Feels real-time vs the old ~500ms lag - Defensive syncProbe on every tick so probes catch up if TrackPublished missed (local mic publish race on join) - Universal speaking overlay on tile (3px emerald border + inset glow, z-10) so video mode shows the ring too, not just audio mode Screen sharing: - Separate "screen" tile per sharer so the sharer's avatar tile stays intact with its speaking ring. Tile.id is kind-prefixed (user:xxx / screen:xxx) so focus tracking distinguishes them - New ScreenShareDialog (quality preset + fps override + displaySurface hint) opens on the share button. startScreenShare / stopScreenShare actions in CallContext replace the one-shot toggle - ScreenShareViewer: plain CSS-only fullscreen overlay (Tauri WKWebView doesn't implement requestFullscreen), always `h-full w-full object-contain`, Esc exits Camera: - toggleCamera action in CallContext tracks isCameraEnabled - VideoStub renders real