Skip to main content

EmailTheming extension

The EmailTheming extension from @react-email/editor/plugins adds theme-aware styling to the editor and provides a SerializerPlugin for theme-aware HTML export.
EditorThemeInput
default:"'basic'"
The active theme. Accepts a built-in preset ('basic' or 'minimal') or a ThemeConfig object for custom themes.

Types

EditorTheme


EditorThemeInput

The widened theme type accepted by the theme prop and EmailTheming.configure():

ThemeableComponent

The subset of KnownThemeComponents that can be customized via ThemeComponentStyles:

ThemeComponentStyles

CSS-in-JS styles keyed by themeable component name:

ThemeConfig

A custom theme configuration object:
EditorTheme
The built-in theme to inherit from. If omitted, uses 'minimal' reset styles as a base.
ThemeComponentStyles
required
CSS-in-JS styles keyed by component name. Values are merged on top of the base theme.

KnownThemeComponents

All component keys that a theme can style:

KnownCssProperties

CSS properties that can be customized per theme component: Layout: align, width, height, padding, paddingTop, paddingRight, paddingBottom, paddingLeft, margin, marginTop, marginRight, marginBottom, marginLeft Appearance: backgroundColor, color, borderRadius, borderWidth, borderColor, borderStyle Typography: fontSize, fontWeight, lineHeight, textDecoration, fontFamily, letterSpacing

CssJs

A mapping of theme component keys to CSS properties:

PanelGroup

Represents a group of configurable theme properties for a component:

PanelInputProperty

An individual configurable CSS property within a panel:

Theme helpers

createTheme

Creates a custom theme from scratch (uses minimal reset as base):
ThemeComponentStyles
required
CSS-in-JS styles keyed by component name.
Returns a ThemeConfig object.

extendTheme

Extends a built-in theme with style overrides:
EditorTheme
required
The built-in theme to extend ('basic' or 'minimal').
ThemeComponentStyles
required
CSS-in-JS styles to merge on top of the base theme.
Returns a ThemeConfig object.

Utility functions

getMergedCssJs

Merges the base theme styles with custom panel overrides:
EditorTheme
required
The active theme to use as a base.
PanelGroup[]
Custom style overrides from the theme panel UI.

getResolvedNodeStyles

Resolves the final CSS styles for a specific node based on theme and document depth:
JSONContent
required
The TipTap node to resolve styles for.
number
required
The node’s depth in the document tree. Affects styles for nested elements (e.g., nested lists).
CssJs
required
The merged theme styles from getMergedCssJs.

getThemeComponentKey

Maps a node type and depth to a theme component key:

stylesToCss

Converts a theme’s style definitions to a CSS object:

useEmailTheming

React hook that provides access to the current theme state from within the editor: