"use client"; import { SkipForward, Volume2, VolumeX, X } from "lucide-react"; import { useEffect, useRef } from "react"; import { useAmbientAudio } from "@/components/layout/ambient-audio-provider"; import { Button } from "@/components/ui/button"; import { Label } from "@/components/ui/label"; import { AVATAR_AMBIENT_PLAYLIST } from "@/lib/avatar-audio"; export function AmbientAudioPanel() { const panelRef = useRef(null); const { panelOpen, setPanelOpen, volume, muted, trackIndex, currentTrack, autoplayBlocked, loadError, handleToggleMute, handleVolumeChange, handleSkip, handleUserActivate, } = useAmbientAudio(); useEffect(() => { if (!panelOpen) { return; } const handlePointerDown = (event: MouseEvent | TouchEvent) => { const target = event.target; if (!(target instanceof Node)) { return; } if (panelRef.current?.contains(target)) { return; } if ( target instanceof Element && target.closest("[data-ambient-audio-trigger]") ) { return; } setPanelOpen(false); }; window.addEventListener("mousedown", handlePointerDown); window.addEventListener("touchstart", handlePointerDown); return () => { window.removeEventListener("mousedown", handlePointerDown); window.removeEventListener("touchstart", handlePointerDown); }; }, [panelOpen, setPanelOpen]); if (!panelOpen) { return null; } return (

Bit Tunes

Ambient radio

{currentTrack?.label ?? "Track"}

handleVolumeChange(Number(event.target.value))} className="ambient-radio-slider w-full" />
Track {trackIndex + 1}/{AVATAR_AMBIENT_PLAYLIST.length}
{loadError ? (

Could not load{" "} {currentTrack?.filename}.

) : autoplayBlocked && !muted && volume > 0 ? (

Tap volume to start audio.

) : null}
); }