unlayer-svelte
v0.1.2
Published
Svelte 5 + TypeScript wrapper for the Unlayer Email Editor with demo
Readme
Unlayer Svelte
Live demo: https://unlayer-svelte.vercel.app/
Svelte 5 + TypeScript SDK wrapper for the Unlayer Email Editor, plus a minimal demo.
Quick start
- Install deps (for local dev in this repo)
- npm:
npm i
- npm:
- Run demo locally
npm run dev:demothen open http://localhost:5173
- Build library
npm run build(outputsdist/)
- Build demo (static)
npm run build:demo(outputsdist-demo/)
Installation (for users of the library)
- npm:
npm i unlayer-svelte - Peer deps: requires
svelte@^5
Usage (library)
Install the package and import the Svelte component.
<script lang="ts">
import UnlayerEditor from 'unlayer-svelte'
let editor: InstanceType<typeof UnlayerEditor>
const options = { displayMode: 'email' }
function exportHtml() {
editor.exportHtml()
}
function onExport(e: CustomEvent<{ html: string; design: unknown }>) {
console.log('HTML:', e.detail.html)
}
</script>
<UnlayerEditor bind:this={editor} {options} on:export-html={onExport} />Props:
design?: objectinitial JSON designoptions?: Record<string, any>Unlayer init options (e.g.{ displayMode: 'email' })tools?: { whitelist?: string[]; blacklist?: string[] }simple tools enable/disable helper
Events:
loaded– editor readydesign-updated– emits updated JSON designexport-html– emits{ html, design }error– when initialization or actions fail
Public methods via bind:this:
exportHtml()loadDesign(design)
Demo app
Located under src/demo/. The main page renders the editor with controls to load public/welcome.json, export HTML, and preview it in a modal.
Commands:
npm run dev:demo– start dev server for demonpm run build:demo– build static demo todist-demo/
Architecture notes
- The wrapper lazily loads Unlayer via the official CDN
https://editor.unlayer.com/embed.jsas a fallback, avoiding direct npm bundling issues and keeping bundle small. - Initialization occurs in
onMount;destroy()is called inonDestroyto prevent leaks. - Events are re-emitted as Svelte component events. Design updates are read via
getDesign. - Tools whitelist/blacklist is transformed into Unlayer
toolsconfig ({ toolName: { enabled: boolean } }). - The container fills available space; the demo sets full-height layout for convenience.
Possible improvements
- Add full TypeScript type definitions for Unlayer API.
- Expose more helpers (save image, merge tags, custom tools).
- Configurable CDN and script loading strategy.
- SSR guards for environments without
window.
Deploying the demo
- Vercel: set Build Command to
npm run build:demo, Output Directory todist-demo. - Alternatively, run
npm run build:demoand deploydist-demo/to any static host.
