From ced765e22909ff83dba8969de9f904ce2316616f Mon Sep 17 00:00:00 2001 From: Amruth Pillai Date: Thu, 7 May 2026 21:29:10 +0200 Subject: [PATCH] fix(#2978): show underline on all links --- packages/pdf/src/templates/shared/primitives.tsx | 4 ++-- packages/pdf/src/templates/shared/rich-text.tsx | 4 ++-- packages/pdf/src/templates/shared/styles.ts | 6 ++++++ 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/packages/pdf/src/templates/shared/primitives.tsx b/packages/pdf/src/templates/shared/primitives.tsx index 284ce248b..8cac90787 100644 --- a/packages/pdf/src/templates/shared/primitives.tsx +++ b/packages/pdf/src/templates/shared/primitives.tsx @@ -4,7 +4,7 @@ import type { StyleInput } from "./styles"; import { Link as PdfLink, Text as PdfText, View } from "@react-pdf/renderer"; import { Icon as PhosphorIcon } from "phosphor-icons-react-pdf/dynamic"; import { useTemplateIconSlot, useTemplateStyle } from "./context"; -import { composeStyles } from "./styles"; +import { composeLinkStyles, composeStyles } from "./styles"; const asStyleInput = (style: unknown): StyleInput => style as StyleInput; @@ -36,7 +36,7 @@ export const Heading = ({ style, ...props }: ComponentProps) => export const Link = ({ style, ...props }: ComponentProps) => { const linkStyle = useTemplateStyle("link"); - return ; + return ; }; export const Small = ({ style, ...props }: ComponentProps) => { diff --git a/packages/pdf/src/templates/shared/rich-text.tsx b/packages/pdf/src/templates/shared/rich-text.tsx index 6bb5ae572..b9d7cba50 100644 --- a/packages/pdf/src/templates/shared/rich-text.tsx +++ b/packages/pdf/src/templates/shared/rich-text.tsx @@ -3,7 +3,7 @@ import { Text as PdfText, View } from "@react-pdf/renderer"; import { Html } from "react-pdf-html"; import { useTemplateStyle } from "./context"; import { safeTextStyle } from "./primitives"; -import { composeStyles, mergeStyles } from "./styles"; +import { composeStyles, mergeLinkStyles, mergeStyles } from "./styles"; export const RichText = ({ children }: { children: string }) => { const boldStyle = useTemplateStyle("bold"); @@ -38,7 +38,7 @@ export const RichText = ({ children }: { children: string }) => { b: mergeStyles(boldStyle, safeTextStyle), strong: mergeStyles(boldStyle, safeTextStyle), p: mergeStyles(richParagraphStyle, safeTextStyle), - a: mergeStyles(linkStyle, { textDecoration: "underline" }, safeTextStyle), + a: mergeLinkStyles(linkStyle, safeTextStyle), }} > {children} diff --git a/packages/pdf/src/templates/shared/styles.ts b/packages/pdf/src/templates/shared/styles.ts index 3f3fc782e..20a58e16d 100644 --- a/packages/pdf/src/templates/shared/styles.ts +++ b/packages/pdf/src/templates/shared/styles.ts @@ -13,8 +13,14 @@ export const composeStyles = (...styles: StyleInput[]): Style[] => { }); }; +export const linkUnderlineStyle = { textDecoration: "underline" } satisfies Style; + +export const composeLinkStyles = (...styles: StyleInput[]): Style[] => composeStyles(...styles, linkUnderlineStyle); + export const mergeStyles = (...styles: StyleInput[]): Style => Object.assign({}, ...composeStyles(...styles)); +export const mergeLinkStyles = (...styles: StyleInput[]): Style => mergeStyles(...styles, linkUnderlineStyle); + export type ResolvePlacementColorOptions = { placement: TemplatePlacement; defaultForeground: string;