diff --git a/package.json b/package.json index fc8a1bad4f1..56d2cbdbfde 100644 --- a/package.json +++ b/package.json @@ -7,8 +7,8 @@ "@floating-ui/react": "^0.24.3", "@linaria/core": "^6.2.0", "@linaria/react": "^6.2.1", - "@react-email/components": "0.0.35", - "@react-email/render": "0.0.17", + "@react-email/components": "^0.5.3", + "@react-email/render": "^1.2.3", "@sentry/profiling-node": "^9.26.0", "@sentry/react": "^9.26.0", "@sniptt/guards": "^0.2.0", diff --git a/packages/twenty-emails/package.json b/packages/twenty-emails/package.json index dc09c2eb711..07f3da620eb 100644 --- a/packages/twenty-emails/package.json +++ b/packages/twenty-emails/package.json @@ -21,6 +21,7 @@ "@lingui/cli": "^5.1.2", "@lingui/swc-plugin": "^5.6.0", "@lingui/vite-plugin": "^5.1.2", + "@tiptap/core": "^3.4.2", "@types/react": "^19", "@types/react-dom": "^19", "react-email": "4.0.3" diff --git a/packages/twenty-emails/src/index.ts b/packages/twenty-emails/src/index.ts index 07ff30d9233..afc26b303d8 100644 --- a/packages/twenty-emails/src/index.ts +++ b/packages/twenty-emails/src/index.ts @@ -1,7 +1,9 @@ +export type { JSONContent } from '@tiptap/core'; export * from './emails/clean-suspended-workspace.email'; export * from './emails/password-reset-link.email'; export * from './emails/password-update-notify.email'; export * from './emails/send-email-verification-link.email'; export * from './emails/send-invite-link.email'; -export * from './emails/warn-suspended-workspace.email'; export * from './emails/validate-approved-access-domain.email'; +export * from './emails/warn-suspended-workspace.email'; +export * from './utils/email-renderer/email-renderer'; diff --git a/packages/twenty-emails/src/utils/email-renderer/email-renderer.tsx b/packages/twenty-emails/src/utils/email-renderer/email-renderer.tsx new file mode 100644 index 00000000000..99d59bf2fef --- /dev/null +++ b/packages/twenty-emails/src/utils/email-renderer/email-renderer.tsx @@ -0,0 +1,34 @@ +import { Body, Container, Head, Html } from '@react-email/components'; +import { type JSONContent } from '@tiptap/core'; +import { mappedNodeContent } from 'src/utils/email-renderer/renderers/render-node'; + +export const reactMarkupFromJSON = (json: JSONContent | string) => { + if (typeof json === 'string') { + return json; + } + + const jsxNodes = mappedNodeContent(json); + return ( + + +