import React from 'react'; import { createPortal } from 'react-dom'; import { emit } from '@tauri-apps/api/event'; import { Infinity as InfinityIcon, ListMusic, MoveRight, Shuffle, Volume2, VolumeX, Waves } from 'lucide-react'; import type { TFunction } from 'i18next'; import type { MiniSyncPayload } from '../../utils/miniPlayerBridge'; interface Props { state: MiniSyncPayload; volume: number; volumeOpen: boolean; setVolumeOpen: (updater: boolean | ((v: boolean) => boolean)) => void; volumeBtnRef: React.RefObject; volumePopRef: React.RefObject; volumePopStyle: React.CSSProperties; handleVolumeChange: (v: number) => void; toggleMute: () => void; queueOpen: boolean; toggleQueue: () => void; t: TFunction; } export function MiniToolbar({ state, volume, volumeOpen, setVolumeOpen, volumeBtnRef, volumePopRef, volumePopStyle, handleVolumeChange, toggleMute, queueOpen, toggleQueue, t, }: Props) { return (
{volumeOpen && createPortal(
{Math.round(volume * 100)}%
{ const target = e.currentTarget; const setFromY = (clientY: number) => { const rect = target.getBoundingClientRect(); const ratio = 1 - (clientY - rect.top) / rect.height; handleVolumeChange(ratio); }; setFromY(e.clientY); const onMove = (me: MouseEvent) => setFromY(me.clientY); const onUp = () => { document.removeEventListener('mousemove', onMove); document.removeEventListener('mouseup', onUp); }; document.addEventListener('mousemove', onMove); document.addEventListener('mouseup', onUp); }} onWheel={(e) => { e.preventDefault(); handleVolumeChange(volume + (e.deltaY > 0 ? -0.05 : 0.05)); }} >
, document.body, )}
); }