diff --git a/frontend/src/components/PodView.tsx b/frontend/src/components/PodView.tsx index ed87544..2b5273d 100644 --- a/frontend/src/components/PodView.tsx +++ b/frontend/src/components/PodView.tsx @@ -14,6 +14,7 @@ import { MicIcon, MicOffIcon, MonitorUpIcon, + Music2Icon, PhoneCallIcon, PhoneOffIcon, PanelLeftIcon, @@ -26,6 +27,7 @@ import { VolumeXIcon, WorkflowIcon, XIcon, + type LucideIcon, } from 'lucide-react'; import type { Room, RemoteTrack, RemoteTrackPublication } from 'livekit-client'; import type { @@ -637,47 +639,61 @@ export function PodView({ -
- - - - - +
+
+ void enableSound()} + disabled={!room} + active={!audioBlocked} + attention={audioBlocked} + /> + void toggleMic()} + disabled={!room} + active={micOn} + /> + + void playPodManVoiceTest()} + disabled={!room || testingVoice} + active={testingVoice} + busy={testingVoice} + /> +
+ + + + + + + {sharing ? 'Stop sharing your screen' : 'Share your screen with PodMan'} + +
@@ -1693,3 +1709,46 @@ function initials(name: string): string { .slice(0, 2) .toUpperCase(); } + +/** + * Compact, icon-only control for the pod toolbar. The label is hidden by + * default and surfaced on hover/focus via tooltip, so the row stays tight and + * responsive. `active` fills the button (engaged state), `attention` promotes + * it to the primary colour (needs a user action, e.g. audio is blocked). + */ +function PodControlButton({ + label, + icon: Icon, + onClick, + disabled, + active = false, + attention = false, + busy = false, +}: { + label: string; + icon: LucideIcon; + onClick: () => void; + disabled?: boolean; + active?: boolean; + attention?: boolean; + busy?: boolean; +}) { + return ( + + + + + {label} + + ); +}