Deutsch
Schnellstart
1. Pakete installieren
bash
npm install @templatical/editor @templatical/rendererbash
pnpm add @templatical/editor @templatical/rendererbash
yarn add @templatical/editor @templatical/rendererbash
bun add @templatical/editor @templatical/renderer2. Editor einbinden
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Templatical Editor</title>
<style>
body { margin: 0; }
#editor { height: calc(100vh - 48px); }
#toolbar { height: 48px; display: flex; align-items: center; padding: 0 16px; border-bottom: 1px solid #e5e7eb; }
#toolbar button { padding: 8px 16px; background: #1a73e8; color: #fff; border: none; border-radius: 6px; cursor: pointer; }
</style>
</head>
<body>
<div id="toolbar">
<button onclick="save()">Save Template</button>
</div>
<div id="editor"></div>
<script type="module">
import { init } from '@templatical/editor';
import '@templatical/editor/style.css';
const editor = await init({
container: '#editor',
});
window.save = async function () {
// Das JSON ist die Quelle der Wahrheit. Das MJML ist ein optionaler
// Cache — hier sinnvoll, weil dieses Beispiel im Browser rendert.
// Siehe „Was gespeichert werden sollte" unter Wie das Rendering funktioniert.
const content = editor.getContent();
const mjml = await editor.toMjml();
await fetch('/api/templates', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ content, mjml }),
});
};
</script>
</body>
</html>Ihr Backend erhält sowohl das JSON (speichern Sie es, damit Nutzer das Template später weiter bearbeiten können) als auch das MJML. toMjml() erzeugt kein HTML.
3. MJML zu HTML kompilieren
Auf dem Server kompilieren Sie das gerade gesendete MJML mit einer beliebigen MJML-Bibliothek — Node, PHP, Python, Ruby und andere. So funktioniert das Rendering listet sie. Das Node-Paket ist mjml:
bash
npm install mjmlbash
pnpm add mjmlbash
yarn add mjmlbash
bun add mjmlts
import mjml2html from "mjml";
const { html } = mjml2html(mjml);
// html ist versandfertigAus einer gespeicherten JSON-Datei, ohne den Editor zu mounten (braucht ebenfalls mjml):
bash
npx -y @templatical/template-tools render template.json --format html -o email.htmlbash
pnpm dlx @templatical/template-tools render template.json --format html -o email.htmlbash
yarn dlx @templatical/template-tools render template.json --format html -o email.htmlbash
bunx @templatical/template-tools render template.json --format html -o email.htmlSiehe Template Tools.
Shadow DOM als Standard
Der Editor mountet standardmäßig innerhalb eines Shadow DOM, sodass Host-Seiten-CSS nicht in Editor-Elemente durchschlagen kann. Verwenden Sie ein <div> — oder ein beliebiges Shadow-Host-fähiges Element — als Container; Elemente wie <table>, <form> oder <input> können keinen Shadow Root aufnehmen.
Übergeben Sie shadowDom: false, um zu deaktivieren, falls Sie einen ungewöhnlichen Container benötigen, Editor-Interna über document.querySelector ansprechen oder Firefox <101 / Safari <16.4 unterstützen müssen. Siehe den Shadow-DOM-Leitfaden für die vollständige Kompromissliste und Theming via :host.
Nächste Schritte
- Einstiegspunkte — Einbinden, Backend, Prompt oder JSON → HTML.
- Einbetten — Container-Regeln, Stacking und was die CSS-Isolation bricht.
- Backend anbinden — Speichern, Versionen, Kommentare, gespeicherte Blöcke, Medien, Test-E-Mail, Rendern.
- Template Tools — Validieren, Rendern, Importieren und Live-Vorschau per CLI oder Skript.
- So funktioniert das Rendering — JSON → MJML → HTML, und was gespeichert werden sollte.