From 7172091159390f7e8d5606c8b9c16a63d5e544f4 Mon Sep 17 00:00:00 2001
From: Jannis Braun <151788261+TheZwiss@users.noreply.github.com>
Date: Sun, 1 Mar 2026 23:36:10 +0100
Subject: [PATCH] =?UTF-8?q?feat:=20Phase=203=20Aether=20Drift=20=E2=80=94?=
=?UTF-8?q?=20voice=20&=20video=20component=20token=20migration?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Migrate all 10 voice/video components from Discord visual language to
Aether Drift design system. Zero discord-* classes or hardcoded hex
values remain in components/voice/.
Key changes:
- Status indicators use pastel accents: mint (connected/speaking),
amber (connecting/idle), rose (muted/deafened/error)
- VoiceControlBar converted to frosted glass-bubble material
- ConnectionInfoPopover and ScreenShareSettingsPopover use glass popovers
- Speaking ring glow changed from Discord green to mint (#86efac)
- Slider accents use lavender instead of blurple
- All bg/text/border tokens mapped to surface-*/txt-*/interactive-* system
---
.../voice/ConnectionInfoPopover.tsx | 52 +++++++++----------
.../components/voice/IncomingCallModal.tsx | 18 +++----
.../src/components/voice/PictureInPicture.tsx | 12 ++---
.../voice/ScreenShareSettingsPopover.tsx | 28 +++++-----
.../web/src/components/voice/StreamTile.tsx | 50 +++++++++---------
.../web/src/components/voice/VoiceChannel.tsx | 16 +++---
.../src/components/voice/VoiceChatPanel.tsx | 6 +--
.../src/components/voice/VoiceControlBar.tsx | 18 +++----
.../web/src/components/voice/VoiceGrid.tsx | 6 +--
.../web/src/components/voice/VoiceUser.tsx | 22 ++++----
10 files changed, 114 insertions(+), 114 deletions(-)
diff --git a/packages/web/src/components/voice/ConnectionInfoPopover.tsx b/packages/web/src/components/voice/ConnectionInfoPopover.tsx
index 6ac20936..765a9da5 100644
--- a/packages/web/src/components/voice/ConnectionInfoPopover.tsx
+++ b/packages/web/src/components/voice/ConnectionInfoPopover.tsx
@@ -13,21 +13,21 @@ function formatBitrate(kbps: number): string {
}
function pingColor(ms: number): string {
- if (ms <= 80) return 'text-discord-green';
- if (ms <= 200) return 'text-discord-yellow';
- return 'text-discord-red';
+ if (ms <= 80) return 'text-status-online';
+ if (ms <= 200) return 'text-status-idle';
+ return 'text-txt-danger';
}
function lossColor(pct: number): string {
- if (pct <= 1) return 'text-discord-green';
- if (pct <= 5) return 'text-discord-yellow';
- return 'text-discord-red';
+ if (pct <= 1) return 'text-status-online';
+ if (pct <= 5) return 'text-status-idle';
+ return 'text-txt-danger';
}
function jitterColor(ms: number): string {
- if (ms <= 30) return 'text-discord-green';
- if (ms <= 80) return 'text-discord-yellow';
- return 'text-discord-red';
+ if (ms <= 30) return 'text-status-online';
+ if (ms <= 80) return 'text-status-idle';
+ return 'text-txt-danger';
}
function sourceLabel(source: string): string {
@@ -51,15 +51,15 @@ function trackLabel(direction: 'send' | 'recv', source: string, participantName:
const Row = ({ label, value, colorClass }: { label: string; value: string; colorClass?: string }) => (
- {label}
- {value}
+ {label}
+ {value}
);
-const Divider = () => ;
+const Divider = () => ;
const SectionHeader = ({ title }: { title: string }) => (
-
+
{title}
);
@@ -68,10 +68,10 @@ function AudioTrackRow({ track }: { track: AudioTrackStat }) {
const label = trackLabel(track.direction, track.source, track.participantName);
return (
- {label}
-
+ {label}
+
{formatBitrate(track.bitrate)}
- {track.codec && {track.codec}}
+ {track.codec && {track.codec}}
);
@@ -84,19 +84,19 @@ function VideoTrackRow({ track }: { track: VideoTrackStat }) {
return (
- {label}
-
+ {label}
+
{formatBitrate(track.bitrate)}
- {track.codec && {track.codec}}
+ {track.codec && {track.codec}}
{(resolution || track.fps !== null || track.qualityLimitation || track.simulcastLayer) && (
-
+
{resolution && `${resolution}`}
{track.fps !== null && ` @${track.fps}`}
-
+
{track.direction === 'send' && track.qualityLimitation && track.qualityLimitation !== 'none'
? track.qualityLimitation
: ''}
@@ -133,17 +133,17 @@ export function ConnectionInfoPopover({ open, onClose }: ConnectionInfoPopoverPr
return (
-
-
Connection Info
+
+ Connection Info
{!room ? (
-
Not connected
+
Not connected
) : !stats ? (
-
Gathering stats...
+
Gathering stats...
) : (
<>
{/* Network */}
diff --git a/packages/web/src/components/voice/IncomingCallModal.tsx b/packages/web/src/components/voice/IncomingCallModal.tsx
index 981576f2..6a83d9d9 100644
--- a/packages/web/src/components/voice/IncomingCallModal.tsx
+++ b/packages/web/src/components/voice/IncomingCallModal.tsx
@@ -43,22 +43,22 @@ export function IncomingCallModal() {
{/* Call card */}
-
+
{/* Ring animation background */}
{/* Content */}
{/* Caller avatar */}
-
+
{incomingCall.callerName.charAt(0).toUpperCase()}
{/* Ringing phone icon */}
-
+
@@ -67,8 +67,8 @@ export function IncomingCallModal() {
{/* Caller info */}
-
{incomingCall.callerName}
-
Incoming Voice Call...
+
{incomingCall.callerName}
+
Incoming Voice Call...
{/* Action buttons */}
@@ -76,7 +76,7 @@ export function IncomingCallModal() {
{/* Decline */}