{
if (selectionMode) {
toggleSelect(pl.id, { shiftKey: e.shiftKey });
} else {
navigate(`/playlists/${pl.id}`);
}
}}
onContextMenu={(e) => {
e.preventDefault();
if (selectionMode && selectedIds.size > 0) {
openContextMenu(e.clientX, e.clientY, selectedPlaylists, 'multi-playlist');
} else {
openContextMenu(e.clientX, e.clientY, pl, 'playlist');
}
}}
onMouseLeave={() => { if (deleteConfirmId === pl.id) setDeleteConfirmId(null); }}
style={selectionMode && selectedIds.has(pl.id) ? {
position: 'relative',
outline: '2px solid var(--accent)',
outlineOffset: '2px',
borderRadius: 'var(--radius-md)'
} : { position: 'relative' }}
>
{!selectionMode && (
{isPlaylistDeletable(pl) && (
)}
{isPlaylistDeletable(pl) && (
)}
)}
{selectionMode && (
{selectedIds.has(pl.id) && }
)}
{/* Cover area — server collage or fallback icon */}
{isSmartPlaylistName(pl.name) && (smartCoverIdsByPlaylist[pl.id]?.length ?? 0) > 0 ? (
{Array.from({ length: 4 }, (_, i) => {
const id = smartCoverIdsByPlaylist[pl.id][i % smartCoverIdsByPlaylist[pl.id].length];
return id ? (
) : (
);
})}
) : pl.coverArt ? (
) : (
)}
{pendingSmart.some(p => p.id === pl.id || p.name === pl.name) && (
)}
{/* Play overlay — same pattern as AlbumCard */}
{isSmartPlaylistName(pl.name) && }
{displayPlaylistName(pl.name)}
{t('playlists.songs', { n: filteredSongCountByPlaylist[pl.id] ?? pl.songCount })}
{(filteredDurationByPlaylist[pl.id] ?? pl.duration) > 0 && (
<> · {formatDuration(filteredDurationByPlaylist[pl.id] ?? pl.duration)}>
)}