import { useMusic } from '@/app/context/MusicContext'; import { ActionIcon, Avatar, Box, Button, Flex, Group, Paper, Slider, Text, Transition } from '@mantine/core'; import { IconArrowsShuffle, IconMusic, IconPlayerPauseFilled, IconPlayerPlayFilled, IconPlayerSkipBackFilled, IconPlayerSkipForwardFilled, IconRepeat, IconRepeatOff, IconVolume, IconVolumeOff, IconX, } from '@tabler/icons-react'; import { useState } from 'react'; export default function FixedPlayerBar() { const { isPlaying, currentSong, currentTime, duration, volume, isMuted, isRepeat, isShuffle, togglePlayPause, playNext, playPrev, seek, setVolume, toggleMute, toggleRepeat, toggleShuffle, } = useMusic(); const [showVolume, setShowVolume] = useState(false); const [isMinimized, setIsMinimized] = useState(false); // Format time const formatTime = (seconds: number) => { const mins = Math.floor(seconds / 60); const secs = Math.floor(seconds % 60); return `${mins}:${secs.toString().padStart(2, '0')}`; }; // Handle seek const handleSeek = (value: number) => { seek(value); }; // Handle volume change const handleVolumeChange = (value: number) => { setVolume(value); }; // Handle shuffle toggle const handleToggleShuffle = () => { toggleShuffle(); }; // Handle minimize player (show floating icon) const handleMinimizePlayer = () => { setIsMinimized(true); }; // Handle restore player from floating icon const handleRestorePlayer = () => { setIsMinimized(false); }; // If minimized, show floating icon instead of player bar if (isMinimized) { return ( <> {/* Floating Music Icon - Shows when player is minimized */} {/* Spacer to prevent content from being hidden behind player */} ); } if (!currentSong) { return null; } return ( <> {/* Mini Player Bar - Always visible when song is playing */} {/* Song Info - Left */} {currentSong.judul} {currentSong.artis} {/* Controls + Progress - Center */} {/* Control Buttons */} {isPlaying ? ( ) : ( )} {isRepeat ? : } {/* Progress Bar - Desktop */} formatTime(value)} /> {/* Right Controls - Volume + Close */} setShowVolume(true)} onMouseLeave={() => setShowVolume(false)} pos="relative" > {isMuted ? ( ) : ( )} {(style) => ( )} {/* Progress Bar - Mobile */} formatTime(value)} /> {/* Spacer to prevent content from being hidden behind player */} ); }