@maildeno/editor 0.1.3 → 0.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +258 -0
- package/README.md +397 -381
- package/dist/RowPreviewChildren-DT0y0lKC.js +4 -0
- package/dist/RowPreviewChildren-OsbF7_vu.js +4 -0
- package/dist/RowPreviewLegacyComponent-BV4b5bHQ.js +487 -0
- package/dist/RowPreviewLegacyComponent-C08MGJVT.js +487 -0
- package/dist/RowPreviewRow-ByxeBYV8.js +112 -0
- package/dist/RowPreviewRow-N-hh5l_H.js +112 -0
- package/dist/adapters/errors.d.ts +59 -0
- package/dist/adapters/index.d.ts +31 -0
- package/dist/adapters/types.d.ts +68 -0
- package/dist/brand.d.ts +15 -0
- package/dist/components/DesktopOnlyNotice.vue.d.ts +20 -0
- package/dist/components/features/emailBuilder/EmailEditor.vue.d.ts +182 -0
- package/dist/components/features/emailBuilder/assistant/AssistantPanel.vue.d.ts +37 -0
- package/dist/components/features/emailBuilder/blocks/AnchorBlock.vue.d.ts +3 -0
- package/dist/components/features/emailBuilder/blocks/ButtonBlock.vue.d.ts +3 -0
- package/dist/components/features/emailBuilder/blocks/DividerBlock.vue.d.ts +3 -0
- package/dist/components/features/emailBuilder/blocks/HeadingBlock.vue.d.ts +3 -0
- package/dist/components/features/emailBuilder/blocks/ImageBlock.vue.d.ts +3 -0
- package/dist/components/features/emailBuilder/blocks/ListBlock.vue.d.ts +3 -0
- package/dist/components/features/emailBuilder/blocks/MenuBlock.vue.d.ts +3 -0
- package/dist/components/features/emailBuilder/blocks/ParagraphBlock.vue.d.ts +3 -0
- package/dist/components/features/emailBuilder/blocks/SocialsBlock.vue.d.ts +3 -0
- package/dist/components/features/emailBuilder/blocks/SpacerBlock.vue.d.ts +3 -0
- package/dist/components/features/emailBuilder/blocks/VideoBlock.vue.d.ts +3 -0
- package/dist/components/features/emailBuilder/canvas/Canvas.vue.d.ts +3 -0
- package/dist/components/features/emailBuilder/canvas/CanvasColumn.vue.d.ts +49 -0
- package/dist/components/features/emailBuilder/canvas/CanvasComponent.vue.d.ts +56 -0
- package/dist/components/features/emailBuilder/canvas/CanvasElement.vue.d.ts +21 -0
- package/dist/components/features/emailBuilder/canvas/CanvasRow.vue.d.ts +49 -0
- package/dist/components/features/emailBuilder/canvas/CanvasRowSpacer.vue.d.ts +40 -0
- package/dist/components/features/emailBuilder/health/HealthIndicator.vue.d.ts +3 -0
- package/dist/components/features/emailBuilder/layout/Header.vue.d.ts +54 -0
- package/dist/components/features/emailBuilder/layout/SendEmail.vue.d.ts +21 -0
- package/dist/components/features/emailBuilder/layout/SidebarLeft.vue.d.ts +3 -0
- package/dist/components/features/emailBuilder/layout/SidebarRight.vue.d.ts +3 -0
- package/dist/components/features/emailBuilder/panels/AnchorPanel.vue.d.ts +3 -0
- package/dist/components/features/emailBuilder/panels/ButtonPanel.vue.d.ts +3 -0
- package/dist/components/features/emailBuilder/panels/DividerPanel.vue.d.ts +3 -0
- package/dist/components/features/emailBuilder/panels/HeadingPanel.vue.d.ts +3 -0
- package/dist/components/features/emailBuilder/panels/ImagePanel.vue.d.ts +3 -0
- package/dist/components/features/emailBuilder/panels/ListPanel.vue.d.ts +3 -0
- package/dist/components/features/emailBuilder/panels/MenuPanel.vue.d.ts +3 -0
- package/dist/components/features/emailBuilder/panels/ParagraphPanel.vue.d.ts +3 -0
- package/dist/components/features/emailBuilder/panels/RowColumnPanel.vue.d.ts +13 -0
- package/dist/components/features/emailBuilder/panels/RowPanel.vue.d.ts +13 -0
- package/dist/components/features/emailBuilder/panels/RowSpacerPanel.vue.d.ts +13 -0
- package/dist/components/features/emailBuilder/panels/SocialsPanel.vue.d.ts +3 -0
- package/dist/components/features/emailBuilder/panels/SpacerPanel.vue.d.ts +3 -0
- package/dist/components/features/emailBuilder/panels/VideoPanel.vue.d.ts +3 -0
- package/dist/components/features/emailBuilder/panels/shared/DeviceTabs.vue.d.ts +19 -0
- package/dist/components/features/emailBuilder/panels/shared/LinkFieldMergeTags.vue.d.ts +31 -0
- package/dist/components/features/emailBuilder/panels/shared/OverrideBadge.vue.d.ts +9 -0
- package/dist/components/features/emailBuilder/panels/shared/PreviewBadge.vue.d.ts +11 -0
- package/dist/components/features/emailBuilder/panels/shared/TextFieldMergeTags.vue.d.ts +25 -0
- package/dist/components/features/emailBuilder/panels/ui/BoxStylingSection.vue.d.ts +7 -0
- package/dist/components/features/emailBuilder/panels/ui/PropertyAlignment.vue.d.ts +30 -0
- package/dist/components/features/emailBuilder/panels/ui/PropertyColor.vue.d.ts +75 -0
- package/dist/components/features/emailBuilder/panels/ui/PropertyGradientColor.vue.d.ts +27 -0
- package/dist/components/features/emailBuilder/panels/ui/PropertyNumberSlider.vue.d.ts +74 -0
- package/dist/components/features/emailBuilder/panels/ui/PropertySection.vue.d.ts +17 -0
- package/dist/components/features/emailBuilder/panels/ui/PropertySelect.vue.d.ts +74 -0
- package/dist/components/features/emailBuilder/panels/ui/PropertyTextStyle.vue.d.ts +52 -0
- package/dist/components/features/emailBuilder/panels/ui/PropertyTextStylePanel.vue.d.ts +72 -0
- package/dist/components/features/emailBuilder/panels/ui/PropertyToggle.vue.d.ts +45 -0
- package/dist/components/features/emailBuilder/panels/ui/PropertyVisibility.vue.d.ts +32 -0
- package/dist/components/features/emailBuilder/panels/ui/SpacingControl.vue.d.ts +19 -0
- package/dist/components/features/emailBuilder/panels/ui/color-picker/AlphaSlider.vue.d.ts +28 -0
- package/dist/components/features/emailBuilder/panels/ui/color-picker/ColorPickerPanel.vue.d.ts +31 -0
- package/dist/components/features/emailBuilder/panels/ui/color-picker/HueSlider.vue.d.ts +19 -0
- package/dist/components/features/emailBuilder/panels/ui/color-picker/RecentColors.vue.d.ts +20 -0
- package/dist/components/features/emailBuilder/panels/ui/color-picker/SVPanel.vue.d.ts +39 -0
- package/dist/components/features/emailBuilder/panels/ui/visibility-rule/Rule.vue.d.ts +28 -0
- package/dist/components/features/emailBuilder/preview/PreviewScreen.vue.d.ts +7 -0
- package/dist/components/features/emailBuilder/preview/ui/PreviewCanvas.vue.d.ts +10 -0
- package/dist/components/features/emailBuilder/preview/ui/PreviewCapabilityBadges.vue.d.ts +12 -0
- package/dist/components/features/emailBuilder/preview/ui/PreviewClientCard.vue.d.ts +20 -0
- package/dist/components/features/emailBuilder/preview/ui/PreviewClientList.vue.d.ts +21 -0
- package/dist/components/features/emailBuilder/preview/ui/PreviewClientPicker.vue.d.ts +16 -0
- package/dist/components/features/emailBuilder/preview/ui/PreviewComponent.vue.d.ts +10 -0
- package/dist/components/features/emailBuilder/preview/ui/PreviewDetailView.vue.d.ts +41 -0
- package/dist/components/features/emailBuilder/preview/ui/PreviewRendered.vue.d.ts +8 -0
- package/dist/components/features/emailBuilder/product/RowPreview.vue.d.ts +8 -0
- package/dist/components/features/emailBuilder/product/RowPreviewChildren.vue.d.ts +14 -0
- package/dist/components/features/emailBuilder/product/RowPreviewLegacyComponent.vue.d.ts +14 -0
- package/dist/components/features/emailBuilder/product/RowPreviewRow.vue.d.ts +9 -0
- package/dist/components/features/emailBuilder/product/SavedRowsPanel.vue.d.ts +3 -0
- package/dist/components/features/emailBuilder/product/SavedTemplatesPanel.vue.d.ts +13 -0
- package/dist/components/features/emailBuilder/product/VersionHistoryPanel.vue.d.ts +14 -0
- package/dist/components/features/emailBuilder/sidebar/SidebarBlockButton.vue.d.ts +35 -0
- package/dist/components/features/emailBuilder/tabs/GeneralTab.vue.d.ts +3 -0
- package/dist/components/features/emailBuilder/tabs/LayoutTab.vue.d.ts +3 -0
- package/dist/components/features/emailBuilder/tabs/content/ContentTab.vue.d.ts +3 -0
- package/dist/components/features/emailBuilder/tabs/content/LayersPanel.vue.d.ts +7 -0
- package/dist/components/features/emailBuilder/tabs/general/MergeTagsTab.vue.d.ts +3 -0
- package/dist/components/features/emailBuilder/tabs/general/StylesTab.vue.d.ts +3 -0
- package/dist/components/features/emailBuilder/tabs/general/VisibilityTab.vue.d.ts +3 -0
- package/dist/components/features/emailBuilder/tabs/general/VisibilityWrapESPTab.vue.d.ts +3 -0
- package/dist/components/features/emailBuilder/tabs/general/merge-tags/LinkTagTab.vue.d.ts +3 -0
- package/dist/components/features/emailBuilder/tabs/general/merge-tags/MergeTagTab.vue.d.ts +3 -0
- package/dist/components/features/emailBuilder/ui/LinkInputDialog.vue.d.ts +17 -0
- package/dist/components/features/emailBuilder/ui/canvas/CanvasRowDropZone.vue.d.ts +12 -0
- package/dist/components/features/emailBuilder/ui/canvas/DropZone.vue.d.ts +10 -0
- package/dist/components/features/emailBuilder/ui/canvas/Loader.vue.d.ts +19 -0
- package/dist/components/features/emailBuilder/ui/layers-panel/ComponentIcon.vue.d.ts +7 -0
- package/dist/components/features/emailBuilder/ui/layers-panel/LayerColumnChildren.vue.d.ts +42 -0
- package/dist/components/features/emailBuilder/ui/layers-panel/LayerDropLine.vue.d.ts +8 -0
- package/dist/components/features/emailBuilder/ui/renderers/AnchorRenderer.vue.d.ts +10 -0
- package/dist/components/features/emailBuilder/ui/renderers/DividerRenderer.vue.d.ts +10 -0
- package/dist/components/features/emailBuilder/ui/renderers/HeadingRenderer.vue.d.ts +10 -0
- package/dist/components/features/emailBuilder/ui/renderers/ImageRenderer.vue.d.ts +10 -0
- package/dist/components/features/emailBuilder/ui/renderers/ListRenderer.vue.d.ts +10 -0
- package/dist/components/features/emailBuilder/ui/renderers/MenuRenderer.vue.d.ts +10 -0
- package/dist/components/features/emailBuilder/ui/renderers/ParagraphRenderer.vue.d.ts +10 -0
- package/dist/components/features/emailBuilder/ui/renderers/SocialsRenderer.vue.d.ts +10 -0
- package/dist/components/features/emailBuilder/ui/renderers/SpacerRenderer.vue.d.ts +10 -0
- package/dist/components/features/emailBuilder/ui/renderers/VideoRenderer.vue.d.ts +10 -0
- package/dist/components/features/emailBuilder/ui/rich-text-editor/RichTextEditor.vue.d.ts +12 -0
- package/dist/components/features/emailBuilder/ui/rich-text-editor/pickers/MergeTagPicker.vue.d.ts +18 -0
- package/dist/components/features/emailBuilder/ui/rich-text-editor/pickers/RichTextColorPicker.vue.d.ts +15 -0
- package/dist/components/features/emailBuilder/ui/visibility/SupportBadge.vue.d.ts +10 -0
- package/dist/components/features/emailBuilder/ui/visibility/VisibilityPopover.vue.d.ts +45 -0
- package/dist/components/ui/ConfirmDialog.vue.d.ts +3 -0
- package/dist/components/ui/Icon.vue.d.ts +33 -0
- package/dist/components/ui/InfoDialog.vue.d.ts +12 -0
- package/dist/components/ui/Loading.vue.d.ts +6 -0
- package/dist/components/ui/ShadowSafeToast.vue.d.ts +3 -0
- package/dist/components/ui/primitives/Button.vue.d.ts +23 -0
- package/dist/components/ui/primitives/DatePicker.vue.d.ts +16 -0
- package/dist/components/ui/primitives/Dialog.vue.d.ts +34 -0
- package/dist/components/ui/primitives/InputText.vue.d.ts +29 -0
- package/dist/components/ui/primitives/Message.vue.d.ts +20 -0
- package/dist/components/ui/primitives/Select.vue.d.ts +22 -0
- package/dist/composables/emailBuilder/components/useSystemRows.d.ts +22 -0
- package/dist/composables/emailBuilder/core/ui/useLayerHoverScroll.d.ts +10 -10
- package/dist/composables/emailBuilder/core/useEmailBuilder.d.ts +18 -0
- package/dist/composables/emailBuilder/export/logic/espLogicWrapper.d.ts +4 -4
- package/dist/composables/emailBuilder/export/targets/templateSnapshot.d.ts +24 -0
- package/dist/composables/emailBuilder/persistence/useEmailBuilderPersistence.d.ts +1 -1
- package/dist/composables/system/useColorScheme.d.ts +16 -0
- package/dist/editor.css +1072 -682
- package/dist/element-C2ZH0Z_i.js +86561 -0
- package/dist/element-scoped-styles.css +1072 -682
- package/dist/element.d.ts +1 -1
- package/dist/element.js +5 -2
- package/dist/estree-DBJlF9un.js +4876 -0
- package/dist/html-3PMDtB0V.js +3123 -0
- package/dist/index-DhFg3uKs.js +75864 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.js +16 -67053
- package/dist/init.d.ts +95 -2
- package/dist/init.js +166 -122
- package/dist/standalone-DKWMQftY.js +2391 -0
- package/dist/theme.d.ts +68 -17
- package/dist/types/assistant.d.ts +56 -0
- package/dist/typescript-l6-4tT8s.js +13240 -0
- package/package.json +6 -3
- package/dist/RowPreviewLegacyComponent-CXsY4P-R.js +0 -439
- package/dist/RowPreviewLegacyComponent-yjHSkZLz.js +0 -439
- package/dist/RowPreviewRow-CBfAnQ6o.js +0 -107
- package/dist/RowPreviewRow-CeowK6Q_.js +0 -107
- package/dist/composables/emailBuilder/transform/pipeline/optimizeAI.d.ts +0 -125
- package/dist/element-CMhqxYnE.js +0 -67099
- package/dist/estree-B67dfAo1.js +0 -7989
- package/dist/html-DGrfikay.js +0 -7353
- package/dist/standalone-Bd2oQFm3.js +0 -3639
- package/dist/typescript-C_Ru9PRN.js +0 -23184
- package/dist/vue.runtime.esm-bundler-CfYyFhW6.js +0 -9097
package/dist/init.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { PartialStorageAdapter } from './adapters/types';
|
|
2
|
+
import { AssistantMount } from './types/assistant';
|
|
2
3
|
import { ThemeOptions } from './theme';
|
|
3
4
|
/**
|
|
4
5
|
* The ergonomic, no-Vue-knowledge entry point. element.ts already provides
|
|
@@ -22,6 +23,67 @@ export interface InitOptions {
|
|
|
22
23
|
subject: string;
|
|
23
24
|
html: string;
|
|
24
25
|
}) => Promise<void> | void;
|
|
26
|
+
/**
|
|
27
|
+
* Name shown in the desktop-only notice's "Powered by" line. Omit for the
|
|
28
|
+
* package default; pass an empty string to drop the line entirely.
|
|
29
|
+
*
|
|
30
|
+
* Unlike storageAdapter/theme/onSendTestEmail this is a plain string, so
|
|
31
|
+
* the custom element accepts it as a `brand-name` attribute too —
|
|
32
|
+
* `<maildeno-editor brand-name="Acme">` works without any JavaScript.
|
|
33
|
+
* init() still sets it as a property below, for consistency with the
|
|
34
|
+
* other options rather than out of necessity.
|
|
35
|
+
*/
|
|
36
|
+
brandName?: string;
|
|
37
|
+
/**
|
|
38
|
+
* Replaces the saved-templates panel and its header button with version
|
|
39
|
+
* history. Requires an adapter implementing the version methods — see
|
|
40
|
+
* EditorStorageAdapter; the built-in localStorage adapter implements all
|
|
41
|
+
* of them, so this works with no backend.
|
|
42
|
+
*
|
|
43
|
+
* A boolean, so the custom element accepts it as a `versions` attribute
|
|
44
|
+
* too — attribute presence is truthy, matching how HTML booleans work.
|
|
45
|
+
*/
|
|
46
|
+
versions?: boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Called after a successful save. Its presence is what reveals the Save
|
|
49
|
+
* button — omit it for a read-only or guest editor and the button, the
|
|
50
|
+
* save-status indicator and the autosave timer all disappear.
|
|
51
|
+
*
|
|
52
|
+
* The "save" event still fires alongside, so handle.on("save", …) keeps
|
|
53
|
+
* working; this option exists because a listener attached after mount
|
|
54
|
+
* can't retroactively decide whether the button should have rendered.
|
|
55
|
+
*/
|
|
56
|
+
onSave?: (payload: {
|
|
57
|
+
templateId: string | null;
|
|
58
|
+
}) => void;
|
|
59
|
+
/**
|
|
60
|
+
* Fills the editor's assistant drawer with your own UI.
|
|
61
|
+
*
|
|
62
|
+
* The editor supplies the drawer, its trigger button, open/close state,
|
|
63
|
+
* escape handling and shadow-DOM-safe positioning; `mount` receives the
|
|
64
|
+
* drawer's body element plus a small canvas API (getJson/setJson/
|
|
65
|
+
* getSelection/setSelection/onChange) and renders whatever it likes into
|
|
66
|
+
* it — React root, plain DOM, anything.
|
|
67
|
+
*
|
|
68
|
+
* Called on first open rather than at startup, and `unmount` on close, so
|
|
69
|
+
* a drawer the user never opens costs nothing.
|
|
70
|
+
*
|
|
71
|
+
* ```ts
|
|
72
|
+
* init({
|
|
73
|
+
* container: "#editor",
|
|
74
|
+
* assistant: {
|
|
75
|
+
* mount(el, editor) {
|
|
76
|
+
* el.innerHTML = "<button>Rewrite</button>";
|
|
77
|
+
* el.querySelector("button").onclick = async () => {
|
|
78
|
+
* const next = await myApi.rewrite(editor.getJson());
|
|
79
|
+
* editor.setJson(next);
|
|
80
|
+
* };
|
|
81
|
+
* },
|
|
82
|
+
* },
|
|
83
|
+
* });
|
|
84
|
+
* ```
|
|
85
|
+
*/
|
|
86
|
+
assistant?: AssistantMount;
|
|
25
87
|
/**
|
|
26
88
|
* Render inside a shadow root (default) or directly in the page.
|
|
27
89
|
*
|
|
@@ -46,6 +108,14 @@ export interface EditorHandle {
|
|
|
46
108
|
/** Vue's defineCustomElement dispatches emits as real DOM CustomEvents
|
|
47
109
|
* on the host element, with the emit payload in event.detail — this is
|
|
48
110
|
* just addEventListener with that unwrapping done for you. */
|
|
111
|
+
/**
|
|
112
|
+
* Additional listeners for the save event.
|
|
113
|
+
*
|
|
114
|
+
* Only ever fires when `onSave` was passed to init(): without it the editor
|
|
115
|
+
* has no Save button and never saves, so there is no event to hear. If you
|
|
116
|
+
* only want to observe saves, pass a no-op `onSave` to enable saving and do
|
|
117
|
+
* the work here.
|
|
118
|
+
*/
|
|
49
119
|
on(event: "save", handler: (payload: {
|
|
50
120
|
templateId: string | null;
|
|
51
121
|
}) => void): void;
|
|
@@ -69,14 +139,37 @@ export interface EditorHandle {
|
|
|
69
139
|
getMjml(mode?: "prune" | "wrap"): string | null;
|
|
70
140
|
getReactEmail(mode?: "prune" | "wrap"): string | null;
|
|
71
141
|
getJson(): Record<string, unknown> | null;
|
|
142
|
+
/** The write side of getJson(). Accepts what getJson() returns, so
|
|
143
|
+
* setJson(getJson()) round-trips, plus the { canvas, content: { rows } }
|
|
144
|
+
* shape version APIs typically hand back.
|
|
145
|
+
*
|
|
146
|
+
* history defaults to "undoable" — one Ctrl+Z-able step, right for
|
|
147
|
+
* anything the user triggered. Pass "reset" when swapping which document
|
|
148
|
+
* is open, where undoing back into the previous document would be wrong. */
|
|
149
|
+
setJson(data: unknown, opts?: {
|
|
150
|
+
history?: "undoable" | "reset";
|
|
151
|
+
}): void;
|
|
152
|
+
/** The selected node, or null. `type` is the block type, so a host can
|
|
153
|
+
* branch on it without resolving the id against the tree itself. */
|
|
154
|
+
getSelection(): {
|
|
155
|
+
id: string;
|
|
156
|
+
type: string | null;
|
|
157
|
+
} | null;
|
|
158
|
+
/** Selects by id, or clears with null. Returns false if no node has that
|
|
159
|
+
* id. Does not touch history — selection is view state. */
|
|
160
|
+
setSelection(id: string | null): boolean;
|
|
161
|
+
/** Fires after each committed change. Returns an unsubscribe function.
|
|
162
|
+
* Keyed to history commits rather than raw mutations, so typing inside a
|
|
163
|
+
* text block produces one call, not one per keystroke. */
|
|
164
|
+
onChange(cb: () => void): () => void;
|
|
72
165
|
/** Removes the element from the DOM. Vue's custom element wrapper
|
|
73
166
|
* handles unmounting the internal app and cleaning up watchers/effects
|
|
74
167
|
* as part of its own disconnectedCallback — not reimplemented here. */
|
|
75
168
|
destroy(): void;
|
|
76
169
|
}
|
|
77
170
|
export declare function init(options: InitOptions): Promise<EditorHandle>;
|
|
78
|
-
export { registerBlock, getBlock, getAllBlocks
|
|
79
|
-
export { registerESPSyntax, getRegisteredCustomESPs
|
|
171
|
+
export { registerBlock, getBlock, getAllBlocks } from './blocks/registry';
|
|
172
|
+
export { registerESPSyntax, getRegisteredCustomESPs } from './esp/registry';
|
|
80
173
|
export { registerMergeTags, getRegisteredMergeTagIds, } from './merge-tags/registry';
|
|
81
174
|
export { setEditorTheme, palette } from './theme';
|
|
82
175
|
export { createLocalStorageAdapter } from './adapters/localStorageAdapter';
|
package/dist/init.js
CHANGED
|
@@ -1,130 +1,174 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
var stylesInjected = false;
|
|
5
|
-
/**
|
|
6
|
-
* The shadow path hands these strings to defineCustomElement, which turns
|
|
7
|
-
* them into <style> tags inside the shadow root. Here they go to
|
|
8
|
-
* document.head instead — same content, different destination. Guarded so
|
|
9
|
-
* multiple editors on one page inject once.
|
|
10
|
-
*/
|
|
1
|
+
import { r as reactive, c as createApp, b as buildShadowStyles, h, _ as _sfc_main, a as ref, d as registerMaildenoEditorElement } from "./element-C2ZH0Z_i.js";
|
|
2
|
+
import { e, g, f, i, j, p, k, l, m, s } from "./element-C2ZH0Z_i.js";
|
|
3
|
+
let stylesInjected = false;
|
|
11
4
|
function injectStylesIntoHead() {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
5
|
+
if (stylesInjected || typeof document === "undefined") return;
|
|
6
|
+
stylesInjected = true;
|
|
7
|
+
for (const css of buildShadowStyles()) {
|
|
8
|
+
if (!css) continue;
|
|
9
|
+
const style = document.createElement("style");
|
|
10
|
+
style.setAttribute("data-maildeno-light-dom", "");
|
|
11
|
+
style.textContent = css;
|
|
12
|
+
document.head.appendChild(style);
|
|
13
|
+
}
|
|
21
14
|
}
|
|
22
15
|
function mountLightDom(container, initialProps) {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
16
|
+
injectStylesIntoHead();
|
|
17
|
+
const props = reactive({ ...initialProps });
|
|
18
|
+
const saveHandlers = /* @__PURE__ */ new Set();
|
|
19
|
+
const editorRef = ref(null);
|
|
20
|
+
const mountEl = document.createElement("div");
|
|
21
|
+
mountEl.style.height = "100%";
|
|
22
|
+
container.appendChild(mountEl);
|
|
23
|
+
const app = createApp({
|
|
24
|
+
setup() {
|
|
25
|
+
return () => h(_sfc_main, {
|
|
26
|
+
...props,
|
|
27
|
+
ref: editorRef,
|
|
28
|
+
onSave: (payload) => saveHandlers.forEach((fn) => fn(payload))
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
app.mount(mountEl);
|
|
33
|
+
return {
|
|
34
|
+
element: mountEl,
|
|
35
|
+
exposed: () => editorRef.value ?? null,
|
|
36
|
+
setProp: (key, value) => {
|
|
37
|
+
props[key] = value;
|
|
38
|
+
},
|
|
39
|
+
addSaveHandler: (fn) => saveHandlers.add(fn),
|
|
40
|
+
removeSaveHandler: (fn) => saveHandlers.delete(fn),
|
|
41
|
+
destroy: () => {
|
|
42
|
+
app.unmount();
|
|
43
|
+
mountEl.remove();
|
|
44
|
+
}
|
|
45
|
+
};
|
|
51
46
|
}
|
|
52
|
-
//#endregion
|
|
53
|
-
//#region src/init.ts
|
|
54
47
|
function toDomEventName(event) {
|
|
55
|
-
|
|
48
|
+
return event;
|
|
56
49
|
}
|
|
57
50
|
async function init(options) {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
51
|
+
const container = typeof options.container === "string" ? document.querySelector(options.container) : options.container;
|
|
52
|
+
if (!container) {
|
|
53
|
+
throw new Error(
|
|
54
|
+
`[maildeno-editor] init() couldn't find a container${typeof options.container === "string" ? ` matching "${options.container}"` : ""}.`
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
if (options.shadowDom === false) {
|
|
58
|
+
const mount = mountLightDom(container, {
|
|
59
|
+
templateId: options.templateId,
|
|
60
|
+
storageAdapter: options.storageAdapter,
|
|
61
|
+
theme: options.theme,
|
|
62
|
+
capabilities: options.capabilities,
|
|
63
|
+
onSendTestEmail: options.onSendTestEmail,
|
|
64
|
+
brandName: options.brandName,
|
|
65
|
+
versions: options.versions,
|
|
66
|
+
saveHandler: options.onSave,
|
|
67
|
+
assistant: options.assistant
|
|
68
|
+
});
|
|
69
|
+
await new Promise((resolve) => setTimeout(resolve, 0));
|
|
70
|
+
const call = (name, ...args) => {
|
|
71
|
+
var _a;
|
|
72
|
+
const fn = (_a = mount.exposed()) == null ? void 0 : _a[name];
|
|
73
|
+
return typeof fn === "function" ? fn(...args) : null;
|
|
74
|
+
};
|
|
75
|
+
return {
|
|
76
|
+
element: mount.element,
|
|
77
|
+
on: (_event, handler) => mount.addSaveHandler(handler),
|
|
78
|
+
off: (_event, handler) => mount.removeSaveHandler(handler),
|
|
79
|
+
setTheme: (theme) => mount.setProp("theme", theme),
|
|
80
|
+
getHtml: (mode = "prune") => call("getHtml", mode),
|
|
81
|
+
getMjml: (mode = "prune") => call("getMjml", mode),
|
|
82
|
+
getReactEmail: (mode = "prune") => call("getReactEmail", mode),
|
|
83
|
+
getJson: () => call("getJson"),
|
|
84
|
+
setJson: (data, opts) => {
|
|
85
|
+
call("setJson", data, opts);
|
|
86
|
+
},
|
|
87
|
+
getSelection: () => call("getSelection"),
|
|
88
|
+
setSelection: (id) => call("setSelection", id) ?? false,
|
|
89
|
+
// Falls back to a no-op unsubscribe rather than null so callers can
|
|
90
|
+
// always call the result — a host storing it and invoking it during
|
|
91
|
+
// teardown shouldn't have to null-check a cleanup function.
|
|
92
|
+
onChange: (cb) => call("onChange", cb) ?? (() => {
|
|
93
|
+
}),
|
|
94
|
+
destroy: () => mount.destroy()
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
registerMaildenoEditorElement();
|
|
98
|
+
const el = document.createElement("maildeno-editor");
|
|
99
|
+
if (options.templateId !== void 0) el.templateId = options.templateId;
|
|
100
|
+
if (options.storageAdapter) el.storageAdapter = options.storageAdapter;
|
|
101
|
+
if (options.theme) el.theme = options.theme;
|
|
102
|
+
if (options.capabilities) el.capabilities = options.capabilities;
|
|
103
|
+
if (options.onSendTestEmail) el.onSendTestEmail = options.onSendTestEmail;
|
|
104
|
+
if (options.brandName !== void 0) el.brandName = options.brandName;
|
|
105
|
+
if (options.versions !== void 0) el.versions = options.versions;
|
|
106
|
+
if (options.assistant) el.assistant = options.assistant;
|
|
107
|
+
if (options.onSave) el.saveHandler = options.onSave;
|
|
108
|
+
container.appendChild(el);
|
|
109
|
+
await new Promise((resolve) => setTimeout(resolve, 0));
|
|
110
|
+
const listenerWrappers = /* @__PURE__ */ new WeakMap();
|
|
111
|
+
const handle = {
|
|
112
|
+
element: el,
|
|
113
|
+
on(event, handler) {
|
|
114
|
+
const wrapped = ((e2) => handler(
|
|
115
|
+
Array.isArray(e2.detail) ? e2.detail[0] : e2.detail
|
|
116
|
+
));
|
|
117
|
+
listenerWrappers.set(handler, wrapped);
|
|
118
|
+
el.addEventListener(toDomEventName(event), wrapped);
|
|
119
|
+
},
|
|
120
|
+
off(event, handler) {
|
|
121
|
+
const wrapped = listenerWrappers.get(handler);
|
|
122
|
+
if (wrapped) {
|
|
123
|
+
el.removeEventListener(toDomEventName(event), wrapped);
|
|
124
|
+
listenerWrappers.delete(handler);
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
setTheme(theme) {
|
|
128
|
+
el.theme = theme;
|
|
129
|
+
},
|
|
130
|
+
getHtml(mode = "prune") {
|
|
131
|
+
return el.getHtml ? el.getHtml(mode) : null;
|
|
132
|
+
},
|
|
133
|
+
getMjml(mode = "prune") {
|
|
134
|
+
return el.getMjml ? el.getMjml(mode) : null;
|
|
135
|
+
},
|
|
136
|
+
getReactEmail(mode = "prune") {
|
|
137
|
+
return el.getReactEmail ? el.getReactEmail(mode) : null;
|
|
138
|
+
},
|
|
139
|
+
getJson() {
|
|
140
|
+
return el.getJson ? el.getJson() : null;
|
|
141
|
+
},
|
|
142
|
+
setJson(data, opts) {
|
|
143
|
+
var _a;
|
|
144
|
+
(_a = el.setJson) == null ? void 0 : _a.call(el, data, opts);
|
|
145
|
+
},
|
|
146
|
+
getSelection() {
|
|
147
|
+
return el.getSelection ? el.getSelection() : null;
|
|
148
|
+
},
|
|
149
|
+
setSelection(id) {
|
|
150
|
+
return el.setSelection ? el.setSelection(id) : false;
|
|
151
|
+
},
|
|
152
|
+
onChange(cb) {
|
|
153
|
+
return el.onChange ? el.onChange(cb) : () => {
|
|
154
|
+
};
|
|
155
|
+
},
|
|
156
|
+
destroy() {
|
|
157
|
+
el.remove();
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
return handle;
|
|
128
161
|
}
|
|
129
|
-
|
|
130
|
-
|
|
162
|
+
export {
|
|
163
|
+
e as createLocalStorageAdapter,
|
|
164
|
+
g as getAllBlocks,
|
|
165
|
+
f as getBlock,
|
|
166
|
+
i as getRegisteredCustomESPs,
|
|
167
|
+
j as getRegisteredMergeTagIds,
|
|
168
|
+
init,
|
|
169
|
+
p as palette,
|
|
170
|
+
k as registerBlock,
|
|
171
|
+
l as registerESPSyntax,
|
|
172
|
+
m as registerMergeTags,
|
|
173
|
+
s as setEditorTheme
|
|
174
|
+
};
|