import { BoxIcon } from "lucide-react"; import { useState } from "react"; import { getDomain } from "tldts"; // --------------------------------------------------------------------------- // SourceFavicon — renders a small favicon derived from a source URL. // Falls back to a neutral icon if the URL is missing or the image fails to load. // --------------------------------------------------------------------------- export function sourceFaviconUrl(url: string | undefined, size: number): string | null { if (!url) return null; const domain = getDomain(url) ?? (URL.canParse(url) ? getDomain(new URL(url).hostname) : null); if (!domain) return null; return `https://www.google.com/s2/favicons?domain=${domain}&sz=${size * 2}`; } export function SourceFavicon({ url, size = 16 }: { url?: string; size?: number }) { const [failed, setFailed] = useState(false); const src = failed ? null : sourceFaviconUrl(url, size); if (!src) { return ( ); } return ( setFailed(true)} className="shrink-0 rounded-sm" style={{ width: size, height: size }} /> ); }