import { useCallback, useEffect, useRef, useState } from 'react'; import { Link, useLocation, useNavigate } from 'react-router'; import { useClient } from 'hooks/useClient'; import { useCapabilities } from 'hooks/useCapabilities'; import { Play, Pause, SkipBack, SkipForward, X, Volume2, VolumeX, Loader2, MicVocal } from 'lucide-react'; import { SeekBar } from 'officerdev'; import { MusicHeart } from './MusicHeart'; import { fmtClock, musicPath, sortTracks, trackHomePath, type AlbumMeta, type NowPlaying } from './shared'; import { useMusicPlayer, type PlayerTrack } from './useMusicPlayer'; import { GaplessEngine, type EngineTrack } from './gapless-engine'; import { publishPlayerTime, registerPlayerSeek } from './player-time'; import { useLyricsOpen } from './useLyricsOpen'; // Mounted once in the persistent DashboardLayout (outside ), so it owns the single audio engine // and the site-wide play dock — playback survives navigation between routes. // // Audio is Web Audio (gapless-engine), NOT an