Add navbar music player with floating ambient panel.

Move ambient audio into a top-nav toggle that opens a retro floating player while keeping playback running when collapsed.
This commit is contained in:
2026-05-24 10:27:31 -06:00
parent f94fd49894
commit 458ad903db
8 changed files with 614 additions and 305 deletions

View File

@@ -0,0 +1,42 @@
"use client";
import { Music2 } from "lucide-react";
import { useAmbientAudioOptional } from "@/components/layout/ambient-audio-provider";
import { cn } from "@/lib/utils";
export function HeaderMusicButton() {
const ambient = useAmbientAudioOptional();
if (!ambient?.enabled) {
return null;
}
const { panelOpen, togglePanel, isPlaying, muted, volume } = ambient;
const active = isPlaying && !muted && volume > 0;
return (
<button
type="button"
data-ambient-audio-trigger
aria-label={panelOpen ? "Close music player" : "Open music player"}
aria-expanded={panelOpen}
aria-pressed={panelOpen}
onClick={togglePanel}
className={cn(
"inline-flex h-10 w-10 items-center justify-center border-2 bg-background/80 shadow-[var(--retro-shadow-sm)] transition-transform",
panelOpen
? "border-secondary bg-secondary/15 text-secondary"
: "border-border/70 text-foreground hover:border-secondary/50 hover:bg-secondary/10",
active && !panelOpen && "ambient-radio-nav-active",
)}
>
<span className="relative flex items-center justify-center">
<Music2 aria-hidden="true" className="size-4" />
{active ? (
<span className="ambient-radio-nav-dot" aria-hidden="true" />
) : null}
</span>
</button>
);
}