mirror of
https://github.com/kilyabin/psysonic.git
synced 2026-07-22 06:25:41 +00:00
0b1ed8cc5a
Themes: - Add Poison (phosphor green on charcoal), Nucleo (warm brass light), Classic Winamp (LCD glow, Winamp yellow/orange) themes - Overhaul Psychowave — refined deep violet, no longer WIP - Reorganise ThemePicker into groups: Catppuccin, Nord, Retro, Tokyo Night, Psysonic Themes - Add --volume-accent CSS var for per-theme volume slider colour override Queue: - Full toolbar redesign with centred round buttons (Shuffle/Save/Load/Clear/Gapless/Crossfade) - Crossfade popover with 1–10 s range slider, right-aligned to avoid viewport overflow - Queue header: title + count + duration inline in accent colour, close button removed - Tech info (codec/bitrate) as frosted-glass overlay badge on cover art UI: - CoverLightbox shared component for album cover (AlbumHeader) and artist avatar (ArtistDetail) - NowPlayingDropdown: separate spinning/loading state — button always clickable, icon spins 600 ms min - Settings: "Experimental" badge on Crossfade and Gapless toggles - Help page: 2-column grid layout, new Crossfade & Gapless Q&A entry, updated theme/language entries i18n: - Full French (fr) and Dutch (nl) translations across all namespaces - Language selector sorted alphabetically (nl, en, fr, de) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
40 lines
1.3 KiB
TypeScript
40 lines
1.3 KiB
TypeScript
import { useNavigate } from 'react-router-dom';
|
|
import { useTranslation } from 'react-i18next';
|
|
import { useAuthStore } from '../store/authStore';
|
|
import LastfmIcon from './LastfmIcon';
|
|
|
|
export default function LastfmIndicator() {
|
|
const { t } = useTranslation();
|
|
const navigate = useNavigate();
|
|
const { lastfmSessionKey, lastfmUsername, lastfmSessionError } = useAuthStore();
|
|
|
|
if (!lastfmSessionKey) return null;
|
|
|
|
const tooltip = lastfmSessionError
|
|
? t('connection.lastfmSessionInvalid')
|
|
: t('connection.lastfmConnected', { user: lastfmUsername });
|
|
|
|
return (
|
|
<div
|
|
className="connection-indicator"
|
|
style={{ cursor: 'pointer' }}
|
|
onClick={() => navigate('/settings', { state: { tab: 'server' } })}
|
|
data-tooltip={tooltip}
|
|
data-tooltip-pos="bottom"
|
|
>
|
|
<div
|
|
className={`connection-led connection-led--${lastfmSessionError ? 'disconnected' : 'connected'}`}
|
|
/>
|
|
<div className="connection-meta">
|
|
<span className="connection-type" style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>
|
|
<LastfmIcon size={11} />
|
|
Last.fm
|
|
</span>
|
|
<span className="connection-server">
|
|
{lastfmSessionError ? t('connection.lastfmSessionInvalid').split(' —')[0] : `@${lastfmUsername}`}
|
|
</span>
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|