Files
smesh/src/components/Favicon/index.tsx
codytseng 6cc3dd32a5 style: 🎨
2025-06-26 23:29:12 +08:00

30 lines
716 B
TypeScript

import { cn } from '@/lib/utils'
import { useState } from 'react'
export function Favicon({
domain,
className,
fallback = null
}: {
domain: string
className?: string
fallback?: React.ReactNode
}) {
const [loading, setLoading] = useState(true)
const [error, setError] = useState(false)
if (error) return fallback
return (
<div className={cn('relative', className)}>
{loading && <div className={cn('absolute inset-0', className)}>{fallback}</div>}
<img
src={`https://${domain}/favicon.ico`}
alt={domain}
className={cn('absolute inset-0', className)}
onError={() => setError(true)}
onLoad={() => setLoading(false)}
/>
</div>
)
}