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 {alt}; } 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 ; }