diff --git a/packages/email-renderer/package.json b/packages/email-renderer/package.json index c12b1a75..83b1b8ef 100644 --- a/packages/email-renderer/package.json +++ b/packages/email-renderer/package.json @@ -1,6 +1,6 @@ { "name": "@wrnexus/email-renderer", - "version": "0.1.46", + "version": "0.1.47", "type": "module", "description": "WRNexus block email renderers with HTML, text, AMP Email, and MJML interoperability.", "exports": { diff --git a/packages/email-renderer/src/presets.ts b/packages/email-renderer/src/presets.ts index 5c1ad7ab..f5399bcd 100644 --- a/packages/email-renderer/src/presets.ts +++ b/packages/email-renderer/src/presets.ts @@ -43,6 +43,14 @@ export function createSectionPreset(name: string, id: () => string): BlockNode { text("{{organizationAddress|Add your organization address}}"), button("Unsubscribe", "{{unsubscribeUrl|https://example.com/unsubscribe}}"), ]; + else if (name === "announcement") + content = [heading("Big news, just for you"), text("Share your latest launch, update, or upcoming event with your community."), button("See what’s new", "https://example.com")]; + else if (name === "testimonial") + content = [heading("What our customers say"), text("“A thoughtful experience from start to finish. We couldn’t be happier.”"), text("— Customer name, Company")]; + else if (name === "two-column") { + const columns = ["First highlight", "Second highlight"].map(title => node("layout.column", { width: "50%" }, { content: [heading(title), text("Describe a benefit, share an update, or introduce a service."), button("Learn more", "https://example.com")] })); + return node("layout.section", { background: "#ffffff", padding: "24px" }, { content: [node("layout.columns", {}, { columns })] }); + } else throw new Error("Unknown section preset."); const column = node("layout.column", { width: "100%" }, { content }); const columns = node("layout.columns", {}, { columns: [column] }); @@ -50,7 +58,7 @@ export function createSectionPreset(name: string, id: () => string): BlockNode { } /** Native, editable section presets; no HTML snapshots. */ -export const emailPresets = ["welcome", "feature", "footer"].map(id => ({ +export const emailPresets = ["welcome", "feature", "announcement", "testimonial", "two-column", "footer"].map(id => ({ id, name: { key: "email.presets." + id, fallback: id[0].toUpperCase() + id.slice(1) }, icon: "icon-[lucide--layout-template]",