import amazonMusicIcon from "../assets/icons/amzn.png";
import appleMusicIcon from "../assets/icons/am.png";
import deezerIcon from "../assets/icons/dzr.png";
import lrclibIcon from "../assets/icons/lrclib.png";
import musicBrainzDarkIcon from "../assets/icons/musicbrainz_d.png";
import musicBrainzLightIcon from "../assets/icons/musicbrainz_l.png";
import qobuzIcon from "../assets/icons/qbz.png";
import songlinkDarkIcon from "../assets/icons/songlink_d.png";
import songlinkLightIcon from "../assets/icons/songlink_l.png";
import songstatsIcon from "../assets/icons/songstats.png";
import tidalDarkIcon from "../assets/icons/tidal_d.png";
import tidalLightIcon from "../assets/icons/tidal_l.png";
type PlatformIconProps = {
className?: string;
};
function sanitizeClassName(className: string): string {
return className
.split(/\s+/)
.filter(Boolean)
.filter((part) => part !== "fill-current" && part !== "fill-muted-foreground" && !part.startsWith("text-"))
.join(" ");
}
function hasRoundedClass(className: string): boolean {
return className
.split(/\s+/)
.some((part) => part.startsWith("rounded"));
}
function getStatusClasses(className: string): string {
if (className.includes("text-green-500")) {
return "ring-2 ring-green-500 rounded-sm";
}
if (className.includes("text-red-500")) {
return "ring-2 ring-red-500 rounded-sm opacity-70";
}
return "";
}
function PlatformIcon({ src, alt, className = "w-4 h-4", defaultClassName = "" }: {
src: string;
alt: string;
className?: string;
defaultClassName?: string;
}) {
const cleanedClassName = sanitizeClassName(className);
const statusClasses = getStatusClasses(className);
const imageClassName = [
cleanedClassName || "w-4 h-4",
"inline-block shrink-0 object-contain",
!hasRoundedClass(cleanedClassName) ? defaultClassName : "",
statusClasses,
]
.filter(Boolean)
.join(" ");
return
;
}
function ThemedPlatformIcon({ lightSrc, darkSrc, alt, className = "w-4 h-4", defaultClassName = "" }: {
lightSrc: string;
darkSrc: string;
alt: string;
className?: string;
defaultClassName?: string;
}) {
const cleanedClassName = sanitizeClassName(className);
const statusClasses = getStatusClasses(className);
const wrapperClassName = [
cleanedClassName || "w-4 h-4",
"relative inline-flex shrink-0",
!hasRoundedClass(cleanedClassName) ? defaultClassName : "",
statusClasses,
]
.filter(Boolean)
.join(" ");
return
;
}
export function TidalIcon({ className = "w-4 h-4" }: PlatformIconProps) {
return ;
}
export function QobuzIcon({ className = "w-4 h-4" }: PlatformIconProps) {
return ;
}
export function AmazonIcon({ className = "w-4 h-4" }: PlatformIconProps) {
return ;
}
export function AppleMusicIcon({ className = "w-4 h-4" }: PlatformIconProps) {
return ;
}
export function DeezerIcon({ className = "w-4 h-4" }: PlatformIconProps) {
return ;
}
export function LrclibIcon({ className = "w-4 h-4" }: PlatformIconProps) {
return ;
}
export function MusicBrainzIcon({ className = "w-4 h-4" }: PlatformIconProps) {
return ;
}
export function SonglinkIcon({ className = "w-4 h-4" }: PlatformIconProps) {
return ;
}
export function SongstatsIcon({ className = "w-4 h-4" }: PlatformIconProps) {
return ;
}
export function TidalAvailabilityIcon({ className = "w-4 h-4" }: PlatformIconProps) {
return ;
}
export function QobuzAvailabilityIcon({ className = "w-4 h-4" }: PlatformIconProps) {
return ;
}
export function AmazonAvailabilityIcon({ className = "w-4 h-4" }: PlatformIconProps) {
return ;
}