From 9a0cb3bbe3536d8419f37edac0882444ff5be870 Mon Sep 17 00:00:00 2001 From: lukasIO Date: Tue, 13 Jan 2026 16:57:44 +0100 Subject: [PATCH] add volume --- app/dual-rooms/session/SecondaryRoomView.tsx | 74 ++++++++++++++------ styles/DualRoom.module.css | 53 ++++++++++++++ 2 files changed, 105 insertions(+), 22 deletions(-) diff --git a/app/dual-rooms/session/SecondaryRoomView.tsx b/app/dual-rooms/session/SecondaryRoomView.tsx index 63eb400..a648846 100644 --- a/app/dual-rooms/session/SecondaryRoomView.tsx +++ b/app/dual-rooms/session/SecondaryRoomView.tsx @@ -26,6 +26,7 @@ export interface SecondaryRoomViewProps { export function SecondaryRoomView({ onToggleEnlarge, isEnlarged, room }: SecondaryRoomViewProps) { const layoutContext = useCreateLayoutContext(); const [isAudioMuted, setIsAudioMuted] = React.useState(true); // Muted by default + const [volume, setVolume] = React.useState(1); // Volume level (0-1) const [isCameraEnabled, setIsCameraEnabled] = React.useState(false); const [isMicEnabled, setIsMicEnabled] = React.useState(false); const [showControls, setShowControls] = React.useState(false); @@ -56,6 +57,16 @@ export function SecondaryRoomView({ onToggleEnlarge, isEnlarged, room }: Seconda setIsAudioMuted((prev) => !prev); }, []); + const handleVolumeChange = React.useCallback((e: React.ChangeEvent) => { + const newVolume = parseFloat(e.target.value); + setVolume(newVolume); + if (newVolume === 0) { + setIsAudioMuted(true); + } else if (isAudioMuted) { + setIsAudioMuted(false); + } + }, [isAudioMuted]); + const toggleCamera = React.useCallback(() => { const newState = !isCameraEnabled; setIsCameraEnabled(newState); @@ -86,27 +97,46 @@ export function SecondaryRoomView({ onToggleEnlarge, isEnlarged, room }: Seconda
- +
+ + +
- + diff --git a/styles/DualRoom.module.css b/styles/DualRoom.module.css index 50341d0..2f86f70 100644 --- a/styles/DualRoom.module.css +++ b/styles/DualRoom.module.css @@ -109,6 +109,59 @@ align-items: center; } +.volumeControl { + display: flex; + align-items: center; + gap: 0.5rem; +} + +.volumeSlider { + width: 80px; + height: 4px; + -webkit-appearance: none; + appearance: none; + background: rgba(255, 255, 255, 0.2); + border-radius: 2px; + outline: none; + cursor: pointer; + transition: background 0.2s ease; +} + +.volumeSlider:hover { + background: rgba(255, 255, 255, 0.3); +} + +.volumeSlider::-webkit-slider-thumb { + -webkit-appearance: none; + appearance: none; + width: 14px; + height: 14px; + background: var(--lk-foreground); + border-radius: 50%; + cursor: pointer; + transition: all 0.2s ease; +} + +.volumeSlider::-webkit-slider-thumb:hover { + background: white; + transform: scale(1.2); +} + +.volumeSlider::-moz-range-thumb { + width: 14px; + height: 14px; + background: var(--lk-foreground); + border-radius: 50%; + border: none; + cursor: pointer; + transition: all 0.2s ease; +} + +.volumeSlider::-moz-range-thumb:hover { + background: white; + transform: scale(1.2); +} + .controlButton, .enlargeButton { background: transparent;