import { ExternalLinkIcon } from "lucide-react"; import type { ComponentProps } from "react"; import { Badge } from "@/components/ui/badge"; import { HoverCard, HoverCardContent, HoverCardTrigger, } from "@/components/ui/hover-card"; import { cn } from "@/lib/utils"; export function CitationLink({ href, children, ...props }: ComponentProps<"a">) { const domain = extractDomain(href ?? ""); // Priority: children > domain const childrenText = typeof children === "string" ? children.replace(/^citation:\s*/i, "") : null; const isGenericText = childrenText === "Source" || childrenText === "来源"; const displayText = (!isGenericText && childrenText) ?? domain; return ( e.stopPropagation()} {...props} > {displayText}
{displayText && (

{displayText}

)} {href && (

{href}

)}
Visit source
); } function extractDomain(url: string): string { try { return new URL(url).hostname.replace(/^www\./i, ""); } catch { return url; } }