"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};
})}
>
);
}