From 62d1dd8bf3ee1f4c54d3642159852e0195fef679 Mon Sep 17 00:00:00 2001 From: Ajay Ghanwat Date: Thu, 1 Oct 2026 22:01:36 +0530 Subject: [PATCH] fix(email-renderer): honor explicit heading typography --- bun.lock | 2 +- packages/email-renderer/package.json | 2 +- packages/email-renderer/src/blocks.ts | 2 +- packages/email-renderer/test/heading-size.test.ts | 13 +++++++++++++ 4 files changed, 16 insertions(+), 3 deletions(-) create mode 100644 packages/email-renderer/test/heading-size.test.ts diff --git a/bun.lock b/bun.lock index a1d6251a..d968aff3 100644 --- a/bun.lock +++ b/bun.lock @@ -439,7 +439,7 @@ }, "packages/email-renderer": { "name": "@wrnexus/email-renderer", - "version": "0.1.50", + "version": "0.1.51", "dependencies": { "@wrnexus/blocks": "workspace:*", "amphtml-validator": "1.0.38", diff --git a/packages/email-renderer/package.json b/packages/email-renderer/package.json index 7a031c1a..d12c68da 100644 --- a/packages/email-renderer/package.json +++ b/packages/email-renderer/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/email-renderer", - "version": "0.1.50", + "version": "0.1.51", "type": "module", "description": "WRNexus block email renderers with HTML, text, AMP Email, and MJML interoperability.", "exports": { diff --git a/packages/email-renderer/src/blocks.ts b/packages/email-renderer/src/blocks.ts index 3b85a5f7..d8697455 100644 --- a/packages/email-renderer/src/blocks.ts +++ b/packages/email-renderer/src/blocks.ts @@ -340,7 +340,7 @@ export const headingBlock = leaf( { emailHtml: ({ node }) => emailCell( - `${renderRichText(attrs(node))}`, + `${renderRichText(attrs(node))}`, node, ), ampEmail: ({ node }) => diff --git a/packages/email-renderer/test/heading-size.test.ts b/packages/email-renderer/test/heading-size.test.ts new file mode 100644 index 00000000..0e44bad0 --- /dev/null +++ b/packages/email-renderer/test/heading-size.test.ts @@ -0,0 +1,13 @@ +import { expect, test } from "bun:test"; +import { renderEmail } from "../src/index.ts"; + +test("explicit heading sizes are not multiplied by browser heading defaults", async () => { + for (const size of [undefined, "36px", "expression(1)"]) { + const result = await renderEmail({schemaVersion:1,kind:"email",meta:{subject:"Typography",lang:"en"},theme:{tokens:{}},root:{id:"root",type:"layout.email-document",version:1,props:{width:"600"},styles:{},slots:{content:[{id:"heading",type:"content.heading",version:1,props:{text:"Design that works",level:"1"},styles:size?{fontSize:{base:size}}:{},slots:{}}]}}}, {amp:false,mjml:false}); + expect(result.ok).toBe(true); + if (!result.ok) continue; + const html=result.value.parts.html.content; + expect(html.includes("font-size:inherit;line-height:1.2;")).toBe(size === "36px"); + expect(html).not.toContain("expression("); + } +});