"use client"; import type { ReactNode } from "react"; import { usePostLinkNewTab } from "@/components/PostLinkProvider"; import { linkifyParts } from "@/lib/linkify"; function AutolinkAnchor({ href, children, openInNewTab, }: { href: string; children: ReactNode; openInNewTab: boolean; }) { return ( e.stopPropagation()} onContextMenu={(e) => e.stopPropagation()} > {children} ); } /** * 纯文本自动识别 URL。 * forceNewTab:聊天等场景始终新开;否则读 PostLinkProvider(post_link_new_tab)。 */ export default function AutolinkText({ text, renderText, forceNewTab = false, }: { text: string; renderText?: (segment: string) => ReactNode; forceNewTab?: boolean; }) { const settingNewTab = usePostLinkNewTab(); const openInNewTab = forceNewTab || settingNewTab; const parts = linkifyParts(text); return ( <> {parts.map((p, i) => { const key = `l-${i}`; if (p.type === "url") { return ( {p.value} ); } if (renderText) return {renderText(p.value)}; return {p.value}; })} ); }