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.
theme
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:
extends
EditorTheme
The built-in theme to inherit from. If omitted, uses 'minimal' reset styles as a base.
styles
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):
styles
ThemeComponentStyles
required
CSS-in-JS styles keyed by component name.
Returns a ThemeConfig object.

extendTheme

Extends a built-in theme with style overrides:
base
EditorTheme
required
The built-in theme to extend ('basic' or 'minimal').
overrides
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:
theme
EditorTheme
required
The active theme to use as a base.
panelStyles
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:
node
JSONContent
required
The TipTap node to resolve styles for.
depth
number
required
The node’s depth in the document tree. Affects styles for nested elements (e.g., nested lists).
mergedCssJs
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: