import { Copy, ExternalLink, Globe } from 'lucide-react'; import { domainFromUrl, type LinkMetadata } from '@/lib/link-metadata'; import { Skeleton } from '@/components/ui/skeleton'; import { Button } from '@/components/ui/button'; import { platform } from '@/lib/platform'; interface LinkPreviewCardProps { metadata: LinkMetadata; compact?: boolean; } export function LinkPreviewCard({ metadata, compact }: LinkPreviewCardProps) { const handleOpen = (e: React.MouseEvent) => { e.stopPropagation(); platform.link.openExternal(metadata.url); }; const handleCopy = (e: React.MouseEvent) => { e.stopPropagation(); navigator.clipboard.writeText(metadata.url); }; return (
{ e.stopPropagation(); handleOpen(e); }} > {metadata.image && ( { (e.target as HTMLImageElement).style.display = 'none'; }} /> )}
{metadata.favicon ? ( { (e.target as HTMLImageElement).replaceWith( document.createElement('span'), ); }} /> ) : ( )} {metadata.domain}
{metadata.title && (

{metadata.title}

)} {metadata.description && (

{metadata.description}

)} {!compact && (
)}
); } /** Shown when metadata couldn't be fetched — the link itself still works. */ export function LinkPreviewCardFallback({ url }: { url: string }) { return ( ); } export function LinkPreviewCardSkeleton() { return (
); }