@grapesjs/studio-sdk-plugins 1.0.38-rc.0 → 1.0.39-rc.0
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/dist/accordionComponent/index.cjs.js +5 -5
- package/dist/accordionComponent/index.es.js +70 -67
- package/dist/accordionComponent/index.js +39 -0
- package/dist/accordionComponent/index.umd.js +4 -4
- package/dist/aiChat/components/AiChatHeader.d.ts +4 -5
- package/dist/aiChat/components/AiChatInput/index.d.ts +4 -5
- package/dist/aiChat/components/AiChatMessage.d.ts +7 -8
- package/dist/aiChat/components/index.d.ts +1 -1
- package/dist/aiChat/components/utils.d.ts +1 -1
- package/dist/aiChat/index.cjs.js +10 -376
- package/dist/aiChat/index.es.js +4569 -28851
- package/dist/aiChat/index.js +10 -376
- package/dist/aiChat/index.umd.js +11 -377
- package/dist/aiChat/server/index.cjs.d.ts +0 -1
- package/dist/aiChat/server/index.cjs.js +45 -45
- package/dist/aiChat/server/index.d.ts +0 -1
- package/dist/aiChat/server/index.es.d.ts +0 -1
- package/dist/aiChat/server/index.es.js +371 -427
- package/dist/aiChat/server/index.js +45 -45
- package/dist/aiChat/server/index.umd.js +41 -41
- package/dist/aiChat/server/stream.test.d.ts +1 -0
- package/dist/aiChat/types.d.ts +18 -4
- package/dist/aiChat/typesSchema.d.ts +13 -0
- package/dist/animationComponent/index.cjs.js +3 -3
- package/dist/animationComponent/index.es.js +49 -46
- package/dist/animationComponent/index.js +519 -0
- package/dist/animationComponent/index.umd.js +3 -3
- package/dist/canvasAbsoluteMode/index.cjs.js +1 -1
- package/dist/canvasAbsoluteMode/index.es.js +115 -112
- package/dist/canvasAbsoluteMode/index.js +1 -0
- package/dist/canvasAbsoluteMode/index.umd.js +1 -1
- package/dist/canvasEmptyState/index.cjs.js +1 -1
- package/dist/canvasEmptyState/index.es.js +71 -68
- package/dist/canvasEmptyState/index.js +1 -0
- package/dist/canvasEmptyState/index.umd.js +1 -1
- package/dist/canvasFullSize/index.cjs.js +3 -3
- package/dist/canvasFullSize/index.es.js +69 -66
- package/dist/canvasFullSize/index.js +10 -0
- package/dist/canvasFullSize/index.umd.js +4 -4
- package/dist/canvasGridMode/index.cjs.js +7 -7
- package/dist/canvasGridMode/index.es.js +142 -139
- package/dist/canvasGridMode/index.js +26 -0
- package/dist/canvasGridMode/index.umd.js +7 -7
- package/dist/canvasScreenshot/index.cjs.js +1 -1
- package/dist/canvasScreenshot/index.es.js +78 -75
- package/dist/canvasScreenshot/index.js +1 -0
- package/dist/canvasScreenshot/index.umd.js +1 -1
- package/dist/dataSourceEjs/EjsExporter.d.ts +1 -1
- package/dist/dataSourceEjs/index.cjs.js +3 -3
- package/dist/dataSourceEjs/index.es.js +40 -37
- package/dist/dataSourceEjs/index.js +21 -0
- package/dist/dataSourceEjs/index.umd.js +3 -3
- package/dist/dataSourceHandlebars/HandlebarsExporter.d.ts +2 -2
- package/dist/dataSourceHandlebars/constants.d.ts +1 -1
- package/dist/dataSourceHandlebars/index.cjs.js +4 -4
- package/dist/dataSourceHandlebars/index.es.js +58 -55
- package/dist/dataSourceHandlebars/index.js +10 -0
- package/dist/dataSourceHandlebars/index.umd.js +2 -2
- package/dist/dialogComponent/index.cjs.js +11 -11
- package/dist/dialogComponent/index.es.js +72 -69
- package/dist/dialogComponent/index.js +59 -0
- package/dist/dialogComponent/index.umd.js +11 -11
- package/dist/flexComponent/index.cjs.js +6 -6
- package/dist/flexComponent/index.es.js +151 -142
- package/dist/flexComponent/index.js +33 -0
- package/dist/flexComponent/index.umd.js +8 -8
- package/dist/flexComponent/typesSchema.d.ts +1 -1
- package/dist/fsLightboxComponent/index.cjs.js +3 -3
- package/dist/fsLightboxComponent/index.es.js +93 -90
- package/dist/fsLightboxComponent/index.js +6 -0
- package/dist/fsLightboxComponent/index.umd.js +3 -3
- package/dist/googleFontsAssetProvider/index.cjs.js +1 -1
- package/dist/googleFontsAssetProvider/index.es.js +112 -109
- package/dist/googleFontsAssetProvider/index.js +1 -0
- package/dist/googleFontsAssetProvider/index.umd.js +1 -1
- package/dist/googleFontsAssetProvider/utils.d.ts +1 -1
- package/dist/iconifyComponent/index.cjs.js +2 -2
- package/dist/iconifyComponent/index.es.js +80 -77
- package/dist/iconifyComponent/index.js +3 -0
- package/dist/iconifyComponent/index.umd.js +2 -2
- package/dist/index.cjs.d.ts +1 -0
- package/dist/index.cjs.js +970 -82
- package/dist/index.d.ts +1 -0
- package/dist/index.es.d.ts +1 -0
- package/dist/index.es.js +7422 -6145
- package/dist/index.umd.js +975 -87
- package/dist/layoutSidebarButtons/index.cjs.js +1 -1
- package/dist/layoutSidebarButtons/index.es.js +95 -92
- package/dist/layoutSidebarButtons/index.js +1 -0
- package/dist/layoutSidebarButtons/index.umd.js +1 -1
- package/dist/lightGalleryComponent/index.cjs.js +1 -1
- package/dist/lightGalleryComponent/index.es.js +164 -161
- package/dist/lightGalleryComponent/index.js +1 -0
- package/dist/lightGalleryComponent/index.umd.js +1 -1
- package/dist/lightGalleryComponent/utils.d.ts +1 -1
- package/dist/linkImageComponent/index.cjs.js +2 -2
- package/dist/linkImageComponent/index.es.js +60 -57
- package/dist/linkImageComponent/index.js +12 -0
- package/dist/linkImageComponent/index.umd.js +2 -2
- package/dist/listPagesComponent/index.cjs.js +4 -4
- package/dist/listPagesComponent/index.es.js +57 -54
- package/dist/listPagesComponent/index.js +11 -0
- package/dist/listPagesComponent/index.umd.js +4 -4
- package/dist/listPagesComponent/utils.d.ts +1 -1
- package/dist/presetBlockLibrary/blocks.d.ts +6 -0
- package/dist/presetBlockLibrary/blocks.test.d.ts +2 -0
- package/dist/presetBlockLibrary/emailBlocks.d.ts +53 -0
- package/dist/presetBlockLibrary/index.cjs.d.ts +3 -0
- package/dist/presetBlockLibrary/index.cjs.js +889 -0
- package/dist/presetBlockLibrary/index.d.ts +3 -0
- package/dist/presetBlockLibrary/index.es.d.ts +3 -0
- package/dist/presetBlockLibrary/index.es.js +1408 -0
- package/dist/presetBlockLibrary/index.js +889 -0
- package/dist/presetBlockLibrary/index.test.d.ts +1 -0
- package/dist/presetBlockLibrary/index.umd.js +889 -0
- package/dist/presetBlockLibrary/shared.d.ts +3 -0
- package/dist/presetBlockLibrary/types.d.ts +24 -0
- package/dist/presetBlockLibrary/typesSchema.d.ts +47 -0
- package/dist/presetPrintable/index.cjs.js +3 -3
- package/dist/presetPrintable/index.es.js +133 -130
- package/dist/presetPrintable/index.js +32 -0
- package/dist/presetPrintable/index.umd.js +4 -4
- package/dist/prosemirror/index.cjs.js +8 -8
- package/dist/prosemirror/index.es.js +552 -549
- package/dist/prosemirror/index.js +10 -0
- package/dist/prosemirror/index.umd.js +9 -9
- package/dist/prosemirror/toolbar.d.ts +2 -2
- package/dist/prosemirror/types.d.ts +5 -5
- package/dist/rendererReact/index.cjs.js +1 -1
- package/dist/rendererReact/index.es.js +137 -134
- package/dist/rendererReact/index.js +1 -1
- package/dist/rendererReact/index.umd.js +1 -1
- package/dist/rteTinyMce/index.cjs.js +2 -2
- package/dist/rteTinyMce/index.es.js +74 -71
- package/dist/rteTinyMce/index.js +104 -0
- package/dist/rteTinyMce/index.umd.js +2 -2
- package/dist/shapeDividerComponent/index.cjs.js +4 -4
- package/dist/shapeDividerComponent/index.es.js +91 -88
- package/dist/shapeDividerComponent/index.js +97 -0
- package/dist/shapeDividerComponent/index.umd.js +4 -4
- package/dist/swiperComponent/index.cjs.js +7 -7
- package/dist/swiperComponent/index.es.js +95 -92
- package/dist/swiperComponent/index.js +45 -0
- package/dist/swiperComponent/index.umd.js +5 -5
- package/dist/tableComponent/index.cjs.js +1 -1
- package/dist/tableComponent/index.es.js +181 -178
- package/dist/tableComponent/index.js +1 -0
- package/dist/tableComponent/index.umd.js +1 -1
- package/dist/tableComponent/types.d.ts +3 -3
- package/dist/types.d.ts +14 -14
- package/dist/utils.d.ts +3 -2
- package/dist/utilsDataSources.d.ts +1 -1
- package/dist/youtubeAssetProvider/index.cjs.js +1 -1
- package/dist/youtubeAssetProvider/index.es.js +90 -87
- package/dist/youtubeAssetProvider/index.js +1 -0
- package/dist/youtubeAssetProvider/index.umd.js +1 -1
- package/package.json +182 -34
- package/dist/aiChat/server/models.d.ts +0 -15
|
@@ -0,0 +1,1408 @@
|
|
|
1
|
+
var L = /* @__PURE__ */ ((e) => (e.globalStyles = "globalStyles", e.globalData = "globalData", e))(L || {});
|
|
2
|
+
const R = "app.grapesjs.com", O = "app-stage.grapesjs.com", Y = "app2.grapesjs.com", U = "app-stage2.grapesjs.com", T = [
|
|
3
|
+
R,
|
|
4
|
+
Y,
|
|
5
|
+
O,
|
|
6
|
+
U,
|
|
7
|
+
"localhost",
|
|
8
|
+
"127.0.0.1",
|
|
9
|
+
".local-credentialless.webcontainer.io",
|
|
10
|
+
// For stackblitz.com demos
|
|
11
|
+
".local.webcontainer.io",
|
|
12
|
+
// For stackblitz.com demos
|
|
13
|
+
"-sandpack.codesandbox.io",
|
|
14
|
+
// For Sandpack demos
|
|
15
|
+
".claudemcpcontent.com",
|
|
16
|
+
// For Claude mcp app
|
|
17
|
+
".web-sandbox.oaiusercontent.com"
|
|
18
|
+
// For OpenAI mcp app
|
|
19
|
+
], _ = "license:check:end", J = () => typeof window < "u", K = ({
|
|
20
|
+
isDev: e,
|
|
21
|
+
isStage: i,
|
|
22
|
+
isPlatform: o
|
|
23
|
+
}) => `${e ? "" : `https://${i ? O : R}`}/${o ? "platform-api" : "api"}`, X = (e = {}) => {
|
|
24
|
+
const { width: i = 300, height: o, text: r = "IMAGE", bg: a = "777", fg: s = "white" } = e, d = o ? `x${o}` : "";
|
|
25
|
+
return `https://placehold.co/${i}${d}/${a}/${s}.png?text=${r}`;
|
|
26
|
+
}, Z = () => {
|
|
27
|
+
if (!J()) return "";
|
|
28
|
+
const { hostname: e } = window.location;
|
|
29
|
+
if (e) return e;
|
|
30
|
+
try {
|
|
31
|
+
return window.parent.location.hostname || "";
|
|
32
|
+
} catch {
|
|
33
|
+
return "";
|
|
34
|
+
}
|
|
35
|
+
}, Q = () => {
|
|
36
|
+
const e = Z();
|
|
37
|
+
return !!e && (T.includes(e) || T.some((i) => e.endsWith(i)));
|
|
38
|
+
};
|
|
39
|
+
function w(e) {
|
|
40
|
+
return typeof e == "function";
|
|
41
|
+
}
|
|
42
|
+
const W = (e) => !!e.Components.getType("mjml");
|
|
43
|
+
async function tt({
|
|
44
|
+
path: e,
|
|
45
|
+
baseApiUrl: i,
|
|
46
|
+
method: o = "GET",
|
|
47
|
+
headers: r = {},
|
|
48
|
+
params: a,
|
|
49
|
+
body: s
|
|
50
|
+
}) {
|
|
51
|
+
const l = `${i || K({ isDev: !1, isStage: !1 })}${e}`, c = {
|
|
52
|
+
method: o,
|
|
53
|
+
headers: {
|
|
54
|
+
"Content-Type": "application/json",
|
|
55
|
+
...r
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
s && (c.body = JSON.stringify(s));
|
|
59
|
+
const m = a ? new URLSearchParams(a).toString() : "", g = m ? `?${m}` : "", p = await fetch(`${l}${g}`, c);
|
|
60
|
+
if (!p.ok)
|
|
61
|
+
throw new Error(`HTTP error! status: ${p.status}`);
|
|
62
|
+
return p.json();
|
|
63
|
+
}
|
|
64
|
+
var f = /* @__PURE__ */ ((e) => (e.free = "free", e.startup = "startup", e.business = "business", e.enterprise = "enterprise", e))(f || {}), h = /* @__PURE__ */ ((e) => (e.toastAdd = "studio:toastAdd", e.toastRemove = "studio:toastRemove", e.dialogOpen = "studio:dialogOpen", e.dialogClose = "studio:dialogClose", e.dialogExportCode = "studio:dialogExportCode", e.dialogImportCode = "studio:dialogImportCode", e.openEditCode = "studio:openEditCode", e.openBlocks = "studio:openBlocks", e.appendComponent = "studio:appendComponent", e.sidebarLeftSet = "studio:sidebarLeft:set", e.sidebarLeftGet = "studio:sidebarLeft:get", e.sidebarLeftToggle = "studio:sidebarLeft:toggle", e.sidebarRightSet = "studio:sidebarRight:set", e.sidebarRightGet = "studio:sidebarRight:get", e.sidebarRightToggle = "studio:sidebarRight:toggle", e.sidebarTopSet = "studio:sidebarTop:set", e.sidebarTopGet = "studio:sidebarTop:get", e.sidebarTopToggle = "studio:sidebarTop:toggle", e.sidebarBottomSet = "studio:sidebarBottom:set", e.sidebarBottomGet = "studio:sidebarBottom:get", e.sidebarBottomToggle = "studio:sidebarBottom:toggle", e.symbolAdd = "studio:symbolAdd", e.symbolDetach = "studio:symbolDetach", e.symbolOverride = "studio:symbolOverride", e.symbolPropagateStyles = "studio:propagateStyles", e.getPagesConfig = "studio:getPagesConfig", e.setPagesConfig = "studio:setPagesConfig", e.getPageSettings = "studio:getPageSettings", e.setPageSettings = "studio:setPageSettings", e.clearPage = "studio:clearPage", e.projectFiles = "studio:projectFiles", e.validateCode = "studio:validateCode", e.canvasReload = "studio:canvasReload", e.getBlocksPanel = "studio:getBlocksPanel", e.setBlocksPanel = "studio:setBlocksPanel", e.getStateContextMenu = "studio:getStateContextMenu", e.setStateContextMenu = "studio:setStateContextMenu", e.contextMenuComponent = "studio:contextMenuComponent", e.layoutAdd = "studio:layoutAdd", e.layoutRemove = "studio:layoutRemove", e.layoutToggle = "studio:layoutToggle", e.layoutUpdate = "studio:layoutUpdate", e.layoutGet = "studio:layoutGet", e.layoutConfigGet = "studio:layoutConfigGet", e.layoutConfigSet = "studio:layoutConfigSet", e.layoutComponentAdd = "studio:layoutComponentAdd", e.layoutComponentGet = "studio:layoutComponentGet", e.layoutComponentRemove = "studio:layoutComponentRemove", e.layoutComponentRender = "studio:layoutComponentRender", e.getStateTheme = "studio:getStateTheme", e.setStateTheme = "studio:setStateTheme", e.settings = "studio:settings", e.assetProviderGet = "studio:assetProviderGet", e.assetProviderAdd = "studio:assetProviderAdd", e.assetProviderRemove = "studio:assetProviderRemove", e.fontGet = "studio:fontGet", e.fontAdd = "studio:fontAdd", e.fontRemove = "studio:fontRemove", e.fontManagerOpen = "studio:fontManagerOpen", e.menuFontLoad = "studio:menuFontLoad", e.toggleStateDataSource = "studio:toggleStateDataSource", e.getStateDataSource = "studio:getStateDataSource", e.dataSourceSetGlobalData = "studio:dataSourceSetGlobalData", e.dataSourceSetImporter = "studio:dataSourceSetImporter", e.dataSourceSetExporter = "studio:dataSourceSetExporter", e.setDragAbsolute = "studio:setDragAbsolute", e))(h || {});
|
|
65
|
+
const A = {
|
|
66
|
+
[f.free]: 0,
|
|
67
|
+
[f.startup]: 10,
|
|
68
|
+
[f.business]: 20,
|
|
69
|
+
[f.enterprise]: 30
|
|
70
|
+
};
|
|
71
|
+
function et(e, i) {
|
|
72
|
+
const o = e;
|
|
73
|
+
return o.init = (r) => {
|
|
74
|
+
const a = (s) => e(s, r);
|
|
75
|
+
return a.__gjsPluginId = i, a;
|
|
76
|
+
}, o;
|
|
77
|
+
}
|
|
78
|
+
const ot = (e, i) => /* @__PURE__ */ et(e, i);
|
|
79
|
+
async function it({
|
|
80
|
+
editor: e,
|
|
81
|
+
plan: i,
|
|
82
|
+
pluginName: o,
|
|
83
|
+
licenseKey: r,
|
|
84
|
+
onLicenseCheckResponse: a,
|
|
85
|
+
cleanup: s
|
|
86
|
+
}) {
|
|
87
|
+
let d = "", l;
|
|
88
|
+
const c = (p) => {
|
|
89
|
+
console.warn("Cleanup plugin:", o, "Reason:", p), s(e, o);
|
|
90
|
+
}, m = (p = {}) => {
|
|
91
|
+
var k;
|
|
92
|
+
const { error: j, sdkLicense: V } = p, b = (k = p.plan) == null ? void 0 : k.category;
|
|
93
|
+
if (!(V || p.license) || j)
|
|
94
|
+
c(j || "Invalid license");
|
|
95
|
+
else if (b) {
|
|
96
|
+
const F = A[i], N = A[b];
|
|
97
|
+
F > N && c({ pluginRequiredPlan: i, licensePlan: b });
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
e.Commands.has(h.settings) && (l = e.runCommand(h.settings), d = (l == null ? void 0 : l.baseUrl) || "");
|
|
101
|
+
const g = (p) => {
|
|
102
|
+
a == null || a(p), p && m(p);
|
|
103
|
+
};
|
|
104
|
+
if (!l) {
|
|
105
|
+
e.onReady(async () => {
|
|
106
|
+
if (!Q())
|
|
107
|
+
if (r) {
|
|
108
|
+
const p = await at({ licenseKey: r, pluginName: o, baseApiUrl: d });
|
|
109
|
+
g(p);
|
|
110
|
+
} else
|
|
111
|
+
c("The `licenseKey` option not provided");
|
|
112
|
+
});
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
if (l.licensePlan || l.licenseError) {
|
|
116
|
+
const p = nt(l);
|
|
117
|
+
g(p);
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
e.on(_, (p) => g(p));
|
|
121
|
+
}
|
|
122
|
+
const nt = (e) => ({
|
|
123
|
+
sdkLicense: e.license,
|
|
124
|
+
license: e.license,
|
|
125
|
+
error: e.licenseError,
|
|
126
|
+
plan: e.licensePlan
|
|
127
|
+
});
|
|
128
|
+
async function at(e) {
|
|
129
|
+
const { licenseKey: i, pluginName: o, baseApiUrl: r } = e;
|
|
130
|
+
try {
|
|
131
|
+
return (await tt({
|
|
132
|
+
baseApiUrl: r,
|
|
133
|
+
path: `/sdk/${i || "na"}`,
|
|
134
|
+
method: "POST",
|
|
135
|
+
params: {
|
|
136
|
+
d: window.location.hostname,
|
|
137
|
+
pn: o
|
|
138
|
+
}
|
|
139
|
+
})).result || {};
|
|
140
|
+
} catch (a) {
|
|
141
|
+
return console.error("Error during SDK license check:", a), !1;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
const rt = (e, i) => (
|
|
145
|
+
// deffered cleanup in case it's called immediatly
|
|
146
|
+
e.onReady(() => e.Plugins.remove(i))
|
|
147
|
+
), I = "presetBlockLibrary", lt = f.startup, st = (e) => {
|
|
148
|
+
var i;
|
|
149
|
+
return e.is(
|
|
150
|
+
"mj-body"
|
|
151
|
+
/* body */
|
|
152
|
+
) && !!((i = e.parent()) != null && i.is("mjml"));
|
|
153
|
+
}, n = {
|
|
154
|
+
header: {
|
|
155
|
+
id: "preset-block-library-header",
|
|
156
|
+
open: !1,
|
|
157
|
+
label: "Header",
|
|
158
|
+
icon: '<svg viewBox="0 0 24 24"><path fill="currentColor" d="M21 3a1 1 0 0 1 1 1v16a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1zm-1 2H4v14h16zm-2 2v2H6V7z"/></svg>'
|
|
159
|
+
},
|
|
160
|
+
hero: {
|
|
161
|
+
id: "preset-block-library-hero",
|
|
162
|
+
open: !1,
|
|
163
|
+
label: "Hero",
|
|
164
|
+
icon: '<svg viewBox="0 0 24 24"><path d="M4 20h16a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2m0-9h16v7H4z"/></svg>'
|
|
165
|
+
},
|
|
166
|
+
content: {
|
|
167
|
+
id: "preset-block-library-content",
|
|
168
|
+
open: !1,
|
|
169
|
+
label: "Content",
|
|
170
|
+
icon: '<svg viewBox="0 0 24 24"><path d="M21 3H3c-.6 0-1 .4-1 1v6c0 .6.4 1 1 1h18c.6 0 1-.4 1-1V4c0-.6-.4-1-1-1m0 10H3c-.6 0-1 .4-1 1v6c0 .6.4 1 1 1h18c.6 0 1-.4 1-1v-6c0-.6-.4-1-1-1"/></svg>'
|
|
171
|
+
},
|
|
172
|
+
cta: {
|
|
173
|
+
id: "preset-block-library-cta",
|
|
174
|
+
open: !1,
|
|
175
|
+
label: "Call to Action",
|
|
176
|
+
icon: '<svg viewBox="0 0 24 24"><path d="M13 5a4 4 0 0 1 2 7.46v-1.22A3.01 3.01 0 0 0 13 6a3 3 0 0 0-2 5.24v1.22A4 4 0 0 1 13 5m7 15.5a1.55 1.55 0 0 1-1.5 1.5H13q-.59 0-1-.43l-4-4.2.74-.77a1 1 0 0 1 .76-.32h.2L12 18V9c0-.55.45-1 1-1s1 .45 1 1v4.47l1.21.13 3.94 2.19c.53.24.85.77.85 1.35zM20 2H4a2 2 0 0 0-2 2v8a2 2 0 0 0 2 2h4v-2H4V4h16v8h-2v2h2v-.04l.04.04c1.09 0 1.96-.91 1.96-2V4a2 2 0 0 0-2-2"/></svg>'
|
|
177
|
+
},
|
|
178
|
+
gallery: {
|
|
179
|
+
id: "preset-block-library-gallery",
|
|
180
|
+
open: !1,
|
|
181
|
+
label: "Gallery",
|
|
182
|
+
icon: '<svg viewBox="0 0 24 24"><path fill="currentColor" d="M4 5h7v14H4V5m9 0h7v6h-7V5m0 8h7v6h-7v-6Z"/></svg>'
|
|
183
|
+
},
|
|
184
|
+
people: {
|
|
185
|
+
id: "preset-block-library-people",
|
|
186
|
+
open: !1,
|
|
187
|
+
label: "People",
|
|
188
|
+
icon: '<svg viewBox="0 0 24 24"><path d="M16 17v2H2v-2s0-4 7-4 7 4 7 4m-3.5-9.5A3.5 3.5 0 1 0 9 11a3.5 3.5 0 0 0 3.5-3.5m3.44 5.5A5.3 5.3 0 0 1 18 17v2h4v-2s0-3.63-6.06-4M15 4a3.4 3.4 0 0 0-1.93.59 5 5 0 0 1 0 5.82A3.4 3.4 0 0 0 15 11a3.5 3.5 0 0 0 0-7"/></svg>'
|
|
189
|
+
},
|
|
190
|
+
footer: {
|
|
191
|
+
id: "preset-block-library-footer",
|
|
192
|
+
open: !1,
|
|
193
|
+
label: "Footer",
|
|
194
|
+
icon: '<svg viewBox="0 0 24 24"><path fill="currentColor" d="M21 3a1 1 0 0 1 1 1v16a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1zm-1 2H4v14h16zm-2 10v2H6v-2z"/></svg>'
|
|
195
|
+
}
|
|
196
|
+
}, q = ({ editor: e, content: i }, o) => {
|
|
197
|
+
var c;
|
|
198
|
+
if (typeof i != "string" || !W(e))
|
|
199
|
+
return;
|
|
200
|
+
const r = e.getWrapper(), a = r == null ? void 0 : r.findFirstType("mj-head"), s = r == null ? void 0 : r.findFirstType(st), d = !!(o != null && o.withGlobalStyles), l = d ? ` ${((c = s == null ? void 0 : s.__attrToString) == null ? void 0 : c.call(s)) || ""}` : ' background-color="#E7E7E7"';
|
|
201
|
+
return {
|
|
202
|
+
mjml: `<mjml>${d && (a == null ? void 0 : a.toHTML()) || ""}<mj-body${l}>${i}</mj-body></mjml>`,
|
|
203
|
+
width: 700
|
|
204
|
+
};
|
|
205
|
+
}, M = {
|
|
206
|
+
id: "preset-block-library",
|
|
207
|
+
label: "Preset Blocks",
|
|
208
|
+
icon: '<svg viewBox="0 0 24 24"><path fill="currentColor" d="M13,3V9H21V3M13,21H21V11H13M3,21H11V15H3M3,13H11V3H3V13Z" /></svg>',
|
|
209
|
+
preview: (e) => q(e)
|
|
210
|
+
}, pt = (e) => e.withGlobalStyles ? {
|
|
211
|
+
...M,
|
|
212
|
+
preview: (i) => q(i, e)
|
|
213
|
+
} : M, x = X({
|
|
214
|
+
width: 320,
|
|
215
|
+
height: 96,
|
|
216
|
+
text: "Logo",
|
|
217
|
+
bg: "e2e8f0",
|
|
218
|
+
fg: "334155"
|
|
219
|
+
}), ct = ({
|
|
220
|
+
id: e,
|
|
221
|
+
label: i,
|
|
222
|
+
category: o,
|
|
223
|
+
library: r
|
|
224
|
+
}) => ({
|
|
225
|
+
id: e,
|
|
226
|
+
label: i,
|
|
227
|
+
category: o,
|
|
228
|
+
library: r,
|
|
229
|
+
select: !0,
|
|
230
|
+
full: !0,
|
|
231
|
+
media: o.icon
|
|
232
|
+
}), t = {
|
|
233
|
+
spacing: {
|
|
234
|
+
section: "10px 0px 10px 0px"
|
|
235
|
+
},
|
|
236
|
+
colors: {
|
|
237
|
+
primary: "#cf549e",
|
|
238
|
+
secondary: "#7c3aed",
|
|
239
|
+
white: "#ffffff",
|
|
240
|
+
text: {
|
|
241
|
+
heading: "#0f172a",
|
|
242
|
+
body: "#475569"
|
|
243
|
+
},
|
|
244
|
+
bg: {
|
|
245
|
+
section: "#ffffff",
|
|
246
|
+
transparent: "#00000000"
|
|
247
|
+
}
|
|
248
|
+
},
|
|
249
|
+
radii: {
|
|
250
|
+
s: "8px",
|
|
251
|
+
m: "16px",
|
|
252
|
+
l: "32px",
|
|
253
|
+
card: "10px",
|
|
254
|
+
pill: "999px"
|
|
255
|
+
},
|
|
256
|
+
buttons: {
|
|
257
|
+
primary: 'background-color="#cf549e" color="#ffffff"',
|
|
258
|
+
secondary: 'background-color="#7c3aed" color="#ffffff"'
|
|
259
|
+
},
|
|
260
|
+
attrs: {
|
|
261
|
+
bgTransparent: 'background-color="#00000000"',
|
|
262
|
+
bgSection: 'background-color="#ffffff"'
|
|
263
|
+
}
|
|
264
|
+
}, dt = "https://images.unsplash.com/photo-1713171158509-f2a6582581a0?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3NzE5NjR8MHwxfHNlYXJjaHw0MXx8YWJzdHJhY3QlMjBwdXJwbGUlMjB3YXZlc3xlbnwwfHx8fDE3ODAxNjIzNTd8MA&ixlib=rb-4.1.0&q=80&w=1080", mt = "https://images.unsplash.com/photo-1637611331620-51149c7ceb94?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3NzE5NjR8MHwxfHNlYXJjaHw3M3x8YWJzdHJhY3QlMjBwdXJwbGV8ZW58MHx8fHwxNzgwMjk5NDUxfDA&ixlib=rb-4.1.0&q=80&w=1080", u = "https://images.unsplash.com/photo-1670189577367-2c6ef31a4b8c?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3NzE5NjR8MHwxfHNlYXJjaHwxNXx8YWJzdHJhY3QlMjBwdXJwbGV8ZW58MHx8fHwxNzgwMjk5NDMyfDA&ixlib=rb-4.1.0&q=80&w=1080", gt = "https://images.unsplash.com/photo-1607371059636-720f2c169e82?q=80&w=928&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D", D = "https://images.unsplash.com/photo-1674247489394-524fef63c0ff?q=80&w=928&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D", $ = "https://images.unsplash.com/photo-1729119578980-91838d6014d9?q=80&w=1160&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D", H = "https://images.unsplash.com/photo-1729119579013-decd9c61c395?q=80&w=1160&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D", xt = "https://images.unsplash.com/photo-1729119578960-45095ebc3b8a?q=80&w=1160&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D", ft = "https://images.unsplash.com/photo-1729119578920-240c46516e91?q=80&w=1160&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D", E = "https://images.unsplash.com/photo-1659468525744-314c75acdd38?q=80&w=2064&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D", jt = "https://images.unsplash.com/photo-1739978291558-6dbdd5b9f9f8?q=80&w=2064&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D", ut = "https://images.unsplash.com/photo-1698429894924-ee93fc16279a?q=80&w=2200&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D", ht = "https://images.unsplash.com/photo-1698430484227-006b70bc83cb?q=80&w=2000&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D", bt = "https://images.unsplash.com/photo-1698429894931-fa699270a2fa?q=80&w=2200&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D", y = "https://images.unsplash.com/photo-1638248308805-d488b66ea854?q=80&w=1160&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D", B = "https://images.unsplash.com/photo-1706720097169-b4120bb97a30?q=80&w=1160&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D", S = "https://images.unsplash.com/photo-1706720093772-be76963b01a3?q=80&w=1160&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D", v = "https://images.unsplash.com/photo-1716032936139-33cb6cd84dc0?q=80&w=1160&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D", z = "https://images.unsplash.com/photo-1566319743996-123ad0f44a68?q=80&w=1160&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D", P = "https://images.unsplash.com/photo-1706466615511-18622e5ef756?q=80&w=1160&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D", C = "https://images.unsplash.com/photo-1527980965255-d3b416303d12?q=80&w=1160&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D", G = "https://images.unsplash.com/photo-1485893086445-ed75865251e0?q=80&w=1160&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D", wt = "https://images.unsplash.com/photo-1586299485759-f62264d6b63f?q=80&w=1160&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D", $t = "https://images.unsplash.com/photo-1595897950118-1037962bc920?q=80&w=1160&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D", yt = "https://images.unsplash.com/photo-1642060603505-e716140d45d2?q=80&w=1160&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D", vt = (e) => {
|
|
265
|
+
const i = (o) => e.withGlobalStyles ? "" : ` ${o}`;
|
|
266
|
+
return {
|
|
267
|
+
presetEmailHeaderLogo: {
|
|
268
|
+
label: "Centered Logo",
|
|
269
|
+
category: n.header,
|
|
270
|
+
getContent: ({
|
|
271
|
+
getImageUrl: o
|
|
272
|
+
}) => `<mj-section background-color="${t.colors.bg.section}" padding="${t.spacing.section}">
|
|
273
|
+
<mj-column>
|
|
274
|
+
<mj-image src="${o(x)}" alt="Brand logo" width="160px"/>
|
|
275
|
+
</mj-column>
|
|
276
|
+
</mj-section>`
|
|
277
|
+
},
|
|
278
|
+
presetEmailHeaderLogoNav: {
|
|
279
|
+
label: "Logo + Menu",
|
|
280
|
+
category: n.header,
|
|
281
|
+
getContent: ({
|
|
282
|
+
getImageUrl: o
|
|
283
|
+
}) => `<mj-section background-color="${t.colors.bg.section}" padding="${t.spacing.section}">
|
|
284
|
+
<mj-column width="35%" vertical-align="middle">
|
|
285
|
+
<mj-image src="${o(x)}" alt="Brand logo" width="107px" align="left" />
|
|
286
|
+
</mj-column>
|
|
287
|
+
<mj-column width="65%" vertical-align="middle">
|
|
288
|
+
<mj-navbar align="right" base-url="https://example.com">
|
|
289
|
+
<mj-navbar-link color="#475569" font-size="13px" href="/shop">Shop</mj-navbar-link>
|
|
290
|
+
<mj-navbar-link color="#475569" font-size="13px" href="/stories">Stories</mj-navbar-link>
|
|
291
|
+
<mj-navbar-link color="#475569" font-size="13px" href="/support">Support</mj-navbar-link>
|
|
292
|
+
</mj-navbar>
|
|
293
|
+
</mj-column>
|
|
294
|
+
</mj-section>`
|
|
295
|
+
},
|
|
296
|
+
presetEmailHeaderLogoCta: {
|
|
297
|
+
label: "Logo + Button",
|
|
298
|
+
category: n.header,
|
|
299
|
+
getContent: ({
|
|
300
|
+
getImageUrl: o
|
|
301
|
+
}) => `<mj-section background-color="${t.colors.bg.section}" padding="${t.spacing.section}">
|
|
302
|
+
<mj-column vertical-align="middle">
|
|
303
|
+
<mj-image src="${o(x)}" alt="Brand logo" width="120px" align="left" />
|
|
304
|
+
</mj-column>
|
|
305
|
+
<mj-column vertical-align="middle">
|
|
306
|
+
<mj-button align="right" ${t.buttons.secondary}>
|
|
307
|
+
Get started
|
|
308
|
+
</mj-button>
|
|
309
|
+
</mj-column>
|
|
310
|
+
</mj-section>`
|
|
311
|
+
},
|
|
312
|
+
presetEmailHeaderSocialLogo: {
|
|
313
|
+
label: "Logo + Socials",
|
|
314
|
+
category: n.header,
|
|
315
|
+
getContent: ({
|
|
316
|
+
getImageUrl: o
|
|
317
|
+
}) => `<mj-section background-color="${t.colors.bg.section}" padding="${t.spacing.section}">
|
|
318
|
+
<mj-column vertical-align="middle">
|
|
319
|
+
<mj-social align="left" mode="horizontal">
|
|
320
|
+
<mj-social-element name="facebook" background-color="${t.colors.secondary}"></mj-social-element>
|
|
321
|
+
<mj-social-element name="linkedin" background-color="${t.colors.secondary}"></mj-social-element>
|
|
322
|
+
<mj-social-element name="youtube" background-color="${t.colors.secondary}"></mj-social-element>
|
|
323
|
+
</mj-social>
|
|
324
|
+
</mj-column>
|
|
325
|
+
<mj-column vertical-align="middle">
|
|
326
|
+
<mj-image src="${o(x)}" alt="Brand logo" width="95px" align="right"/>
|
|
327
|
+
</mj-column>
|
|
328
|
+
</mj-section>`
|
|
329
|
+
},
|
|
330
|
+
presetEmailHeaderStackedMenu: {
|
|
331
|
+
label: "Stacked Logo + Menu",
|
|
332
|
+
category: n.header,
|
|
333
|
+
getContent: ({ getImageUrl: o }) => `<mj-wrapper>
|
|
334
|
+
<mj-section background-color="#ffffff" padding="0px">
|
|
335
|
+
<mj-column>
|
|
336
|
+
<mj-image src="${o(x)}" alt="Brand logo" width="160px" align="center" />
|
|
337
|
+
<mj-divider border-width="1px" border-color="#e7e7e7"></mj-divider>
|
|
338
|
+
</mj-column>
|
|
339
|
+
</mj-section>
|
|
340
|
+
<mj-section background-color="#ffffff" padding="0px">
|
|
341
|
+
<mj-column>
|
|
342
|
+
<mj-navbar align="center" base-url="https://example.com">
|
|
343
|
+
<mj-navbar-link color="#475569" font-size="13px" href="/shop">Shop</mj-navbar-link>
|
|
344
|
+
<mj-navbar-link color="#475569" font-size="13px" href="/stories">Stories</mj-navbar-link>
|
|
345
|
+
<mj-navbar-link color="#475569" font-size="13px" href="/support">Support</mj-navbar-link>
|
|
346
|
+
</mj-navbar>
|
|
347
|
+
</mj-column>
|
|
348
|
+
</mj-section>
|
|
349
|
+
</mj-wrapper>`
|
|
350
|
+
},
|
|
351
|
+
presetEmailHeroCenteredCta: {
|
|
352
|
+
label: "Centered Hero + CTA",
|
|
353
|
+
category: n.hero,
|
|
354
|
+
getContent: () => `<mj-section padding="${t.spacing.section}">
|
|
355
|
+
<mj-column padding="40px 20px" border-radius="20px"${i('background-color="#ffffff"')}>
|
|
356
|
+
<mj-text padding="5px 0" align="center" font-size="12px" font-weight="700" text-transform="uppercase" letter-spacing="1px"${i('color="#1e293b"')}>
|
|
357
|
+
Fresh release
|
|
358
|
+
</mj-text>
|
|
359
|
+
<mj-text align="center" font-size="32px" font-weight="700" line-height="40px"${i('color="#0f172a"')}>
|
|
360
|
+
Launch polished campaigns
|
|
361
|
+
</mj-text>
|
|
362
|
+
<mj-text align="center" font-size="16px" line-height="24px"${i('color="#334155"')}>
|
|
363
|
+
Start with ready-made sections, swap in your content, and ship a clean newsletter without building every block from scratch.
|
|
364
|
+
</mj-text>
|
|
365
|
+
<mj-spacer height="30px"></mj-spacer>
|
|
366
|
+
<mj-button align="center" font-weight="700" padding="0" inner-padding="14px 28px" ${i('background-color="#8b5cf6" color="#ffffff" border-radius="999px"')}>
|
|
367
|
+
Explore the collection
|
|
368
|
+
</mj-button>
|
|
369
|
+
</mj-column>
|
|
370
|
+
</mj-section>`
|
|
371
|
+
},
|
|
372
|
+
presetEmailHeroBackground: {
|
|
373
|
+
label: "Background Hero",
|
|
374
|
+
category: n.hero,
|
|
375
|
+
getContent: ({ getImageUrl: o }) => `<mj-wrapper>
|
|
376
|
+
<mj-section
|
|
377
|
+
background-url="${o(dt)}"
|
|
378
|
+
background-size="cover"
|
|
379
|
+
background-repeat="no-repeat"
|
|
380
|
+
background-color="#c7a5c9"
|
|
381
|
+
padding="110px 24px 96px 24px"
|
|
382
|
+
border-radius="${t.radii.card}"
|
|
383
|
+
>
|
|
384
|
+
<mj-column background-color="#00000000">
|
|
385
|
+
<mj-text color="#ffffff" align="center" font-weight="700" font-size="12px" line-height="30px" letter-spacing="2px" padding="0">
|
|
386
|
+
SEASONAL LAUNCH
|
|
387
|
+
</mj-text>
|
|
388
|
+
<mj-text align="center" color="#9767c4" font-size="50px" font-weight="700" line-height="52px" letter-spacing="1px" padding="10px 0">
|
|
389
|
+
UP TO 70% OFF
|
|
390
|
+
</mj-text>
|
|
391
|
+
<mj-text color="#ffffff" align="center" font-size="24px" line-height="32px" padding="0">
|
|
392
|
+
Limited-time collection
|
|
393
|
+
</mj-text>
|
|
394
|
+
<mj-button font-size="16px" border-radius="999px" padding="30px 0 0 0" inner-padding="20px 40px" font-weight="700" letter-spacing="1px" background-color="#9767c4" color="#ffffff">
|
|
395
|
+
SHOP NOW
|
|
396
|
+
</mj-button>
|
|
397
|
+
</mj-column>
|
|
398
|
+
</mj-section>
|
|
399
|
+
</mj-wrapper>`
|
|
400
|
+
},
|
|
401
|
+
presetEmailHeroSplitBackground: {
|
|
402
|
+
label: "Split Background Hero",
|
|
403
|
+
category: n.hero,
|
|
404
|
+
getContent: ({ getImageUrl: o }) => `<mj-wrapper>
|
|
405
|
+
<mj-section
|
|
406
|
+
padding="48px 24px"
|
|
407
|
+
background-url="${o(mt)}"
|
|
408
|
+
background-color="#c7a5c9"
|
|
409
|
+
background-size="cover"
|
|
410
|
+
background-repeat="no-repeat"
|
|
411
|
+
background-color="#1e293b"
|
|
412
|
+
border-radius="${t.radii.card}"
|
|
413
|
+
>
|
|
414
|
+
<mj-column ${t.attrs.bgTransparent}></mj-column>
|
|
415
|
+
<mj-column ${t.attrs.bgTransparent}>
|
|
416
|
+
<mj-text font-size="40px" line-height="48px" color="#ffffff" font-weight="700" padding="0">
|
|
417
|
+
Spend & Save
|
|
418
|
+
</mj-text>
|
|
419
|
+
<mj-text padding="20px 0" color="#ffffff" line-height="24px">
|
|
420
|
+
Spotlight a campaign with image-led energy while keeping the key message and CTA anchored in a readable column.
|
|
421
|
+
</mj-text>
|
|
422
|
+
<mj-button background-color="#ffffff" color="#cf549e" width="100%" border-radius="999px" padding="30px 0 0 0" font-weight="700" letter-spacing="1px">
|
|
423
|
+
SHOP NOW
|
|
424
|
+
</mj-button>
|
|
425
|
+
</mj-column>
|
|
426
|
+
</mj-section>
|
|
427
|
+
</mj-wrapper>`
|
|
428
|
+
},
|
|
429
|
+
presetEmailHeroImageCopy: {
|
|
430
|
+
label: "Image + Copy Hero",
|
|
431
|
+
category: n.hero,
|
|
432
|
+
getContent: ({ getImageUrl: o }) => `<mj-wrapper>
|
|
433
|
+
<mj-section background-color="#ffffff" padding="5px" border-radius="20px">
|
|
434
|
+
<mj-column vertical-align="middle">
|
|
435
|
+
<mj-image src="${o(u)}" alt="Campaign preview" padding="0" border-radius="18px" />
|
|
436
|
+
</mj-column>
|
|
437
|
+
<mj-column vertical-align="middle" padding="0 20px">
|
|
438
|
+
<mj-text color="#0f172a" font-size="28px" font-weight="700" line-height="36px" padding="12px 0">
|
|
439
|
+
Put your next story front
|
|
440
|
+
</mj-text>
|
|
441
|
+
<mj-text color="#475569" line-height="23px" padding="10px 0 20px 0">
|
|
442
|
+
Combine imagery, concise copy, and a single call to action to guide subscribers toward your most important announcement.
|
|
443
|
+
</mj-text>
|
|
444
|
+
<mj-button align="left" background-color="#0f172a" color="#ffffff" border-radius="999px" inner-padding="14px 26px" padding="20px 0 0 0">
|
|
445
|
+
Read the update
|
|
446
|
+
</mj-button>
|
|
447
|
+
</mj-column>
|
|
448
|
+
</mj-section>
|
|
449
|
+
</mj-wrapper>`
|
|
450
|
+
},
|
|
451
|
+
presetEmailHeroMenuBottom: {
|
|
452
|
+
label: "Hero + Menu Bottom",
|
|
453
|
+
category: n.hero,
|
|
454
|
+
getContent: ({ getImageUrl: o }) => `<mj-wrapper>
|
|
455
|
+
<mj-section padding="0" background-color="#8b5cf6" border-radius="10px 10px 0px 0px">
|
|
456
|
+
<mj-column ${t.attrs.bgTransparent} vertical-align="middle" padding="40px 30px">
|
|
457
|
+
<mj-image align="left" src="${o(x)}" alt="Brand logo" width="100px" padding="0"></mj-image>
|
|
458
|
+
<mj-text padding="25px 0 0 0" align="left" font-size="52px" font-weight="700" line-height="60px" color="#ffffff">
|
|
459
|
+
50% OFF
|
|
460
|
+
</mj-text>
|
|
461
|
+
<mj-text padding="0" align="left" font-size="32px" line-height="42px" font-weight="700" color="#ffffff">
|
|
462
|
+
selected products this week
|
|
463
|
+
</mj-text>
|
|
464
|
+
</mj-column>
|
|
465
|
+
<mj-column ${t.attrs.bgTransparent}>
|
|
466
|
+
<mj-image src="${o(gt)}" alt="Promotional image" padding="0"></mj-image>
|
|
467
|
+
</mj-column>
|
|
468
|
+
</mj-section>
|
|
469
|
+
<mj-section padding="0">
|
|
470
|
+
<mj-column border-radius="0px 0px 10px 10px" background-color="#7c3aed">
|
|
471
|
+
<mj-navbar base-url="https://example.com" align="center">
|
|
472
|
+
<mj-navbar-link font-weight="700" text-transform="uppercase" padding="20px 15px" color="#ffffff" href="/home">Home</mj-navbar-link>
|
|
473
|
+
<mj-navbar-link font-weight="700" text-transform="uppercase" padding="20px 15px" color="#ffffff" href="/blog">Blog</mj-navbar-link>
|
|
474
|
+
<mj-navbar-link font-weight="700" text-transform="uppercase" padding="20px 15px" color="#ffffff" href="/contact">Contact</mj-navbar-link>
|
|
475
|
+
</mj-navbar>
|
|
476
|
+
</mj-column>
|
|
477
|
+
</mj-section>
|
|
478
|
+
</mj-wrapper>`
|
|
479
|
+
},
|
|
480
|
+
presetEmailHeroMenuTop: {
|
|
481
|
+
label: "Hero + Menu Top",
|
|
482
|
+
category: n.hero,
|
|
483
|
+
getContent: ({ getImageUrl: o }) => `<mj-wrapper>
|
|
484
|
+
<mj-section padding="20px 24px" background-color="#ffffff" border-radius="10px 10px 0px 0px">
|
|
485
|
+
<mj-column vertical-align="middle" width="22%">
|
|
486
|
+
<mj-image src="${o(x)}" alt="Brand logo" padding="0"></mj-image>
|
|
487
|
+
</mj-column>
|
|
488
|
+
<mj-column ${t.attrs.bgTransparent} vertical-align="middle" width="50%">
|
|
489
|
+
<mj-navbar align="center">
|
|
490
|
+
<mj-navbar-link color="#101828" font-size="14px" font-weight="700" href="/home">Home</mj-navbar-link>
|
|
491
|
+
<mj-navbar-link color="#101828" font-size="14px" font-weight="700" href="/about">About</mj-navbar-link>
|
|
492
|
+
<mj-navbar-link color="#101828" font-size="14px" font-weight="700" href="/services">Services</mj-navbar-link>
|
|
493
|
+
</mj-navbar>
|
|
494
|
+
</mj-column>
|
|
495
|
+
<mj-column vertical-align="middle" width="28%">
|
|
496
|
+
<mj-text padding="10px 15px" align="center" font-size="14px" font-weight="700" color="#ffffff" container-background-color="#414141">
|
|
497
|
+
UPDATES
|
|
498
|
+
</mj-text>
|
|
499
|
+
</mj-column>
|
|
500
|
+
</mj-section>
|
|
501
|
+
<mj-section padding="0" background-color="#f4f2f8" border-radius="0px 0px 10px 10px">
|
|
502
|
+
<mj-column ${t.attrs.bgTransparent}>
|
|
503
|
+
<mj-image src="${o(u)}" alt="Campaign image" padding="0"></mj-image>
|
|
504
|
+
</mj-column>
|
|
505
|
+
<mj-column ${t.attrs.bgTransparent} vertical-align="middle" padding="40px 30px">
|
|
506
|
+
<mj-text padding="0" align="left" font-size="44px" line-height="48px" color="#d0549e" font-weight="700">
|
|
507
|
+
Digital
|
|
508
|
+
</mj-text>
|
|
509
|
+
<mj-text padding="0" align="left" font-size="38px" line-height="42px" font-weight="700">
|
|
510
|
+
Marketing
|
|
511
|
+
</mj-text>
|
|
512
|
+
<mj-text padding="20px 0" align="left" font-size="14px" line-height="24px">
|
|
513
|
+
Pair a navigational masthead with a crisp two-column hero for agency intros, event emails, or editorial launches.
|
|
514
|
+
</mj-text>
|
|
515
|
+
<mj-button font-size="16px" font-weight="700" padding="10px 0" align="left" inner-padding="15px 30px" background-color="#d0549e" color="#ffffff">
|
|
516
|
+
Get started
|
|
517
|
+
</mj-button>
|
|
518
|
+
</mj-column>
|
|
519
|
+
</mj-section>
|
|
520
|
+
</mj-wrapper>`
|
|
521
|
+
},
|
|
522
|
+
presetEmailHeroFullWidthBg: {
|
|
523
|
+
label: "Full Width Background Hero",
|
|
524
|
+
category: n.hero,
|
|
525
|
+
getContent: ({ getImageUrl: o }) => `<mj-section
|
|
526
|
+
padding="48px 12px"
|
|
527
|
+
background-url="${o(u)}"
|
|
528
|
+
background-size="cover"
|
|
529
|
+
background-repeat="no-repeat"
|
|
530
|
+
background-color="#cfaac4"
|
|
531
|
+
full-width="full-width"
|
|
532
|
+
>
|
|
533
|
+
<mj-column background-color="#ffffffab" padding="40px 30px" border-radius="10px" border="2px solid #f4d9eb" width="90%">
|
|
534
|
+
<mj-text padding="0px 0px 20px 0px" align="left" font-size="38px" line-height="50px" font-weight="700">
|
|
535
|
+
Your <span style="color: #d0549e;">Conference</span>
|
|
536
|
+
</mj-text>
|
|
537
|
+
<mj-text padding="10px 0" align="left" font-size="30px" line-height="36px" font-weight="700">
|
|
538
|
+
22-23 September
|
|
539
|
+
</mj-text>
|
|
540
|
+
<mj-text padding="0 0 20px 0" align="left" font-size="16px" line-height="24px">
|
|
541
|
+
Don't miss out on these limited-time events happening across the city!<br/>
|
|
542
|
+
Grand Horizon Hotel, 123 Innovation Boulevard, Tech City.
|
|
543
|
+
</mj-text>
|
|
544
|
+
<mj-button ${t.buttons.primary} align="left" font-size="16px" padding="10px 0" border-radius="999px" inner-padding="15px 30px">
|
|
545
|
+
Purchase ticket
|
|
546
|
+
</mj-button>
|
|
547
|
+
</mj-column>
|
|
548
|
+
</mj-section>`
|
|
549
|
+
},
|
|
550
|
+
presetEmailContentIntro: {
|
|
551
|
+
label: "Content Intro",
|
|
552
|
+
category: n.content,
|
|
553
|
+
getContent: () => `<mj-section background-color="#ffffff" padding="24px">
|
|
554
|
+
<mj-column ${t.attrs.bgTransparent}>
|
|
555
|
+
<mj-text color="${t.colors.primary}" font-size="26px" font-weight="700" line-height="32px" padding="0">
|
|
556
|
+
A simple intro section
|
|
557
|
+
</mj-text>
|
|
558
|
+
<mj-text color="${t.colors.text.body}" line-height="30px" padding="0 0 12px 0">
|
|
559
|
+
Use this section to set the tone, explain what changed, or frame the key message before readers move into product details and supporting content.
|
|
560
|
+
</mj-text>
|
|
561
|
+
<mj-divider border-color="#dbe4f0" border-width="1px" padding="12px 0 0 0" />
|
|
562
|
+
</mj-column>
|
|
563
|
+
</mj-section>`
|
|
564
|
+
},
|
|
565
|
+
presetEmailContentTwoColumn: {
|
|
566
|
+
label: "Content Two Column",
|
|
567
|
+
category: n.content,
|
|
568
|
+
getContent: () => `<mj-section background-color="#ffffff" padding="24px">
|
|
569
|
+
<mj-column ${t.attrs.bgTransparent} padding="0 12px 12px 0">
|
|
570
|
+
<mj-text color="${t.colors.primary}" font-size="14px" font-weight="700" line-height="28px" padding="0">Label 1</mj-text>
|
|
571
|
+
<mj-text color="${t.colors.text.heading}" font-size="20px" font-weight="700" line-height="28px" padding="0 0 10px 0">
|
|
572
|
+
Editorial note
|
|
573
|
+
</mj-text>
|
|
574
|
+
<mj-text color="${t.colors.text.body}" font-size="15px" line-height="24px" padding="0">
|
|
575
|
+
Share context, a product update, or a short story that helps readers understand why this message matters right now.
|
|
576
|
+
</mj-text>
|
|
577
|
+
</mj-column>
|
|
578
|
+
<mj-column ${t.attrs.bgTransparent} padding="0">
|
|
579
|
+
<mj-text color="${t.colors.primary}" font-size="14px" font-weight="700" line-height="28px" padding="0">Label 2</mj-text>
|
|
580
|
+
<mj-text color="${t.colors.text.heading}" font-size="20px" font-weight="700" line-height="28px" padding="0 0 10px 0">
|
|
581
|
+
Key takeaway
|
|
582
|
+
</mj-text>
|
|
583
|
+
<mj-text color="${t.colors.text.body}" font-size="15px" line-height="24px" padding="0">
|
|
584
|
+
Pair it with supporting details, release notes, customer-facing benefits, or a concise summary that encourages the next click.
|
|
585
|
+
</mj-text>
|
|
586
|
+
</mj-column>
|
|
587
|
+
</mj-section>`
|
|
588
|
+
},
|
|
589
|
+
presetEmailContentCenterImageColumns: {
|
|
590
|
+
label: "Center Image Columns",
|
|
591
|
+
category: n.content,
|
|
592
|
+
getContent: ({ getImageUrl: o }) => `<mj-section padding="50px 24px 24px" background-color="#ffffff">
|
|
593
|
+
<mj-column width="33%">
|
|
594
|
+
<mj-text color="${t.colors.text.heading}" padding="0 15px 5px" align="right" font-size="16px" font-weight="600">
|
|
595
|
+
24/7 support
|
|
596
|
+
</mj-text>
|
|
597
|
+
<mj-text color="${t.colors.text.body}" padding="0 15px 30px" align="right" font-size="13px" line-height="22px">
|
|
598
|
+
Explain one service or capability on the left to frame the main visual.
|
|
599
|
+
</mj-text>
|
|
600
|
+
<mj-text color="${t.colors.text.heading}" padding="0 15px 5px" align="right" font-size="16px" font-weight="600">
|
|
601
|
+
Cloud sync
|
|
602
|
+
</mj-text>
|
|
603
|
+
<mj-text color="${t.colors.text.body}" padding="0 15px 30px" align="right" font-size="13px" line-height="22px">
|
|
604
|
+
A second supporting point balances the composition.
|
|
605
|
+
</mj-text>
|
|
606
|
+
</mj-column>
|
|
607
|
+
<mj-column width="34%">
|
|
608
|
+
<mj-image src="${o(u)}" alt="Feature" padding="0 0 30px" border-radius="${t.radii.s}"></mj-image>
|
|
609
|
+
</mj-column>
|
|
610
|
+
<mj-column width="33%">
|
|
611
|
+
<mj-text color="${t.colors.text.heading}" padding="0 15px 5px" align="left" font-size="16px" font-weight="600">
|
|
612
|
+
Free updates
|
|
613
|
+
</mj-text>
|
|
614
|
+
<mj-text color="${t.colors.text.body}" padding="0 15px 30px" align="left" font-size="13px" line-height="22px">
|
|
615
|
+
The right column works well for platform highlights and benefits.
|
|
616
|
+
</mj-text>
|
|
617
|
+
<mj-text color="${t.colors.text.heading}" padding="0 15px 5px" align="left" font-size="16px" font-weight="600">
|
|
618
|
+
Multi-platform
|
|
619
|
+
</mj-text>
|
|
620
|
+
<mj-text color="${t.colors.text.body}" padding="0 15px" align="left" font-size="13px" line-height="22px">
|
|
621
|
+
Keep each paragraph short so the layout stays clean and easy to scan.
|
|
622
|
+
</mj-text>
|
|
623
|
+
</mj-column>
|
|
624
|
+
</mj-section>`
|
|
625
|
+
},
|
|
626
|
+
presetEmailContentRowImageArticle: {
|
|
627
|
+
label: "Row Image Article",
|
|
628
|
+
category: n.content,
|
|
629
|
+
getContent: ({ getImageUrl: o }) => `<mj-wrapper>
|
|
630
|
+
<mj-section ${t.attrs.bgSection} padding="0" border-radius="${t.radii.m}">
|
|
631
|
+
<mj-column ${t.attrs.bgTransparent} width="40%">
|
|
632
|
+
<mj-image src="${o($)}" alt="Article" padding="0"></mj-image>
|
|
633
|
+
</mj-column>
|
|
634
|
+
<mj-column ${t.attrs.bgTransparent} vertical-align="top" width="60%" padding="20px">
|
|
635
|
+
<mj-text color="${t.colors.secondary}" font-size="12px" font-weight="700" letter-spacing="1px" padding="0">
|
|
636
|
+
LABEL
|
|
637
|
+
</mj-text>
|
|
638
|
+
<mj-text color="${t.colors.text.heading}" padding="10px 0" align="left" font-size="24px" line-height="34px" font-weight="600">
|
|
639
|
+
Article heading
|
|
640
|
+
</mj-text>
|
|
641
|
+
<mj-text color="${t.colors.text.body}" align="left" font-size="14px" line-height="26px" padding="0">
|
|
642
|
+
Use the article row for updates, editorial roundups, or product explainers.
|
|
643
|
+
</mj-text>
|
|
644
|
+
<mj-button ${t.attrs.bgTransparent} color="${t.colors.text.heading}" font-weight="700" font-size="12px" align="left"
|
|
645
|
+
border="2px solid ${t.colors.text.heading}" padding="40px 0px 0px 0px">VIEW DETAILS →</mj-button>
|
|
646
|
+
</mj-column>
|
|
647
|
+
</mj-section>
|
|
648
|
+
</mj-wrapper>`
|
|
649
|
+
},
|
|
650
|
+
presetEmailContentAlternatingRowImageArticles: {
|
|
651
|
+
label: "Alternating Row Image Articles",
|
|
652
|
+
category: n.content,
|
|
653
|
+
getContent: ({ getImageUrl: o }) => `<mj-wrapper gap="12px">
|
|
654
|
+
<mj-section padding="16px 0" border-radius="${t.radii.m}" ${t.attrs.bgSection}>
|
|
655
|
+
<mj-column ${t.attrs.bgTransparent} width="40%" vertical-align="top" padding="10px 20px">
|
|
656
|
+
<mj-image src="${o(H)}" border-radius="${t.radii.m}" padding="0" alt="Article visual"></mj-image>
|
|
657
|
+
</mj-column>
|
|
658
|
+
<mj-column ${t.attrs.bgTransparent} width="60%" vertical-align="top" padding="10px 20px">
|
|
659
|
+
<mj-text color="${t.colors.secondary}" font-size="12px" font-weight="700" letter-spacing="1px" padding="0">
|
|
660
|
+
FEATURE STORY
|
|
661
|
+
</mj-text>
|
|
662
|
+
<mj-text color="${t.colors.text.heading}" padding="10px 0" align="left" font-size="24px" line-height="34px" font-weight="600">
|
|
663
|
+
First Article
|
|
664
|
+
</mj-text>
|
|
665
|
+
<mj-text color="${t.colors.text.body}" align="left" font-size="14px" line-height="26px" padding="0">
|
|
666
|
+
Use alternating article rows for updates, editorial roundups, or product explainers that need more room than a standard card.
|
|
667
|
+
</mj-text>
|
|
668
|
+
<mj-button ${t.attrs.bgTransparent} color="${t.colors.text.heading}" font-weight="700" font-size="12px" align="left" padding="40px 0px 0px 0px" inner-padding="0">
|
|
669
|
+
READ MORE →
|
|
670
|
+
</mj-button>
|
|
671
|
+
</mj-column>
|
|
672
|
+
</mj-section>
|
|
673
|
+
<mj-section padding="16px 0" border-radius="${t.radii.m}" ${t.attrs.bgSection}>
|
|
674
|
+
<mj-column ${t.attrs.bgTransparent} width="60%" vertical-align="top" padding="10px 20px">
|
|
675
|
+
<mj-text color="${t.colors.secondary}" font-size="12px" font-weight="700" letter-spacing="1px" padding="0">
|
|
676
|
+
UPDATE
|
|
677
|
+
</mj-text>
|
|
678
|
+
<mj-text color="${t.colors.text.heading}" padding="10px 0" align="left" font-size="24px" line-height="34px" font-weight="600">
|
|
679
|
+
Second Article
|
|
680
|
+
</mj-text>
|
|
681
|
+
<mj-text color="${t.colors.text.body}" align="left" font-size="14px" line-height="26px" padding="0">
|
|
682
|
+
The mirrored second row keeps longer campaign emails from feeling repetitive while preserving a consistent structure.
|
|
683
|
+
</mj-text>
|
|
684
|
+
<mj-button ${t.attrs.bgTransparent} color="${t.colors.text.heading}" font-weight="700" font-size="12px" align="left" padding="40px 0px 0px 0px" inner-padding="0">
|
|
685
|
+
READ MORE →
|
|
686
|
+
</mj-button>
|
|
687
|
+
</mj-column>
|
|
688
|
+
<mj-column ${t.attrs.bgTransparent} width="40%" vertical-align="top" padding="10px 20px">
|
|
689
|
+
<mj-image src="${o($)}" border-radius="${t.radii.m}" padding="0" alt="Article visual"></mj-image>
|
|
690
|
+
</mj-column>
|
|
691
|
+
</mj-section>
|
|
692
|
+
</mj-wrapper>`
|
|
693
|
+
},
|
|
694
|
+
presetEmailContentGridArticles: {
|
|
695
|
+
label: "Grid Articles",
|
|
696
|
+
category: n.content,
|
|
697
|
+
getContent: ({ getImageUrl: o }) => `<mj-wrapper>
|
|
698
|
+
<mj-section padding="0" border-radius="${t.radii.m} ${t.radii.m} 0 0" ${t.attrs.bgSection}>
|
|
699
|
+
<mj-column vertical-align="middle">
|
|
700
|
+
<mj-image src="${o(xt)}" alt="Destination one" padding="0"></mj-image>
|
|
701
|
+
</mj-column>
|
|
702
|
+
<mj-column ${t.attrs.bgTransparent} vertical-align="middle" padding="34px 24px">
|
|
703
|
+
<mj-text color="${t.colors.secondary}" font-size="12px" font-weight="700" letter-spacing="1px" padding="0 0 10px">
|
|
704
|
+
LABEL ONE
|
|
705
|
+
</mj-text>
|
|
706
|
+
<mj-text align="left" font-size="22px" line-height="28px" letter-spacing="1px" padding="0">
|
|
707
|
+
First Article
|
|
708
|
+
</mj-text>
|
|
709
|
+
<mj-text padding="8px 0 10px" align="left" font-size="14px" line-height="24px">
|
|
710
|
+
Pair each image with a short destination, story, or offer summary inside a balanced half-and-half layout.
|
|
711
|
+
</mj-text>
|
|
712
|
+
<mj-button border-radius="${t.radii.m}" background-color="${t.colors.secondary}" font-size="12px" font-weight="700" letter-spacing="1px" align="left" padding="30px 0 0 0" width="100%">
|
|
713
|
+
Book now
|
|
714
|
+
</mj-button>
|
|
715
|
+
</mj-column>
|
|
716
|
+
</mj-section>
|
|
717
|
+
<mj-section padding="0" border-radius="0 0 ${t.radii.m} ${t.radii.m}" ${t.attrs.bgSection}>
|
|
718
|
+
<mj-column ${t.attrs.bgTransparent} vertical-align="middle" padding="34px 24px">
|
|
719
|
+
<mj-text color="${t.colors.secondary}" font-size="12px" font-weight="700" letter-spacing="1px" padding="0 0 10px">
|
|
720
|
+
LABEL TWO
|
|
721
|
+
</mj-text>
|
|
722
|
+
<mj-text align="left" font-size="22px" line-height="28px" letter-spacing="1px" padding="0">
|
|
723
|
+
Second Article
|
|
724
|
+
</mj-text>
|
|
725
|
+
<mj-text padding="8px 0 10px" align="left" font-size="14px" line-height="24px">
|
|
726
|
+
The second row can invert the order to create a tidy editorial grid without needing a dedicated card component.
|
|
727
|
+
</mj-text>
|
|
728
|
+
<mj-button border-radius="${t.radii.m}" background-color="${t.colors.secondary}" font-size="12px" font-weight="700" letter-spacing="1px" align="left" padding="30px 0 0 0" width="100%">
|
|
729
|
+
Explore the offer
|
|
730
|
+
</mj-button>
|
|
731
|
+
</mj-column>
|
|
732
|
+
<mj-column vertical-align="middle">
|
|
733
|
+
<mj-image src="${o(ft)}" alt="Destination two" padding="0"></mj-image>
|
|
734
|
+
</mj-column>
|
|
735
|
+
</mj-section>
|
|
736
|
+
</mj-wrapper>`
|
|
737
|
+
},
|
|
738
|
+
presetEmailContentSplitArticles: {
|
|
739
|
+
label: "Split Articles",
|
|
740
|
+
category: n.content,
|
|
741
|
+
getContent: ({ getImageUrl: o }) => `<mj-wrapper>
|
|
742
|
+
<mj-section padding="0" ${t.attrs.bgSection}>
|
|
743
|
+
<mj-column ${t.attrs.bgTransparent}>
|
|
744
|
+
<mj-image src="${o(u)}" alt="Feature image" padding="0 0 30px"></mj-image>
|
|
745
|
+
<mj-text padding="0px 10px 10px 10px" color="${t.colors.primary}" font-size="12px" font-weight="700" letter-spacing="1px">
|
|
746
|
+
LABEL TWO
|
|
747
|
+
</mj-text>
|
|
748
|
+
<mj-text padding="0 10px" align="left" font-size="30px" line-height="36px" font-weight="700">
|
|
749
|
+
Your studio
|
|
750
|
+
</mj-text>
|
|
751
|
+
<mj-text padding="15px 10px" align="left" font-size="14px" line-height="24px">
|
|
752
|
+
Combine image-led storytelling and a short CTA inside a split layout that still feels more editorial than a standard promo row.
|
|
753
|
+
</mj-text>
|
|
754
|
+
<mj-button border-radius="${t.radii.m}" background-color="${t.colors.primary}" font-size="14px" font-weight="700" align="left" padding="10px">
|
|
755
|
+
Read more
|
|
756
|
+
</mj-button>
|
|
757
|
+
</mj-column>
|
|
758
|
+
<mj-column ${t.attrs.bgTransparent} padding="30px 0 0">
|
|
759
|
+
<mj-text padding="0px 10px 10px 10px" color="${t.colors.primary}" font-size="12px" font-weight="700" letter-spacing="1px">
|
|
760
|
+
LABEL ONE
|
|
761
|
+
</mj-text>
|
|
762
|
+
<mj-text padding="0 10px" align="left" font-size="30px" line-height="36px" font-weight="700">
|
|
763
|
+
Creative team
|
|
764
|
+
</mj-text>
|
|
765
|
+
<mj-text padding="15px 10px" align="left" font-size="14px" line-height="24px">
|
|
766
|
+
The mirrored second half lets you highlight another department, service, or offer while keeping the section cohesive.
|
|
767
|
+
</mj-text>
|
|
768
|
+
<mj-button border-radius="${t.radii.m}" background-color="${t.colors.primary}" font-size="14px" font-weight="700" align="left" padding="10px">
|
|
769
|
+
Explore more
|
|
770
|
+
</mj-button>
|
|
771
|
+
<mj-image src="${o(D)}" alt="Image" padding="30px 0 0"></mj-image>
|
|
772
|
+
</mj-column>
|
|
773
|
+
</mj-section>
|
|
774
|
+
</mj-wrapper>`
|
|
775
|
+
},
|
|
776
|
+
presetEmailContentColumnImageArticle: {
|
|
777
|
+
label: "Column Image Article",
|
|
778
|
+
category: n.content,
|
|
779
|
+
getContent: ({ getImageUrl: o }) => `<mj-wrapper>
|
|
780
|
+
<mj-section padding="5px" border-radius="${t.radii.m}" ${t.attrs.bgSection}>
|
|
781
|
+
<mj-column ${t.attrs.bgTransparent}>
|
|
782
|
+
<mj-image src="${o(E)}" border-radius="${t.radii.m}" padding="0" alt="Article"/>
|
|
783
|
+
<mj-text padding="24px 12px 12px" font-size="12px" font-weight="700" letter-spacing="1px" color="${t.colors.primary}">
|
|
784
|
+
LABEL ONE
|
|
785
|
+
</mj-text>
|
|
786
|
+
<mj-text color="${t.colors.text.heading}" padding="0px 12px" font-size="28px" font-weight="700" line-height="36px">
|
|
787
|
+
Put your next story front
|
|
788
|
+
</mj-text>
|
|
789
|
+
<mj-text padding="12px 12px 24px" color="${t.colors.text.body}" line-height="26px">
|
|
790
|
+
Combine imagery, concise copy, and a single call to action to guide subscribers toward your most important announcement.
|
|
791
|
+
</mj-text>
|
|
792
|
+
<mj-button align="left" border-radius="999px" padding="12px 12px 24px" inner-padding="12px 32px" ${t.buttons.primary}>
|
|
793
|
+
READ THE UPDATE
|
|
794
|
+
</mj-button>
|
|
795
|
+
</mj-column>
|
|
796
|
+
</mj-section>
|
|
797
|
+
</mj-wrapper>`
|
|
798
|
+
},
|
|
799
|
+
presetEmailContentTwoColumnImageArticles: {
|
|
800
|
+
label: "Two Column Image Articles",
|
|
801
|
+
category: n.content,
|
|
802
|
+
getContent: ({ getImageUrl: o }) => `<mj-section padding="16px 0">
|
|
803
|
+
<mj-column border-radius="${t.radii.s}" padding="${t.radii.s}" width="49%" ${t.attrs.bgSection}>
|
|
804
|
+
<mj-image src="${o(E)}" border-radius="${t.radii.s}" padding="0" alt="Article"/>
|
|
805
|
+
<mj-text color="${t.colors.primary}" padding="24px 12px 12px" font-size="12px" font-weight="700" letter-spacing="1px">
|
|
806
|
+
LABEL ONE
|
|
807
|
+
</mj-text>
|
|
808
|
+
<mj-text color="${t.colors.text.heading}" padding="0px 12px" font-size="18px" font-weight="700" line-height="36px">
|
|
809
|
+
First Article
|
|
810
|
+
</mj-text>
|
|
811
|
+
<mj-text color="${t.colors.text.body}" padding="12px 12px 24px 12px" line-height="26px">
|
|
812
|
+
Combine imagery, concise copy, and a single call to action to guide subscribers.
|
|
813
|
+
</mj-text>
|
|
814
|
+
<mj-button border-radius="${t.radii.s}" align="center" inner-padding="12px 32px" padding="12px" ${t.buttons.primary}>
|
|
815
|
+
Read the update
|
|
816
|
+
</mj-button>
|
|
817
|
+
</mj-column>
|
|
818
|
+
<mj-column border-radius="${t.radii.s}" padding="${t.radii.s}" width="2%" ${t.attrs.bgTransparent}></mj-column>
|
|
819
|
+
<mj-column border-radius="${t.radii.s}" padding="${t.radii.s}" width="49%" ${t.attrs.bgSection}>
|
|
820
|
+
<mj-image src="${o(jt)}" border-radius="${t.radii.s}" padding="0" alt="Article"/>
|
|
821
|
+
<mj-text color="${t.colors.primary}" padding="24px 12px 12px" font-size="12px" font-weight="700" letter-spacing="1px">
|
|
822
|
+
LABEL TWO
|
|
823
|
+
</mj-text>
|
|
824
|
+
<mj-text color="${t.colors.text.heading}" padding="0px 12px" font-size="18px" font-weight="700" line-height="36px">
|
|
825
|
+
Second Article
|
|
826
|
+
</mj-text>
|
|
827
|
+
<mj-text color="${t.colors.text.body}" padding="12px 12px 24px 12px" line-height="26px">
|
|
828
|
+
Product update, or a short story that helps readers understand why this message.
|
|
829
|
+
</mj-text>
|
|
830
|
+
<mj-button border-radius="${t.radii.s}" align="center" inner-padding="12px 32px" padding="12px" ${t.buttons.primary}>
|
|
831
|
+
Read the update
|
|
832
|
+
</mj-button>
|
|
833
|
+
</mj-column>
|
|
834
|
+
</mj-section>`
|
|
835
|
+
},
|
|
836
|
+
presetEmailContentThreeColumnImageArticles: {
|
|
837
|
+
label: "Three Column Image Articles",
|
|
838
|
+
category: n.content,
|
|
839
|
+
getContent: ({ getImageUrl: o }) => `<mj-section padding="16px 0">
|
|
840
|
+
<mj-column border-radius="${t.radii.s}" padding="${t.radii.s}" width="32%" ${t.attrs.bgSection}>
|
|
841
|
+
<mj-image src="${o(ut)}" border-radius="${t.radii.s}" padding="0" alt="Article"/>
|
|
842
|
+
<mj-text color="${t.colors.secondary}" padding="12px 12px 8px" font-size="10px" font-weight="700" letter-spacing="1px">
|
|
843
|
+
LABEL ONE
|
|
844
|
+
</mj-text>
|
|
845
|
+
<mj-text color="${t.colors.text.heading}" padding="0px 12px" font-size="16px" font-weight="700" line-height="24px">
|
|
846
|
+
First Article
|
|
847
|
+
</mj-text>
|
|
848
|
+
<mj-text color="${t.colors.text.body}" padding="12px" line-height="24px" font-size="14px">
|
|
849
|
+
Combine imagery, concise copy, and a single call to action.
|
|
850
|
+
</mj-text>
|
|
851
|
+
<mj-button border-radius="${t.radii.l}" align="center" inner-padding="${t.radii.s}" padding="${t.radii.s}" width="100%" ${t.buttons.secondary}>
|
|
852
|
+
OPEN
|
|
853
|
+
</mj-button>
|
|
854
|
+
</mj-column>
|
|
855
|
+
<mj-column border-radius="${t.radii.s}" padding="${t.radii.s}" width="2%" ${t.attrs.bgTransparent}></mj-column>
|
|
856
|
+
<mj-column border-radius="${t.radii.s}" padding="${t.radii.s}" width="32%" ${t.attrs.bgSection}>
|
|
857
|
+
<mj-image src="${o(ht)}" border-radius="${t.radii.s}" padding="0" alt="Article"/>
|
|
858
|
+
<mj-text color="${t.colors.secondary}" padding="12px 12px 8px" font-size="10px" font-weight="700" letter-spacing="1px">
|
|
859
|
+
LABEL TWO
|
|
860
|
+
</mj-text>
|
|
861
|
+
<mj-text color="${t.colors.text.heading}" padding="0px 12px" font-size="16px" font-weight="700" line-height="24px">
|
|
862
|
+
Second Article
|
|
863
|
+
</mj-text>
|
|
864
|
+
<mj-text color="${t.colors.text.body}" padding="12px" line-height="24px" font-size="14px">
|
|
865
|
+
Short story that helps understand the message.
|
|
866
|
+
</mj-text>
|
|
867
|
+
<mj-button border-radius="${t.radii.l}" align="center" inner-padding="${t.radii.s}" padding="${t.radii.s}" width="100%" ${t.buttons.secondary}>
|
|
868
|
+
READ
|
|
869
|
+
</mj-button>
|
|
870
|
+
</mj-column>
|
|
871
|
+
<mj-column border-radius="${t.radii.s}" padding="${t.radii.s}" width="2%" ${t.attrs.bgTransparent}></mj-column>
|
|
872
|
+
<mj-column border-radius="${t.radii.s}" padding="${t.radii.s}" width="32%" ${t.attrs.bgSection}>
|
|
873
|
+
<mj-image src="${o(bt)}" border-radius="${t.radii.s}" padding="0" alt="Article"/>
|
|
874
|
+
<mj-text color="${t.colors.secondary}" padding="12px 12px 8px" font-size="10px" font-weight="700" letter-spacing="1px">
|
|
875
|
+
LABEL THREE
|
|
876
|
+
</mj-text>
|
|
877
|
+
<mj-text color="${t.colors.text.heading}" padding="0px 12px" font-size="16px" font-weight="700" line-height="24px">
|
|
878
|
+
Third Article
|
|
879
|
+
</mj-text>
|
|
880
|
+
<mj-text color="${t.colors.text.body}" padding="12px" line-height="24px" font-size="14px">
|
|
881
|
+
Round out the trio with the last supporting point.
|
|
882
|
+
</mj-text>
|
|
883
|
+
<mj-button border-radius="${t.radii.l}" align="center" inner-padding="${t.radii.s}" padding="${t.radii.s}" width="100%" ${t.buttons.secondary}>
|
|
884
|
+
MORE
|
|
885
|
+
</mj-button>
|
|
886
|
+
</mj-column>
|
|
887
|
+
</mj-section>`
|
|
888
|
+
},
|
|
889
|
+
presetEmailTwoColumnProducts: {
|
|
890
|
+
label: "Two Column Products",
|
|
891
|
+
category: n.content,
|
|
892
|
+
getContent: ({ getImageUrl: o }) => `<mj-section padding="12px" ${t.attrs.bgSection}>
|
|
893
|
+
<mj-column padding="15px" ${t.attrs.bgTransparent}>
|
|
894
|
+
<mj-image src="${o($)}" alt="Product" border-radius="${t.radii.s}" padding="${t.radii.s}"></mj-image>
|
|
895
|
+
<mj-text padding="15px 10px 5px" align="left" line-height="24px" letter-spacing="1px">
|
|
896
|
+
<b style="background-color:${t.colors.secondary};border-radius:${t.radii.l};color:white;padding:6px 12px;font-size:10px;">Category</b>
|
|
897
|
+
</mj-text>
|
|
898
|
+
<mj-text padding="0 10px" align="left" font-size="26px" line-height="34px" color="${t.colors.text.heading}" font-weight="900">
|
|
899
|
+
Product one
|
|
900
|
+
</mj-text>
|
|
901
|
+
<mj-text padding="10px" align="left" font-size="14px" line-height="24px" color="${t.colors.text.body}">
|
|
902
|
+
Use this format for featured products, bundles, or collections.
|
|
903
|
+
</mj-text>
|
|
904
|
+
<mj-text padding="0 10px 5px" align="left" font-size="14px" color="${t.colors.text.body}">FROM</mj-text>
|
|
905
|
+
<mj-text padding="0 10px 20px" align="left" font-size="28px" line-height="32px" color="${t.colors.secondary}" font-weight="700">
|
|
906
|
+
$129 <s style="font-size:16px;font-weight:300;color:${t.colors.text.body}">$289</s>
|
|
907
|
+
</mj-text>
|
|
908
|
+
<mj-button background-color="${t.colors.text.heading}" color="#ffffff" font-size="14px" font-weight="700" letter-spacing="1px" padding="0 10px" width="100%" border-radius="${t.radii.s}">
|
|
909
|
+
Buy now
|
|
910
|
+
</mj-button>
|
|
911
|
+
</mj-column>
|
|
912
|
+
<mj-column padding="15px" ${t.attrs.bgTransparent}>
|
|
913
|
+
<mj-image src="${o(H)}" alt="Product" border-radius="${t.radii.s}" padding="${t.radii.s}"></mj-image>
|
|
914
|
+
<mj-text padding="15px 10px 5px" align="left" line-height="24px" letter-spacing="1px">
|
|
915
|
+
<b style="background-color:${t.colors.secondary};border-radius:${t.radii.l};color:white;padding:6px 12px;font-size:10px;">Category</b>
|
|
916
|
+
</mj-text>
|
|
917
|
+
<mj-text padding="0 10px" align="left" font-size="26px" line-height="34px" color="${t.colors.text.heading}" font-weight="900">
|
|
918
|
+
Product two
|
|
919
|
+
</mj-text>
|
|
920
|
+
<mj-text padding="10px" align="left" font-size="14px" line-height="24px" color="${t.colors.text.body}">
|
|
921
|
+
The second card mirrors the first so you can build compact sections.
|
|
922
|
+
</mj-text>
|
|
923
|
+
<mj-text padding="0 10px 5px" align="left" font-size="14px" color="${t.colors.text.body}">FROM</mj-text>
|
|
924
|
+
<mj-text padding="0 10px 20px" align="left" font-size="28px" line-height="32px" color="${t.colors.secondary}" font-weight="700">
|
|
925
|
+
$89 <s style="font-size:16px;font-weight:300;color:${t.colors.text.body}">$189</s>
|
|
926
|
+
</mj-text>
|
|
927
|
+
<mj-button background-color="${t.colors.text.heading}" color="#ffffff" font-size="14px" font-weight="700" letter-spacing="1px" padding="0 10px" width="100%" border-radius="${t.radii.s}">
|
|
928
|
+
Buy now
|
|
929
|
+
</mj-button>
|
|
930
|
+
</mj-column>
|
|
931
|
+
</mj-section>`
|
|
932
|
+
},
|
|
933
|
+
presetEmailThreePricingCards: {
|
|
934
|
+
label: "Three Pricing Cards",
|
|
935
|
+
category: n.content,
|
|
936
|
+
getContent: () => `<mj-section padding="24px 0" ${t.attrs.bgTransparent}>
|
|
937
|
+
<mj-column width="32%" border-radius="4px" padding="10px" ${t.attrs.bgSection}>
|
|
938
|
+
<mj-text padding="20px 0 10px 0" align="center" color="${t.colors.secondary}" font-size="16px">Starter pass</mj-text>
|
|
939
|
+
<mj-text padding="10px 0 20px 0" align="center" font-size="36px" font-weight="700">$49</mj-text>
|
|
940
|
+
<mj-divider border-style="dashed" border-width="4px" border-color="#47556955"></mj-divider>
|
|
941
|
+
<mj-text padding="15px 0" align="center" line-height="24px" font-size="12px">
|
|
942
|
+
Workshops<br/>
|
|
943
|
+
Keynotes<br/>
|
|
944
|
+
Community access
|
|
945
|
+
</mj-text>
|
|
946
|
+
<mj-button width="100%" font-size="12px" padding="10px 0" border-radius="${t.radii.s}" ${t.buttons.secondary}>Purchase</mj-button>
|
|
947
|
+
</mj-column>
|
|
948
|
+
<mj-column padding="${t.radii.s}" width="2%" ${t.attrs.bgTransparent}></mj-column>
|
|
949
|
+
<mj-column width="32%" border-radius="4px" padding="10px" ${t.attrs.bgSection}>
|
|
950
|
+
<mj-text padding="20px 0 10px 0" align="center" color="${t.colors.secondary}" font-size="16px">Full pass</mj-text>
|
|
951
|
+
<mj-text padding="10px 0 20px 0" align="center" font-size="36px" font-weight="700">$149</mj-text>
|
|
952
|
+
<mj-divider border-style="dashed" border-width="4px" border-color="#47556955"></mj-divider>
|
|
953
|
+
<mj-text padding="15px 0" align="center" line-height="24px" font-size="12px">
|
|
954
|
+
All sessions<br/>
|
|
955
|
+
Workshops<br/>
|
|
956
|
+
Networking events
|
|
957
|
+
</mj-text>
|
|
958
|
+
<mj-button width="100%" font-size="12px" padding="10px 0" border-radius="${t.radii.s}" ${t.buttons.secondary}>Purchase</mj-button>
|
|
959
|
+
</mj-column>
|
|
960
|
+
<mj-column padding="${t.radii.s}" width="2%" ${t.attrs.bgTransparent}></mj-column>
|
|
961
|
+
<mj-column width="32%" border-radius="4px" padding="10px" ${t.attrs.bgSection}>
|
|
962
|
+
<mj-text padding="20px 0 10px 0" align="center" color="${t.colors.secondary}" font-size="16px">VIP pass</mj-text>
|
|
963
|
+
<mj-text padding="10px 0 20px 0" align="center" font-size="36px" font-weight="700">$249</mj-text>
|
|
964
|
+
<mj-divider border-style="dashed" border-width="4px" border-color="#47556955"></mj-divider>
|
|
965
|
+
<mj-text padding="15px 0" align="center" line-height="24px" font-size="12px">
|
|
966
|
+
Priority seating<br/>
|
|
967
|
+
Private sessions<br/>
|
|
968
|
+
Speaker lounge
|
|
969
|
+
</mj-text>
|
|
970
|
+
<mj-button width="100%" font-size="12px" padding="10px 0" border-radius="${t.radii.s}" ${t.buttons.secondary}>Purchase</mj-button>
|
|
971
|
+
</mj-column>
|
|
972
|
+
</mj-section>`
|
|
973
|
+
},
|
|
974
|
+
presetEmailGridGallery: {
|
|
975
|
+
label: "Grid Gallery",
|
|
976
|
+
category: n.gallery,
|
|
977
|
+
getContent: ({ getImageUrl: o }) => `<mj-wrapper>
|
|
978
|
+
<mj-section padding="16px 24px" border-radius="${t.radii.s} ${t.radii.s} 0 0" ${t.attrs.bgSection}>
|
|
979
|
+
<mj-column>
|
|
980
|
+
<mj-text color="${t.colors.text.heading}" align="center" font-size="24px" line-height="35px" letter-spacing="1px">
|
|
981
|
+
Grid Gallery
|
|
982
|
+
</mj-text>
|
|
983
|
+
</mj-column>
|
|
984
|
+
</mj-section>
|
|
985
|
+
<mj-section padding="0 24px" ${t.attrs.bgSection}>
|
|
986
|
+
<mj-column width="33.33%" ${t.attrs.bgTransparent}><mj-image src="${o(y)}" alt="Image" padding="5px" border-radius="${t.radii.s}"></mj-image></mj-column>
|
|
987
|
+
<mj-column width="33.33%" ${t.attrs.bgTransparent}><mj-image src="${o(B)}" alt="Image" padding="5px" border-radius="${t.radii.s}"></mj-image></mj-column>
|
|
988
|
+
<mj-column width="33.33%" ${t.attrs.bgTransparent}><mj-image src="${o(S)}" alt="Image" padding="5px" border-radius="${t.radii.s}"></mj-image></mj-column>
|
|
989
|
+
</mj-section>
|
|
990
|
+
<mj-section padding="0 24px" ${t.attrs.bgSection}>
|
|
991
|
+
<mj-column width="33.33%" ${t.attrs.bgTransparent}><mj-image src="${o(v)}" alt="Image" padding="5px" border-radius="${t.radii.s}"></mj-image></mj-column>
|
|
992
|
+
<mj-column width="33.33%" ${t.attrs.bgTransparent}><mj-image src="${o(z)}" alt="Image" padding="5px" border-radius="${t.radii.s}"></mj-image></mj-column>
|
|
993
|
+
<mj-column width="33.33%" ${t.attrs.bgTransparent}><mj-image src="${o(P)}" alt="Image" padding="5px" border-radius="${t.radii.s}"></mj-image></mj-column>
|
|
994
|
+
</mj-section>
|
|
995
|
+
<mj-section padding="0px 24px 8px 24px" border-radius="0 0 ${t.radii.s} ${t.radii.s}" ${t.attrs.bgSection}>
|
|
996
|
+
<mj-column>
|
|
997
|
+
<mj-spacer/>
|
|
998
|
+
</mj-column>
|
|
999
|
+
</mj-section>
|
|
1000
|
+
</mj-wrapper>`
|
|
1001
|
+
},
|
|
1002
|
+
presetEmailSplitImageGallery: {
|
|
1003
|
+
label: "Split Image Gallery",
|
|
1004
|
+
category: n.gallery,
|
|
1005
|
+
getContent: ({ getImageUrl: o }) => `<mj-wrapper>
|
|
1006
|
+
<mj-section padding="24px" border-radius="${t.radii.s} ${t.radii.s} 0 0" ${t.attrs.bgSection}>
|
|
1007
|
+
<mj-column width="66.66%" ${t.attrs.bgTransparent}>
|
|
1008
|
+
<mj-image src="${o(y)}" alt="Image" padding="5px" border-radius="${t.radii.s}"></mj-image>
|
|
1009
|
+
</mj-column>
|
|
1010
|
+
<mj-column width="33.33%" ${t.attrs.bgTransparent}>
|
|
1011
|
+
<mj-image src="${o(v)}" alt="Image" padding="5px" border-radius="${t.radii.s}"></mj-image>
|
|
1012
|
+
<mj-image src="${o(z)}" alt="Image" padding="5px" border-radius="${t.radii.s}"></mj-image>
|
|
1013
|
+
</mj-column>
|
|
1014
|
+
</mj-section>
|
|
1015
|
+
<mj-section padding="0 24px 8px 24px" border-radius="0 0 ${t.radii.s} ${t.radii.s}" ${t.attrs.bgSection}>
|
|
1016
|
+
<mj-column ${t.attrs.bgTransparent}>
|
|
1017
|
+
<mj-text padding="0 0 12px 0" line-height="30px" align="center" font-size="16px" color="${t.colors.text.body}">
|
|
1018
|
+
Use this section to set the tone, explain what changed, or frame the key message into product details and supporting content.
|
|
1019
|
+
</mj-text>
|
|
1020
|
+
<mj-button padding="12px 12px 24px" inner-padding="12px 48px" border-radius="${t.radii.l}" ${t.buttons.primary}>
|
|
1021
|
+
VIEW MORE
|
|
1022
|
+
</mj-button>
|
|
1023
|
+
</mj-column>
|
|
1024
|
+
</mj-section>
|
|
1025
|
+
</mj-wrapper>`
|
|
1026
|
+
},
|
|
1027
|
+
presetEmailMasonryGallery: {
|
|
1028
|
+
label: "Masonry Gallery",
|
|
1029
|
+
category: n.gallery,
|
|
1030
|
+
getContent: ({ getImageUrl: o }) => `<mj-wrapper>
|
|
1031
|
+
<mj-section padding="16px 24px" border-radius="${t.radii.s} ${t.radii.s} 0 0" ${t.attrs.bgSection}>
|
|
1032
|
+
<mj-column>
|
|
1033
|
+
<mj-text color="${t.colors.primary}" align="center" font-size="24px" line-height="35px" letter-spacing="1px">
|
|
1034
|
+
Masonry Gallery
|
|
1035
|
+
</mj-text>
|
|
1036
|
+
<mj-text padding="0 0 12px 0" line-height="30px" align="center" font-size="16px" color="${t.colors.text.body}">
|
|
1037
|
+
Use this section to set the tone, explain what changed, or frame the key message into product details and supporting content.
|
|
1038
|
+
</mj-text>
|
|
1039
|
+
</mj-column>
|
|
1040
|
+
</mj-section>
|
|
1041
|
+
<mj-section padding="0" ${t.attrs.bgSection}>
|
|
1042
|
+
<mj-column width="33.33%" ${t.attrs.bgTransparent}>
|
|
1043
|
+
<mj-image src="${o(y)}" alt="Image" padding="0"></mj-image>
|
|
1044
|
+
<mj-image src="${o(B)}" alt="Image" padding="0"></mj-image>
|
|
1045
|
+
</mj-column>
|
|
1046
|
+
<mj-column width="66.66%" ${t.attrs.bgTransparent}>
|
|
1047
|
+
<mj-image src="${o(S)}" alt="Image" padding="0"></mj-image>
|
|
1048
|
+
</mj-column>
|
|
1049
|
+
</mj-section>
|
|
1050
|
+
<mj-section padding="0" ${t.attrs.bgSection}>
|
|
1051
|
+
<mj-column width="33.33%" ${t.attrs.bgTransparent}><mj-image src="${o(v)}" alt="Image" padding="0"></mj-image></mj-column>
|
|
1052
|
+
<mj-column width="33.33%" ${t.attrs.bgTransparent}><mj-image src="${o(z)}" alt="Image" padding="0"></mj-image></mj-column>
|
|
1053
|
+
<mj-column width="33.33%" ${t.attrs.bgTransparent}><mj-image src="${o(P)}" alt="Image" padding="0"></mj-image></mj-column>
|
|
1054
|
+
</mj-section>
|
|
1055
|
+
<mj-section padding="0 24px 8px" border-radius="0 0 ${t.radii.s} ${t.radii.s}" ${t.attrs.bgSection}>
|
|
1056
|
+
<mj-column ${t.attrs.bgTransparent}>
|
|
1057
|
+
<mj-button padding="36px 24px 12px" inner-padding="12px 48px" border-radius="${t.radii.l}" ${t.buttons.primary}>
|
|
1058
|
+
VIEW MORE
|
|
1059
|
+
</mj-button>
|
|
1060
|
+
</mj-column>
|
|
1061
|
+
</mj-section>
|
|
1062
|
+
</mj-wrapper>`
|
|
1063
|
+
},
|
|
1064
|
+
presetEmailCtaPromoBanner: {
|
|
1065
|
+
label: "Promo Banner",
|
|
1066
|
+
category: n.cta,
|
|
1067
|
+
getContent: () => `<mj-wrapper>
|
|
1068
|
+
<mj-section padding="32px 24px" background-color="${t.colors.secondary}" border-radius="${t.radii.m}">
|
|
1069
|
+
<mj-column vertical-align="middle" width="65%" ${t.attrs.bgTransparent}>
|
|
1070
|
+
<mj-text padding="0 0 8px 0" color="#ffffff" font-size="26px" font-weight="700" line-height="34px">
|
|
1071
|
+
Save your strongest CTA
|
|
1072
|
+
</mj-text>
|
|
1073
|
+
<mj-text padding="0px 0px 12px 0px" color="#ffffffde" font-size="15px" line-height="23px">
|
|
1074
|
+
Great for a launch push, limited-time campaign, or any section.
|
|
1075
|
+
</mj-text>
|
|
1076
|
+
</mj-column>
|
|
1077
|
+
<mj-column vertical-align="middle" width="35%" ${t.attrs.bgTransparent}>
|
|
1078
|
+
<mj-button align="right" background-color="#ffffff" color="${t.colors.secondary}" border-radius="${t.radii.l}" font-weight="700" inner-padding="14px 38px" padding="0px">
|
|
1079
|
+
CLAIM OFFER
|
|
1080
|
+
</mj-button>
|
|
1081
|
+
</mj-column>
|
|
1082
|
+
</mj-section>
|
|
1083
|
+
</mj-wrapper>`
|
|
1084
|
+
},
|
|
1085
|
+
presetEmailCtaOfferBanner: {
|
|
1086
|
+
label: "Offer Banner",
|
|
1087
|
+
category: n.cta,
|
|
1088
|
+
getContent: ({ getImageUrl: o }) => `<mj-wrapper>
|
|
1089
|
+
<mj-section padding="64px 32px" background-color="${t.colors.primary}" border-radius="${t.radii.m}"
|
|
1090
|
+
background-url="${o(D)}" background-size="cover" background-repeat="no-repeat" border="2px solid #e59fc9"
|
|
1091
|
+
>
|
|
1092
|
+
<mj-column ${t.attrs.bgTransparent}>
|
|
1093
|
+
<mj-text padding="0px 0px 8px 0px" font-weight="700" letter-spacing="1px" align="center">
|
|
1094
|
+
<b style="background-color:${t.colors.primary};color:white;padding:6px 12px;border-radius:${t.radii.m};font-size:8px;">
|
|
1095
|
+
LIMITED-TIME CODE
|
|
1096
|
+
</b>
|
|
1097
|
+
</mj-text>
|
|
1098
|
+
<mj-text padding="12px 0" color="#8c3469" font-size="20px" line-height="26px" align="center">
|
|
1099
|
+
Use <span style="font-weight:700;">WELCOME20</span> to unlock a launch offer before Friday.
|
|
1100
|
+
</mj-text>
|
|
1101
|
+
<mj-button background-color="#ffffff" color="${t.colors.primary}" border-radius="${t.radii.l}" inner-padding="12px 38px" padding="20px 0 0 0" font-weight="700" font-size="18px">
|
|
1102
|
+
REDEEM NOW
|
|
1103
|
+
</mj-button>
|
|
1104
|
+
</mj-column>
|
|
1105
|
+
</mj-section>
|
|
1106
|
+
</mj-wrapper>`
|
|
1107
|
+
},
|
|
1108
|
+
presetEmailThreeTeamProfiles: {
|
|
1109
|
+
label: "Three Team Profiles",
|
|
1110
|
+
category: n.people,
|
|
1111
|
+
getContent: ({ getImageUrl: o }) => `<mj-wrapper>
|
|
1112
|
+
<mj-section padding="24px 32px 12px" border-radius="${t.radii.m} ${t.radii.m} 0 0" ${t.attrs.bgSection}>
|
|
1113
|
+
<mj-column ${t.attrs.bgTransparent}>
|
|
1114
|
+
<mj-text padding="12px 0 0 " color="#0f172977" font-size="22px">Event speakers</mj-text>
|
|
1115
|
+
<mj-text padding="12px 0 10px 0" font-size="42px" line-height="50px" font-weight="700" color="${t.colors.text.heading}">
|
|
1116
|
+
Meet our speakers
|
|
1117
|
+
</mj-text>
|
|
1118
|
+
<mj-divider border-width="1px" border-color="#0f172933" padding="12px 0"></mj-divider>
|
|
1119
|
+
</mj-column>
|
|
1120
|
+
</mj-section>
|
|
1121
|
+
<mj-section padding="20px 12px 40px" border-radius="0 0 ${t.radii.m} ${t.radii.m}" ${t.attrs.bgSection}>
|
|
1122
|
+
<mj-column width="33.33%" ${t.attrs.bgTransparent}>
|
|
1123
|
+
<mj-image src="${o(C)}" border-radius="50%" alt="Speaker"></mj-image>
|
|
1124
|
+
<mj-text align="center" font-weight="700" font-size="16px" padding-top="10px" color="${t.colors.text.heading}">James Doe</mj-text>
|
|
1125
|
+
<mj-text align="center" font-size="12px" color="${t.colors.text.body}">Advertiser</mj-text>
|
|
1126
|
+
</mj-column>
|
|
1127
|
+
<mj-column width="33.33%" ${t.attrs.bgTransparent}>
|
|
1128
|
+
<mj-image src="${o(G)}" border-radius="50%" alt="Speaker"></mj-image>
|
|
1129
|
+
<mj-text align="center" font-weight="700" font-size="16px" padding-top="10px" color="${t.colors.text.heading}">Mia Dolce</mj-text>
|
|
1130
|
+
<mj-text align="center" font-size="12px" color="${t.colors.text.body}">UX Designer</mj-text>
|
|
1131
|
+
</mj-column>
|
|
1132
|
+
<mj-column width="33.33%" ${t.attrs.bgTransparent}>
|
|
1133
|
+
<mj-image src="${o(wt)}" border-radius="50%" alt="Speaker"></mj-image>
|
|
1134
|
+
<mj-text align="center" font-weight="700" font-size="16px" padding-top="10px" color="${t.colors.text.heading}">Sophia Evans</mj-text>
|
|
1135
|
+
<mj-text align="center" font-size="12px" color="${t.colors.text.body}">Designer</mj-text>
|
|
1136
|
+
</mj-column>
|
|
1137
|
+
</mj-section>
|
|
1138
|
+
</mj-wrapper>`
|
|
1139
|
+
},
|
|
1140
|
+
presetEmailTeamAlternatingTeamCards: {
|
|
1141
|
+
label: "Alternating Team Cards",
|
|
1142
|
+
category: n.people,
|
|
1143
|
+
getContent: ({ getImageUrl: o }) => `<mj-wrapper gap="20px" padding="20px 20px 40px" ${t.attrs.bgSection}>
|
|
1144
|
+
<mj-section padding="0" ${t.attrs.bgTransparent}>
|
|
1145
|
+
<mj-column ${t.attrs.bgTransparent}>
|
|
1146
|
+
<mj-text align="center" font-size="26px" line-height="36px" font-weight="600" letter-spacing="1px">
|
|
1147
|
+
Our experts
|
|
1148
|
+
</mj-text>
|
|
1149
|
+
</mj-column>
|
|
1150
|
+
</mj-section>
|
|
1151
|
+
<mj-section padding="0" background-color="${t.colors.text.heading}">
|
|
1152
|
+
<mj-column width="40%" padding="0">
|
|
1153
|
+
<mj-image src="${o(C)}" alt="Expert" padding="0"></mj-image>
|
|
1154
|
+
</mj-column>
|
|
1155
|
+
<mj-column vertical-align="middle" width="60%" padding="20px" ${t.attrs.bgTransparent}>
|
|
1156
|
+
<mj-text padding="0 0 5px 0" align="left" font-size="18px" line-height="28px" font-weight="600" letter-spacing="1px" color="#ffffff">
|
|
1157
|
+
James Mitchell
|
|
1158
|
+
</mj-text>
|
|
1159
|
+
<mj-text padding="0 0 5px 0" align="left" font-size="12px" line-height="22px" font-weight="600" letter-spacing="1px" color="#ffffff">
|
|
1160
|
+
Founder & Lead Designer
|
|
1161
|
+
</mj-text>
|
|
1162
|
+
<mj-text padding="0 0 5px 0" align="left" font-size="14px" line-height="24px" color="#ffffffad">
|
|
1163
|
+
Pair portrait photography with a short bio and social row for studio intros, speaker features, or team highlights.
|
|
1164
|
+
</mj-text>
|
|
1165
|
+
<mj-social align="left" icon-size="25px" mode="horizontal" padding="10px 0 0 0">
|
|
1166
|
+
<mj-social-element name="facebook" ${t.attrs.bgTransparent}></mj-social-element>
|
|
1167
|
+
<mj-social-element name="linkedin" ${t.attrs.bgTransparent}></mj-social-element>
|
|
1168
|
+
<mj-social-element name="instagram" ${t.attrs.bgTransparent}></mj-social-element>
|
|
1169
|
+
</mj-social>
|
|
1170
|
+
</mj-column>
|
|
1171
|
+
</mj-section>
|
|
1172
|
+
<mj-section padding="0" background-color="${t.colors.text.heading}">
|
|
1173
|
+
<mj-column width="60%" padding="20px" ${t.attrs.bgTransparent}>
|
|
1174
|
+
<mj-text padding="0 0 5px 0" align="left" font-size="18px" line-height="28px" font-weight="600" letter-spacing="1px" color="#ffffff">
|
|
1175
|
+
Sophia White
|
|
1176
|
+
</mj-text>
|
|
1177
|
+
<mj-text padding="0 0 5px 0" align="left" font-size="12px" line-height="22px" font-weight="600" letter-spacing="1px" color="#ffffff">
|
|
1178
|
+
Senior Interior Architect
|
|
1179
|
+
</mj-text>
|
|
1180
|
+
<mj-text padding="0 0 5px 0" align="left" font-size="14px" line-height="24px" color="#ffffffad">
|
|
1181
|
+
The alternating second row keeps the layout dynamic while still using the same reusable content pattern.
|
|
1182
|
+
</mj-text>
|
|
1183
|
+
<mj-social align="left" icon-size="25px" mode="horizontal" padding="10px 0 0 0">
|
|
1184
|
+
<mj-social-element name="facebook" ${t.attrs.bgTransparent}></mj-social-element>
|
|
1185
|
+
<mj-social-element name="linkedin" ${t.attrs.bgTransparent}></mj-social-element>
|
|
1186
|
+
<mj-social-element name="instagram" ${t.attrs.bgTransparent}></mj-social-element>
|
|
1187
|
+
</mj-social>
|
|
1188
|
+
</mj-column>
|
|
1189
|
+
<mj-column width="40%" padding="0">
|
|
1190
|
+
<mj-image src="${o(G)}" alt="Expert" padding="0"></mj-image>
|
|
1191
|
+
</mj-column>
|
|
1192
|
+
</mj-section>
|
|
1193
|
+
</mj-wrapper>`
|
|
1194
|
+
},
|
|
1195
|
+
presetEmailTestimonialsTwoRows: {
|
|
1196
|
+
label: "Testimonials Two Rows",
|
|
1197
|
+
category: n.people,
|
|
1198
|
+
getContent: ({ getImageUrl: o }) => `<mj-wrapper>
|
|
1199
|
+
<mj-section padding="20px 0" ${t.attrs.bgSection}>
|
|
1200
|
+
<mj-column ${t.attrs.bgTransparent}>
|
|
1201
|
+
<mj-text align="center" font-size="26px" line-height="36px" font-weight="600" letter-spacing="1px">
|
|
1202
|
+
Client testimonials
|
|
1203
|
+
</mj-text>
|
|
1204
|
+
</mj-column>
|
|
1205
|
+
</mj-section>
|
|
1206
|
+
<mj-section padding="20px 24px 0px 24px" ${t.attrs.bgSection}>
|
|
1207
|
+
<mj-column background-color="#4755690f" border-radius="${t.radii.s}">
|
|
1208
|
+
<mj-text padding="25px" font-size="16px" line-height="24px" font-style="italic" letter-spacing="1px" color="${t.colors.text.body}" align="left">
|
|
1209
|
+
“This layout is perfect for highlighting short testimonials without taking over the whole campaign.”
|
|
1210
|
+
</mj-text>
|
|
1211
|
+
</mj-column>
|
|
1212
|
+
</mj-section>
|
|
1213
|
+
<mj-section padding="0" ${t.attrs.bgSection}>
|
|
1214
|
+
<mj-column vertical-align="middle" width="20%" ${t.attrs.bgTransparent}>
|
|
1215
|
+
<mj-image src="${o(yt)}" alt="Customer" border-radius="50%"></mj-image>
|
|
1216
|
+
</mj-column>
|
|
1217
|
+
<mj-column vertical-align="middle" ${t.attrs.bgTransparent} width="80%" padding="10px 10px 10px 15px">
|
|
1218
|
+
<mj-text padding="0" align="left" font-size="16px" line-height="26px" font-weight="600" letter-spacing="1px" color="${t.colors.text.heading}">Marcus Rivera</mj-text>
|
|
1219
|
+
<mj-text padding="0" align="left" font-size="12px" line-height="22px" font-weight="600" letter-spacing="1px" color="${t.colors.text.body}">Architect</mj-text>
|
|
1220
|
+
</mj-column>
|
|
1221
|
+
</mj-section>
|
|
1222
|
+
<mj-section padding="0" ${t.attrs.bgSection}>
|
|
1223
|
+
<mj-column ${t.attrs.bgTransparent}>
|
|
1224
|
+
<mj-divider border-width="1px" border-style="solid" border-color="#4755692e"></mj-divider>
|
|
1225
|
+
</mj-column>
|
|
1226
|
+
</mj-section>
|
|
1227
|
+
<mj-section padding="20px 24px 0px 24px" ${t.attrs.bgSection}>
|
|
1228
|
+
<mj-column background-color="#4755690f" border-radius="${t.radii.s}">
|
|
1229
|
+
<mj-text padding="25px" font-size="16px" line-height="24px" font-style="italic" letter-spacing="1px" color="${t.colors.text.body}" align="right">
|
|
1230
|
+
“Use it for customer proof, partner quotes, or event feedback where symmetry matters.”
|
|
1231
|
+
</mj-text>
|
|
1232
|
+
</mj-column>
|
|
1233
|
+
</mj-section>
|
|
1234
|
+
<mj-section padding="0 0 30px" ${t.attrs.bgSection}>
|
|
1235
|
+
<mj-column vertical-align="middle" ${t.attrs.bgTransparent} width="80%" padding="10px 15px 10px 10px">
|
|
1236
|
+
<mj-text padding="0" align="right" font-size="16px" line-height="26px" font-weight="600" letter-spacing="1px" color="${t.colors.text.heading}">Elena Kowalski</mj-text>
|
|
1237
|
+
<mj-text padding="0" align="right" font-size="12px" line-height="22px" font-weight="600" letter-spacing="1px" color="${t.colors.text.body}">Project Manager</mj-text>
|
|
1238
|
+
</mj-column>
|
|
1239
|
+
<mj-column vertical-align="middle" width="20%" ${t.attrs.bgTransparent}>
|
|
1240
|
+
<mj-image src="${o($t)}" alt="Customer" border-radius="50%"></mj-image>
|
|
1241
|
+
</mj-column>
|
|
1242
|
+
</mj-section>
|
|
1243
|
+
</mj-wrapper>`
|
|
1244
|
+
},
|
|
1245
|
+
presetEmailFooterSocial: {
|
|
1246
|
+
label: "Social Footer",
|
|
1247
|
+
category: n.footer,
|
|
1248
|
+
getContent: () => `<mj-section background-color="${t.colors.text.heading}" padding="40px 24px">
|
|
1249
|
+
<mj-column ${t.attrs.bgTransparent}>
|
|
1250
|
+
<mj-text align="center" color="#ffffff" font-size="18px" font-weight="700" padding="0 0 12px">Stay in the loop</mj-text>
|
|
1251
|
+
<mj-social font-size="12px" icon-size="20px" mode="horizontal" padding="0" inner-padding="7px">
|
|
1252
|
+
<mj-social-element name="facebook" ${t.attrs.bgTransparent}></mj-social-element>
|
|
1253
|
+
<mj-social-element name="linkedin" ${t.attrs.bgTransparent}></mj-social-element>
|
|
1254
|
+
<mj-social-element name="instagram" ${t.attrs.bgTransparent}></mj-social-element>
|
|
1255
|
+
</mj-social>
|
|
1256
|
+
<mj-text padding="12px 0 0 0" align="center" color="#ffffff88" font-size="12px" line-height="18px">
|
|
1257
|
+
123 Example Street, Suite 400, <br/>
|
|
1258
|
+
San Francisco, CA
|
|
1259
|
+
</mj-text>
|
|
1260
|
+
<mj-text padding="12px 0 0" align="center" color="#47556994" font-size="12px" line-height="20px">
|
|
1261
|
+
<a href="#" style="color:${t.colors.secondary};text-decoration:none;font-weight:700;">Unsubscribe</a>
|
|
1262
|
+
</mj-text>
|
|
1263
|
+
</mj-column>
|
|
1264
|
+
</mj-section>`
|
|
1265
|
+
},
|
|
1266
|
+
presetEmailTwoColumnFooter: {
|
|
1267
|
+
label: "Two Column Footer",
|
|
1268
|
+
category: n.footer,
|
|
1269
|
+
getContent: () => `<mj-wrapper padding="0">
|
|
1270
|
+
<mj-section padding="32px 24px 0px 24px" ${t.attrs.bgSection}>
|
|
1271
|
+
<mj-column>
|
|
1272
|
+
<mj-text align="left" font-size="18px" font-weight="700" color="${t.colors.text.heading}" padding="10px 0px 10px 0px">Follow Us
|
|
1273
|
+
</mj-text>
|
|
1274
|
+
<mj-text padding="0 0 20px" font-size="12px" line-height="22px" color="${t.colors.text.body}">Follow us on social for more updates</mj-text>
|
|
1275
|
+
<mj-social align="left" font-size="12px" icon-size="18px" mode="horizontal" padding="0" inner-padding="5px">
|
|
1276
|
+
<mj-social-element name="facebook" background-color="${t.colors.text.heading}"></mj-social-element>
|
|
1277
|
+
<mj-social-element name="linkedin" background-color="${t.colors.text.heading}"></mj-social-element>
|
|
1278
|
+
<mj-social-element name="instagram" background-color="${t.colors.text.heading}"></mj-social-element>
|
|
1279
|
+
</mj-social>
|
|
1280
|
+
</mj-column>
|
|
1281
|
+
<mj-column>
|
|
1282
|
+
<mj-text padding="10px 0px" align="left" font-size="18px" font-weight="700" color="${t.colors.text.heading}">Contact Us</mj-text>
|
|
1283
|
+
<mj-text padding="0 0 20px" font-size="12px" line-height="22px" color="${t.colors.text.body}">
|
|
1284
|
+
245 Design Avenue, Suite 100<br/>
|
|
1285
|
+
San Francisco, CA 94102<br/><a href="tel:+1-555-321-9870"
|
|
1286
|
+
style="color:${t.colors.secondary};font-weight:700;">+1-555-321-9870</a></mj-text>
|
|
1287
|
+
</mj-column>
|
|
1288
|
+
</mj-section>
|
|
1289
|
+
<mj-section ${t.attrs.bgSection} padding="12px 24px 24px">
|
|
1290
|
+
<mj-column width="100%">
|
|
1291
|
+
<mj-divider border-color="#e2e8f0" border-width="1px" padding="0 0 16px 0"></mj-divider>
|
|
1292
|
+
<mj-text padding="0" align="center" color="#47556994" font-size="12px" line-height="20px">You are receiving this
|
|
1293
|
+
email because you subscribed from our site. <a href="#" style="color:${t.colors.secondary};font-weight:700;text-decoration:none;">Unsubscribe</a></mj-text>
|
|
1294
|
+
</mj-column>
|
|
1295
|
+
</mj-section>
|
|
1296
|
+
</mj-wrapper>`
|
|
1297
|
+
},
|
|
1298
|
+
presetEmailThreeColumnFooter: {
|
|
1299
|
+
label: "Three Column Footer",
|
|
1300
|
+
category: n.footer,
|
|
1301
|
+
getContent: () => `<mj-section padding="30px 24px" background-color="${t.colors.text.heading}" full-width="full-width">
|
|
1302
|
+
<mj-column width="30%" padding="0 0 20px" ${t.attrs.bgTransparent}>
|
|
1303
|
+
<mj-text padding="0 0 15px" font-size="14px" font-weight="700" line-height="24px" color="#ffffff">About us</mj-text>
|
|
1304
|
+
<mj-text padding="0" font-size="12px" color="#ffffff99" line-height="22px">
|
|
1305
|
+
<a style="color:#ffffff99;">About us</a><br/>
|
|
1306
|
+
<a style="color:#ffffff99;">Contact us</a><br/>
|
|
1307
|
+
<a style="color:#ffffff99;">Team</a><br/>
|
|
1308
|
+
<a style="color:#ffffff99;">Blog</a>
|
|
1309
|
+
</mj-text>
|
|
1310
|
+
</mj-column>
|
|
1311
|
+
<mj-column width="30%" padding="0 0 20px" ${t.attrs.bgTransparent}>
|
|
1312
|
+
<mj-text padding="0 0 15px" font-size="14px" font-weight="700" line-height="24px" color="#ffffff">Links
|
|
1313
|
+
</mj-text>
|
|
1314
|
+
<mj-text padding="0" font-size="12px" color="#ffffff99" line-height="22px">
|
|
1315
|
+
<a style="color:#ffffff99;">Shop</a><br/>
|
|
1316
|
+
<a style="color:#ffffff99;">Terms</a><br/>
|
|
1317
|
+
<a style="color:#ffffff99;">Privacy</a><br/>
|
|
1318
|
+
<a style="color:#ffffff99;">Reviews</a>
|
|
1319
|
+
</mj-text>
|
|
1320
|
+
</mj-column>
|
|
1321
|
+
<mj-column width="40%" ${t.attrs.bgTransparent}>
|
|
1322
|
+
<mj-text padding="0 0 15px" font-size="14px" font-weight="700" line-height="24px" color="#ffffff">Our location</mj-text>
|
|
1323
|
+
<mj-text padding="0 0 20px" font-size="12px" line-height="22px" color="#ffffff">
|
|
1324
|
+
245 Design Avenue, Suite 100<br/>
|
|
1325
|
+
San Francisco, CA 94102<br/>
|
|
1326
|
+
<a href="tel:+1-555-321-9870" style="color:#ffffff99;">+1-555-321-9870</a>
|
|
1327
|
+
</mj-text>
|
|
1328
|
+
<mj-text padding="0" font-size="14px" font-weight="700" line-height="24px" color="#ffffff">Socials</mj-text>
|
|
1329
|
+
<mj-social font-size="12px" icon-size="24px" mode="horizontal" padding="0" align="left">
|
|
1330
|
+
<mj-social-element name="facebook" ${t.attrs.bgTransparent}></mj-social-element>
|
|
1331
|
+
<mj-social-element name="linkedin" ${t.attrs.bgTransparent}></mj-social-element>
|
|
1332
|
+
<mj-social-element name="instagram" ${t.attrs.bgTransparent}></mj-social-element>
|
|
1333
|
+
<mj-social-element name="youtube" ${t.attrs.bgTransparent}></mj-social-element>
|
|
1334
|
+
</mj-social>
|
|
1335
|
+
</mj-column>
|
|
1336
|
+
</mj-section>`
|
|
1337
|
+
}
|
|
1338
|
+
};
|
|
1339
|
+
}, zt = ({
|
|
1340
|
+
library: e,
|
|
1341
|
+
options: i
|
|
1342
|
+
}) => Object.entries(vt(i)).map(([o, r]) => {
|
|
1343
|
+
const a = ct({
|
|
1344
|
+
id: o,
|
|
1345
|
+
label: r.label,
|
|
1346
|
+
category: r.category,
|
|
1347
|
+
library: e
|
|
1348
|
+
}), s = r.getContent({
|
|
1349
|
+
getImageUrl: (d) => {
|
|
1350
|
+
var l;
|
|
1351
|
+
return ((l = i.getImageUrl) == null ? void 0 : l.call(i, { block: a })) || d;
|
|
1352
|
+
}
|
|
1353
|
+
});
|
|
1354
|
+
return { ...a, content: s };
|
|
1355
|
+
}), kt = (e = {}) => {
|
|
1356
|
+
const i = pt(e), o = w(e.defaultLibrary) ? e.defaultLibrary({ ...i }) || void 0 : i, r = zt({
|
|
1357
|
+
library: o,
|
|
1358
|
+
options: e
|
|
1359
|
+
}), a = e.categories ? new Set(e.categories) : null, s = /* @__PURE__ */ new Map();
|
|
1360
|
+
return r.flatMap((d) => {
|
|
1361
|
+
const l = typeof d.category == "string" ? void 0 : d.category;
|
|
1362
|
+
if (a && l && !a.has(l.id))
|
|
1363
|
+
return [];
|
|
1364
|
+
let c = l;
|
|
1365
|
+
if (l && w(e.category)) {
|
|
1366
|
+
if (!s.has(l.id)) {
|
|
1367
|
+
const j = e.category({ ...l });
|
|
1368
|
+
s.set(l.id, j === !1 ? !1 : j || l);
|
|
1369
|
+
}
|
|
1370
|
+
const p = s.get(l.id);
|
|
1371
|
+
if (p === !1) return [];
|
|
1372
|
+
c = p || l;
|
|
1373
|
+
}
|
|
1374
|
+
const m = c !== d.category ? { ...d, category: c } : d;
|
|
1375
|
+
if (!w(e.block))
|
|
1376
|
+
return [m];
|
|
1377
|
+
const g = e.block({ ...m });
|
|
1378
|
+
return g ? [g || m] : [];
|
|
1379
|
+
});
|
|
1380
|
+
};
|
|
1381
|
+
function Tt(e, i) {
|
|
1382
|
+
const { Blocks: o } = e, r = kt(i);
|
|
1383
|
+
return r.forEach((a) => a.id && o.add(a.id, a)), { blocks: r };
|
|
1384
|
+
}
|
|
1385
|
+
const At = function(e, i = {}) {
|
|
1386
|
+
var d, l;
|
|
1387
|
+
const o = { ...i };
|
|
1388
|
+
if (!W(e))
|
|
1389
|
+
return;
|
|
1390
|
+
const { blocks: r } = Tt(e, o), a = o.selectLibrary ? (l = (d = r.find((c) => c.library)) == null ? void 0 : d.library) == null ? void 0 : l.id : void 0, s = [];
|
|
1391
|
+
return a && e.runCommand(h.setBlocksPanel, { selectedLibrary: a }), o.withGlobalStyles && s.push(
|
|
1392
|
+
(() => {
|
|
1393
|
+
const c = `${e.DataSources.events.pathSource}:${L.globalStyles}`, m = () => e.runCommand(h.setBlocksPanel, { previewCache: /* @__PURE__ */ new Map() });
|
|
1394
|
+
return e.on(c, m), () => e.off(c, m);
|
|
1395
|
+
})()
|
|
1396
|
+
), it({
|
|
1397
|
+
editor: e,
|
|
1398
|
+
licenseKey: o.licenseKey,
|
|
1399
|
+
plan: lt,
|
|
1400
|
+
pluginName: I,
|
|
1401
|
+
cleanup: rt
|
|
1402
|
+
}), ({ cleanup: c }) => {
|
|
1403
|
+
c(), s.forEach((m) => m());
|
|
1404
|
+
};
|
|
1405
|
+
}, Dt = ot(At, I);
|
|
1406
|
+
export {
|
|
1407
|
+
Dt as default
|
|
1408
|
+
};
|