@grapesjs/studio-sdk-plugins 1.0.38 → 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.
Files changed (158) hide show
  1. package/dist/accordionComponent/index.cjs.js +5 -5
  2. package/dist/accordionComponent/index.es.js +70 -67
  3. package/dist/accordionComponent/index.js +39 -0
  4. package/dist/accordionComponent/index.umd.js +4 -4
  5. package/dist/aiChat/components/AiChatHeader.d.ts +4 -5
  6. package/dist/aiChat/components/AiChatInput/index.d.ts +4 -5
  7. package/dist/aiChat/components/AiChatMessage.d.ts +7 -8
  8. package/dist/aiChat/components/index.d.ts +1 -1
  9. package/dist/aiChat/components/utils.d.ts +1 -1
  10. package/dist/aiChat/index.cjs.js +10 -376
  11. package/dist/aiChat/index.es.js +4569 -28851
  12. package/dist/aiChat/index.js +10 -376
  13. package/dist/aiChat/index.umd.js +11 -377
  14. package/dist/aiChat/server/index.cjs.d.ts +0 -1
  15. package/dist/aiChat/server/index.cjs.js +45 -45
  16. package/dist/aiChat/server/index.d.ts +0 -1
  17. package/dist/aiChat/server/index.es.d.ts +0 -1
  18. package/dist/aiChat/server/index.es.js +371 -427
  19. package/dist/aiChat/server/index.js +45 -45
  20. package/dist/aiChat/server/index.umd.js +41 -41
  21. package/dist/aiChat/server/stream.test.d.ts +1 -0
  22. package/dist/aiChat/types.d.ts +18 -4
  23. package/dist/aiChat/typesSchema.d.ts +13 -0
  24. package/dist/animationComponent/index.cjs.js +3 -3
  25. package/dist/animationComponent/index.es.js +49 -46
  26. package/dist/animationComponent/index.js +519 -0
  27. package/dist/animationComponent/index.umd.js +3 -3
  28. package/dist/canvasAbsoluteMode/index.cjs.js +1 -1
  29. package/dist/canvasAbsoluteMode/index.es.js +115 -112
  30. package/dist/canvasAbsoluteMode/index.js +1 -0
  31. package/dist/canvasAbsoluteMode/index.umd.js +1 -1
  32. package/dist/canvasEmptyState/index.cjs.js +1 -1
  33. package/dist/canvasEmptyState/index.es.js +71 -68
  34. package/dist/canvasEmptyState/index.js +1 -0
  35. package/dist/canvasEmptyState/index.umd.js +1 -1
  36. package/dist/canvasFullSize/index.cjs.js +3 -3
  37. package/dist/canvasFullSize/index.es.js +69 -66
  38. package/dist/canvasFullSize/index.js +10 -0
  39. package/dist/canvasFullSize/index.umd.js +4 -4
  40. package/dist/canvasGridMode/index.cjs.js +7 -7
  41. package/dist/canvasGridMode/index.es.js +142 -139
  42. package/dist/canvasGridMode/index.js +26 -0
  43. package/dist/canvasGridMode/index.umd.js +7 -7
  44. package/dist/canvasScreenshot/index.cjs.js +1 -1
  45. package/dist/canvasScreenshot/index.es.js +78 -75
  46. package/dist/canvasScreenshot/index.js +1 -0
  47. package/dist/canvasScreenshot/index.umd.js +1 -1
  48. package/dist/dataSourceEjs/EjsExporter.d.ts +1 -1
  49. package/dist/dataSourceEjs/index.cjs.js +3 -3
  50. package/dist/dataSourceEjs/index.es.js +40 -37
  51. package/dist/dataSourceEjs/index.js +21 -0
  52. package/dist/dataSourceEjs/index.umd.js +3 -3
  53. package/dist/dataSourceHandlebars/HandlebarsExporter.d.ts +2 -2
  54. package/dist/dataSourceHandlebars/constants.d.ts +1 -1
  55. package/dist/dataSourceHandlebars/index.cjs.js +4 -4
  56. package/dist/dataSourceHandlebars/index.es.js +58 -55
  57. package/dist/dataSourceHandlebars/index.js +10 -0
  58. package/dist/dataSourceHandlebars/index.umd.js +2 -2
  59. package/dist/dialogComponent/index.cjs.js +11 -11
  60. package/dist/dialogComponent/index.es.js +72 -69
  61. package/dist/dialogComponent/index.js +59 -0
  62. package/dist/dialogComponent/index.umd.js +11 -11
  63. package/dist/flexComponent/index.cjs.js +6 -6
  64. package/dist/flexComponent/index.es.js +151 -142
  65. package/dist/flexComponent/index.js +33 -0
  66. package/dist/flexComponent/index.umd.js +8 -8
  67. package/dist/flexComponent/typesSchema.d.ts +1 -1
  68. package/dist/fsLightboxComponent/index.cjs.js +3 -3
  69. package/dist/fsLightboxComponent/index.es.js +93 -90
  70. package/dist/fsLightboxComponent/index.js +6 -0
  71. package/dist/fsLightboxComponent/index.umd.js +3 -3
  72. package/dist/googleFontsAssetProvider/index.cjs.js +1 -1
  73. package/dist/googleFontsAssetProvider/index.es.js +112 -109
  74. package/dist/googleFontsAssetProvider/index.js +1 -0
  75. package/dist/googleFontsAssetProvider/index.umd.js +1 -1
  76. package/dist/googleFontsAssetProvider/utils.d.ts +1 -1
  77. package/dist/iconifyComponent/index.cjs.js +2 -2
  78. package/dist/iconifyComponent/index.es.js +80 -77
  79. package/dist/iconifyComponent/index.js +3 -0
  80. package/dist/iconifyComponent/index.umd.js +2 -2
  81. package/dist/index.cjs.d.ts +1 -0
  82. package/dist/index.cjs.js +970 -82
  83. package/dist/index.d.ts +1 -0
  84. package/dist/index.es.d.ts +1 -0
  85. package/dist/index.es.js +7422 -6145
  86. package/dist/index.umd.js +975 -87
  87. package/dist/layoutSidebarButtons/index.cjs.js +1 -1
  88. package/dist/layoutSidebarButtons/index.es.js +95 -92
  89. package/dist/layoutSidebarButtons/index.js +1 -0
  90. package/dist/layoutSidebarButtons/index.umd.js +1 -1
  91. package/dist/lightGalleryComponent/index.cjs.js +1 -1
  92. package/dist/lightGalleryComponent/index.es.js +164 -161
  93. package/dist/lightGalleryComponent/index.js +1 -0
  94. package/dist/lightGalleryComponent/index.umd.js +1 -1
  95. package/dist/lightGalleryComponent/utils.d.ts +1 -1
  96. package/dist/linkImageComponent/index.cjs.js +2 -2
  97. package/dist/linkImageComponent/index.es.js +60 -57
  98. package/dist/linkImageComponent/index.js +12 -0
  99. package/dist/linkImageComponent/index.umd.js +2 -2
  100. package/dist/listPagesComponent/index.cjs.js +4 -4
  101. package/dist/listPagesComponent/index.es.js +57 -54
  102. package/dist/listPagesComponent/index.js +11 -0
  103. package/dist/listPagesComponent/index.umd.js +4 -4
  104. package/dist/listPagesComponent/utils.d.ts +1 -1
  105. package/dist/presetBlockLibrary/blocks.d.ts +6 -0
  106. package/dist/presetBlockLibrary/blocks.test.d.ts +2 -0
  107. package/dist/presetBlockLibrary/emailBlocks.d.ts +53 -0
  108. package/dist/presetBlockLibrary/index.cjs.d.ts +3 -0
  109. package/dist/presetBlockLibrary/index.cjs.js +889 -0
  110. package/dist/presetBlockLibrary/index.d.ts +3 -0
  111. package/dist/presetBlockLibrary/index.es.d.ts +3 -0
  112. package/dist/presetBlockLibrary/index.es.js +1408 -0
  113. package/dist/presetBlockLibrary/index.js +889 -0
  114. package/dist/presetBlockLibrary/index.test.d.ts +1 -0
  115. package/dist/presetBlockLibrary/index.umd.js +889 -0
  116. package/dist/presetBlockLibrary/shared.d.ts +3 -0
  117. package/dist/presetBlockLibrary/types.d.ts +24 -0
  118. package/dist/presetBlockLibrary/typesSchema.d.ts +47 -0
  119. package/dist/presetPrintable/index.cjs.js +3 -3
  120. package/dist/presetPrintable/index.es.js +133 -130
  121. package/dist/presetPrintable/index.js +32 -0
  122. package/dist/presetPrintable/index.umd.js +4 -4
  123. package/dist/prosemirror/index.cjs.js +8 -8
  124. package/dist/prosemirror/index.es.js +552 -549
  125. package/dist/prosemirror/index.js +10 -0
  126. package/dist/prosemirror/index.umd.js +9 -9
  127. package/dist/prosemirror/toolbar.d.ts +2 -2
  128. package/dist/prosemirror/types.d.ts +5 -5
  129. package/dist/rendererReact/index.cjs.js +1 -1
  130. package/dist/rendererReact/index.es.js +137 -134
  131. package/dist/rendererReact/index.js +1 -1
  132. package/dist/rendererReact/index.umd.js +1 -1
  133. package/dist/rteTinyMce/index.cjs.js +2 -2
  134. package/dist/rteTinyMce/index.es.js +74 -71
  135. package/dist/rteTinyMce/index.js +104 -0
  136. package/dist/rteTinyMce/index.umd.js +2 -2
  137. package/dist/shapeDividerComponent/index.cjs.js +4 -4
  138. package/dist/shapeDividerComponent/index.es.js +91 -88
  139. package/dist/shapeDividerComponent/index.js +97 -0
  140. package/dist/shapeDividerComponent/index.umd.js +4 -4
  141. package/dist/swiperComponent/index.cjs.js +7 -7
  142. package/dist/swiperComponent/index.es.js +95 -92
  143. package/dist/swiperComponent/index.js +45 -0
  144. package/dist/swiperComponent/index.umd.js +5 -5
  145. package/dist/tableComponent/index.cjs.js +1 -1
  146. package/dist/tableComponent/index.es.js +181 -178
  147. package/dist/tableComponent/index.js +1 -0
  148. package/dist/tableComponent/index.umd.js +1 -1
  149. package/dist/tableComponent/types.d.ts +3 -3
  150. package/dist/types.d.ts +14 -14
  151. package/dist/utils.d.ts +3 -2
  152. package/dist/utilsDataSources.d.ts +1 -1
  153. package/dist/youtubeAssetProvider/index.cjs.js +1 -1
  154. package/dist/youtubeAssetProvider/index.es.js +90 -87
  155. package/dist/youtubeAssetProvider/index.js +1 -0
  156. package/dist/youtubeAssetProvider/index.umd.js +1 -1
  157. package/package.json +182 -34
  158. 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 &amp; 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
+ };