Avoid duplicate markdown link icons

Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
Dotta
2026-04-24 17:27:10 -05:00
parent 46cfd9574b
commit 3656687849
2 changed files with 4 additions and 1 deletions

View File

@@ -325,6 +325,7 @@ describe("MarkdownBody", () => {
// icon can never be orphaned on the previous line from the URL text. // icon can never be orphaned on the previous line from the URL text.
expect(html).toMatch(/<span style="white-space:nowrap">.*lucide-github.*?<\/svg>h<\/span>/); expect(html).toMatch(/<span style="white-space:nowrap">.*lucide-github.*?<\/svg>h<\/span>/);
expect(html).toContain("ttps://github.com/paperclipai/paperclip/pull/4099"); expect(html).toContain("ttps://github.com/paperclipai/paperclip/pull/4099");
expect(html).not.toContain("lucide-external-link");
}); });
it("prefixes GitHub autolinks with the GitHub icon", () => { it("prefixes GitHub autolinks with the GitHub icon", () => {

View File

@@ -140,6 +140,8 @@ function renderLinkBody(
): ReactNode { ): ReactNode {
if (!leadingIcon && !trailingIcon) return children; if (!leadingIcon && !trailingIcon) return children;
// React-markdown can pass arrays/elements for styled link text; the nowrap
// splitting below is intentionally limited to plain text links.
if (typeof children === "string" && children.length > 0) { if (typeof children === "string" && children.length > 0) {
if (children.length === 1) { if (children.length === 1) {
return ( return (
@@ -332,7 +334,7 @@ export function MarkdownBody({
const leadingIcon = isGitHubLink ? ( const leadingIcon = isGitHubLink ? (
<Github aria-hidden="true" className="mr-1 inline h-3.5 w-3.5 align-[-0.125em]" /> <Github aria-hidden="true" className="mr-1 inline h-3.5 w-3.5 align-[-0.125em]" />
) : null; ) : null;
const trailingIcon = isExternal ? ( const trailingIcon = isExternal && !isGitHubLink ? (
<ExternalLink aria-hidden="true" className="ml-1 inline h-3 w-3 align-[-0.125em]" /> <ExternalLink aria-hidden="true" className="ml-1 inline h-3 w-3 align-[-0.125em]" />
) : null; ) : null;
return ( return (