@templatical/import-unlayer
Convert Unlayer email templates to Templatical's JSON format.

Migrate from Unlayer (the react-email-editor design JSON) to Templatical without rebuilding your templates by hand. Maps Unlayer content types to Templatical block types and reports anything that needs manual review.
Install
npm install @templatical/import-unlayer
Usage
import { convertUnlayerTemplate } from '@templatical/import-unlayer';
const unlayerJson = await fetch('/path/to/unlayer-design.json').then(r => r.json());
const result = convertUnlayerTemplate(unlayerJson);
console.log(result.content);
console.log(result.report);
for (const entry of result.report.entries) {
if (entry.status !== 'converted') {
console.warn(
`${entry.unlayerContentType} → ${entry.templaticalBlockType ?? 'n/a'} ` +
`(${entry.status})${entry.note ? `: ${entry.note}` : ''}`,
);
}
}
console.log(result.report.summary);
What's converted
| text | ParagraphBlock |
| heading | TitleBlock |
| image | ImageBlock |
| button | ButtonBlock |
| divider | DividerBlock |
| html | HtmlBlock |
| menu | MenuBlock |
| social | SocialIconsBlock |
| video | VideoBlock |
| timer | HtmlBlock (fallback) |
| form | skipped |
| Unknown content | Fallback to HtmlBlock |
Unknown or partially-supported content types are flagged in result.report so you can review them.
API
convertUnlayerTemplate(template) — converts an Unlayer design JSON, returns { content, report }
Types:
UnlayerTemplate — input shape (see source for full structure)
ImportResult — { content: TemplateContent, report: ImportReport }
ImportReport — { entries: ImportReportEntry[], warnings: string[], summary: { total, converted, approximated, htmlFallback, skipped } }
ImportReportEntry — { unlayerContentType, templaticalBlockType, status, note? }
ConversionStatus — 'converted' | 'approximated' | 'html-fallback' | 'skipped'
Documentation
Full reference at docs.templatical.com.
License
MIT