diff --git a/packages/email-renderer/package.json b/packages/email-renderer/package.json index 5a477f73..af5ad6ab 100644 --- a/packages/email-renderer/package.json +++ b/packages/email-renderer/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/email-renderer", - "version": "0.1.6", + "version": "0.1.7", "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 093ad7b7..2f88c65d 100644 --- a/packages/email-renderer/src/blocks.ts +++ b/packages/email-renderer/src/blocks.ts @@ -206,9 +206,9 @@ export const columnBlock = defineBlock({ }), renderers: { emailHtml: ({ node, slots }) => - `${slots.content}`, + `${slots.content}
`, ampEmail: ({ node, slots }) => - `${slots.content}`, + `${slots.content}
`, mjml: ({ node, slots }) => `${slots.content}`, }, diff --git a/packages/email-renderer/test/email.test.ts b/packages/email-renderer/test/email.test.ts index 0a6037e3..0d742385 100644 --- a/packages/email-renderer/test/email.test.ts +++ b/packages/email-renderer/test/email.test.ts @@ -73,6 +73,41 @@ describe("email renderer", () => { expect((await validateAmpEmail("")).valid).toBe(false); }); + test("keeps rendered block rows inside valid column tables", async () => { + const columnDocument = structuredClone(document); + const content = columnDocument.root.slots.content[0]!.slots.content; + columnDocument.root.slots.content[0]!.slots.content = [ + { + id: "columns", + type: "layout.columns", + version: 1, + props: {}, + styles: {}, + slots: { + columns: [ + { + id: "column", + type: "layout.column", + version: 1, + props: { width: "100%" }, + styles: {}, + slots: { content }, + }, + ], + }, + }, + ]; + const rendered = await renderEmail(columnDocument, { amp: true }); + expect(rendered.ok).toBe(true); + if (!rendered.ok) return; + expect(rendered.value.parts.html.content).toContain( + 'data-block-id="column" class="wrn-column" width="100%" valign="top">
{ const styled = structuredClone(document); styled.root.slots.content[0]!.slots.content[0]!.styles = {