@useinsider/guido 3.1.1-beta.d27d19c → 3.1.1-beta.d77f343
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/README.md +1 -0
- package/dist/@types/config/schemas.js +9 -7
- package/dist/components/organisms/header/EditorActions.vue.js +2 -2
- package/dist/components/organisms/header/EditorActions.vue2.js +51 -36
- package/dist/components/organisms/header/RightSlot.vue.js +10 -10
- package/dist/components/organisms/header/RightSlot.vue2.js +16 -13
- package/dist/composables/useHtmlCompiler.js +18 -16
- package/dist/composables/useSave.js +23 -17
- package/dist/composables/useStripo.js +44 -41
- package/dist/composables/validators/useLiquidValidator.js +42 -0
- package/dist/config/compiler/liquidCompilerRules.js +15 -0
- package/dist/extensions/Blocks/CouponBlock/template.js +24 -13
- package/dist/extensions/DynamicContent/dynamic-content.js +17 -12
- package/dist/guido.css +1 -1
- package/dist/services/recommendationApi.js +24 -9
- package/dist/services/templateLibraryApi.js +24 -22
- package/dist/src/@types/config/schemas.d.ts +4 -0
- package/dist/src/@types/save-as-template.d.ts +1 -0
- package/dist/src/composables/useConfig.d.ts +2 -0
- package/dist/src/composables/validators/useLiquidValidator.d.ts +3 -0
- package/dist/src/config/compiler/liquidCompilerRules.d.ts +2 -0
- package/dist/src/extensions/Blocks/CouponBlock/template.d.ts +2 -0
- package/dist/src/stores/config.d.ts +18 -0
- package/dist/src/utils/genericUtil.d.ts +1 -1
- package/dist/utils/genericUtil.js +42 -20
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -143,6 +143,7 @@ const config: GuidoConfigInput = {
|
|
|
143
143
|
displayConditions?: boolean, // Default: true
|
|
144
144
|
unsubscribe?: boolean, // Default: true
|
|
145
145
|
modulesDisabled?: boolean, // Default: false - Disable modules panel
|
|
146
|
+
liquidSyntax?: boolean, // Default: false - Enable Liquid template syntax
|
|
146
147
|
},
|
|
147
148
|
|
|
148
149
|
// Optional: Callbacks
|
|
@@ -121,7 +121,9 @@ const m = {
|
|
|
121
121
|
/** Enable unsubscribe block */
|
|
122
122
|
unsubscribe: e(a(), !0),
|
|
123
123
|
/** Disable modules panel in the editor */
|
|
124
|
-
modulesDisabled: e(a(), !1)
|
|
124
|
+
modulesDisabled: e(a(), !1),
|
|
125
|
+
/** Enable Liquid template syntax */
|
|
126
|
+
liquidSyntax: e(a(), !1)
|
|
125
127
|
}), g = n([
|
|
126
128
|
"amp-accordion",
|
|
127
129
|
"amp-carousel",
|
|
@@ -193,14 +195,14 @@ const m = {
|
|
|
193
195
|
(i) => typeof i == "function",
|
|
194
196
|
"processor must be a function"
|
|
195
197
|
)
|
|
196
|
-
}),
|
|
198
|
+
}), x = k("type", [
|
|
197
199
|
M,
|
|
198
200
|
N,
|
|
199
201
|
D,
|
|
200
202
|
v
|
|
201
|
-
]),
|
|
203
|
+
]), U = o({
|
|
202
204
|
/** Custom compiler rules to apply */
|
|
203
|
-
customRules: e(c(
|
|
205
|
+
customRules: e(c(x), []),
|
|
204
206
|
/** Skip default compiler rules */
|
|
205
207
|
ignoreDefaultRules: e(a(), !1)
|
|
206
208
|
}), B = o({
|
|
@@ -232,15 +234,15 @@ const m = {
|
|
|
232
234
|
/** Block configuration */
|
|
233
235
|
blocks: e(L, {}),
|
|
234
236
|
/** Compiler configuration */
|
|
235
|
-
compiler: e(
|
|
237
|
+
compiler: e(U, {}),
|
|
236
238
|
/** Callbacks and event handlers */
|
|
237
239
|
callbacks: e(B, {})
|
|
238
240
|
});
|
|
239
241
|
export {
|
|
240
242
|
L as BlocksSchema,
|
|
241
243
|
B as CallbacksSchema,
|
|
242
|
-
|
|
243
|
-
|
|
244
|
+
x as CompilerRuleSchema,
|
|
245
|
+
U as CompilerSchema,
|
|
244
246
|
O as CustomBlockTypeSchema,
|
|
245
247
|
v as CustomRuleSchema,
|
|
246
248
|
g as DefaultBlockTypeSchema,
|
|
@@ -4,7 +4,7 @@ import d from "../../../_virtual/_plugin-vue2_normalizer.js";
|
|
|
4
4
|
var u = function() {
|
|
5
5
|
var s, i, n, a;
|
|
6
6
|
var o = this, e = o._self._c, t = o._self._setupProxy;
|
|
7
|
-
return e("div", { staticClass: "d-f editor-actions" }, [t.isVersionHistoryButtonVisible ? e(t.InButtonV2, { attrs: { id: "guido__history-button", "left-icon": "line-architect-version-history", styling: "ghost", type: "secondary", "disabled-status": t.editorStore.isVersionHistoryButtonDisabled, "label-text-status": !1, "selected-status": t.editorStore.isVersionHistoryOpen, "tooltip-options": t.getTooltipOptions("guido__history-button"), "tooltip-text": t.versionHistoryTooltipText }, on: { click: t.handleVersionHistory } }) : o._e(), e(t.InButtonV2, { attrs: { id: "guido__export-button", "left-icon": "line-export", styling: "ghost", type: "secondary", "disabled-status": t.editorStore.isExportButtonDisabled, "label-text-status": !1, "loading-status": t.isExporting, "tooltip-options": t.getTooltipOptions("guido__export-button"), "tooltip-text": t.trans("newsletter.export") }, on: { click: t.handleExport } }), (i = (s = t.config) == null ? void 0 : s.features) != null && i.saveAsTemplate ? e(t.InButtonV2, { attrs: { id: "guido__save-as-button", "left-icon": "line-newsletter-save-as-template", styling: "ghost", type: "secondary", "disabled-status": t.editorStore.isSaveAsButtonDisabled, "label-text-status": !1, "tooltip-options": t.getTooltipOptions("guido__save-as-button"), "tooltip-text": t.trans("newsletter.save-templates") }, on: { click: t.handleSaveAs } }) : o._e(), (a = (n = t.config) == null ? void 0 : n.features) != null && a.testMessage ? e(t.InButtonV2, { attrs: { id: "guido__test-button", "left-icon": "line-architect-test-journey", styling: "ghost", type: "secondary", "disabled-status": t.editorStore.isTestButtonDisabled, "label-text-status": !1, "tooltip-options": t.getTooltipOptions("guido__test-button", { staticPosition: "bottom right" }), "tooltip-text": t.trans("newsletter.test-email") }, on: { click: t.
|
|
7
|
+
return e("div", { staticClass: "d-f editor-actions" }, [t.isVersionHistoryButtonVisible ? e(t.InButtonV2, { attrs: { id: "guido__history-button", "left-icon": "line-architect-version-history", styling: "ghost", type: "secondary", "disabled-status": t.editorStore.isVersionHistoryButtonDisabled, "label-text-status": !1, "selected-status": t.editorStore.isVersionHistoryOpen, "tooltip-options": t.getTooltipOptions("guido__history-button"), "tooltip-text": t.versionHistoryTooltipText }, on: { click: t.handleVersionHistory } }) : o._e(), e(t.InButtonV2, { attrs: { id: "guido__export-button", "left-icon": "line-export", styling: "ghost", type: "secondary", "disabled-status": t.editorStore.isExportButtonDisabled, "label-text-status": !1, "loading-status": t.isExporting, "tooltip-options": t.getTooltipOptions("guido__export-button"), "tooltip-text": t.trans("newsletter.export") }, on: { click: t.handleExport } }), (i = (s = t.config) == null ? void 0 : s.features) != null && i.saveAsTemplate ? e(t.InButtonV2, { attrs: { id: "guido__save-as-button", "left-icon": "line-newsletter-save-as-template", styling: "ghost", type: "secondary", "disabled-status": t.editorStore.isSaveAsButtonDisabled, "label-text-status": !1, "tooltip-options": t.getTooltipOptions("guido__save-as-button"), "tooltip-text": t.trans("newsletter.save-templates") }, on: { click: t.handleSaveAs } }) : o._e(), (a = (n = t.config) == null ? void 0 : n.features) != null && a.testMessage ? e(t.InButtonV2, { attrs: { id: "guido__test-button", "left-icon": "line-architect-test-journey", styling: "ghost", type: "secondary", "disabled-status": t.editorStore.isTestButtonDisabled, "label-text-status": !1, "tooltip-options": t.getTooltipOptions("guido__test-button", { staticPosition: "bottom right" }), "tooltip-text": t.trans("newsletter.test-email") }, on: { click: t.handleTestEmail } }) : o._e(), t.editorStore.isPreviewModeOpen ? o._e() : e(t.InButtonV2, { staticClass: "ml-3", attrs: { id: "guido__save-button", "label-text": "Save", "disabled-status": !t.isSaving && t.editorStore.isSaveButtonDisabled, "loading-status": t.isSaving }, on: { click: function(r) {
|
|
8
8
|
return t.handleSave(!1);
|
|
9
9
|
} } }), e(t.MigrationConfirmModal, { ref: "migrationModalRef", on: { confirm: function(r) {
|
|
10
10
|
return t.executeSave(!1);
|
|
@@ -15,7 +15,7 @@ var u = function() {
|
|
|
15
15
|
p,
|
|
16
16
|
!1,
|
|
17
17
|
null,
|
|
18
|
-
"
|
|
18
|
+
"4e2a4adb"
|
|
19
19
|
);
|
|
20
20
|
const v = c.exports;
|
|
21
21
|
export {
|
|
@@ -1,51 +1,66 @@
|
|
|
1
|
-
import { defineComponent as
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import
|
|
14
|
-
|
|
1
|
+
import { defineComponent as O, ref as n, computed as h } from "vue";
|
|
2
|
+
import { useActionsApi as q } from "../../../composables/useActionsApi.js";
|
|
3
|
+
import { useConfig as b } from "../../../composables/useConfig.js";
|
|
4
|
+
import { useExport as k } from "../../../composables/useExport.js";
|
|
5
|
+
import { useTestEmailClick as B } from "../../../composables/useGuidoActions.js";
|
|
6
|
+
import { useHtmlCompiler as D } from "../../../composables/useHtmlCompiler.js";
|
|
7
|
+
import { useSave as F } from "../../../composables/useSave.js";
|
|
8
|
+
import { useTranslations as L } from "../../../composables/useTranslations.js";
|
|
9
|
+
import { useVersionHistoryApi as R } from "../../../composables/useVersionHistoryApi.js";
|
|
10
|
+
import { useLiquidValidator as z } from "../../../composables/validators/useLiquidValidator.js";
|
|
11
|
+
import { useEditorStore as I } from "../../../stores/editor.js";
|
|
12
|
+
import { useTemplateStore as P } from "../../../stores/template.js";
|
|
13
|
+
import { getTooltipOptions as j } from "../../../utils/tooltipUtils.js";
|
|
14
|
+
import { InButtonV2 as G } from "@useinsider/design-system-vue";
|
|
15
|
+
import { storeToRefs as J } from "pinia";
|
|
16
|
+
import K from "./MigrationConfirmModal.vue.js";
|
|
17
|
+
const ut = /* @__PURE__ */ O({
|
|
15
18
|
__name: "EditorActions",
|
|
16
|
-
setup(
|
|
17
|
-
const { config: a } =
|
|
19
|
+
setup(N, { expose: x }) {
|
|
20
|
+
const { config: a, isFeatureEnabled: l } = b(), { exportHtml: m } = k(), { save: u } = F(), { openVersionHistory: c, closeVersionHistory: p } = R(), { getCompiledEmail: f } = q(), { compileHtml: d } = D(), { validateLiquidSyntax: v } = z(), e = I(), y = P(), { hasMigrations: S } = J(y), s = L(), i = n(!1), r = n(!1), g = n(), H = B(), T = () => {
|
|
18
21
|
if (e.isVersionHistoryOpen) {
|
|
19
|
-
|
|
22
|
+
p();
|
|
20
23
|
return;
|
|
21
24
|
}
|
|
22
|
-
|
|
23
|
-
},
|
|
24
|
-
|
|
25
|
+
c();
|
|
26
|
+
}, w = async () => {
|
|
27
|
+
i.value = !0, await m(), i.value = !1;
|
|
25
28
|
}, _ = () => {
|
|
26
29
|
e.isSaveAsTemplateDrawerOpen = !0;
|
|
27
|
-
},
|
|
30
|
+
}, C = h(() => e.isVersionHistoryOpen ? s("newsletter.close-version-history") : s("newsletter.version-history")), A = h(
|
|
28
31
|
() => {
|
|
29
|
-
var
|
|
30
|
-
return ((
|
|
32
|
+
var t, o;
|
|
33
|
+
return ((o = (t = a.value) == null ? void 0 : t.features) == null ? void 0 : o.versionHistory) && !e.isPreviewModeOpen;
|
|
31
34
|
}
|
|
32
|
-
),
|
|
33
|
-
|
|
34
|
-
const
|
|
35
|
-
return
|
|
36
|
-
},
|
|
37
|
-
var
|
|
38
|
-
if (!
|
|
39
|
-
(
|
|
35
|
+
), V = async (t) => {
|
|
36
|
+
r.value = !0, e.loadingStatus = !0;
|
|
37
|
+
const o = await u(t);
|
|
38
|
+
return r.value = !1, (t || !o) && (e.loadingStatus = !1), o;
|
|
39
|
+
}, E = (t) => {
|
|
40
|
+
var o;
|
|
41
|
+
if (!t && S.value) {
|
|
42
|
+
(o = g.value) == null || o.open();
|
|
40
43
|
return;
|
|
41
44
|
}
|
|
42
|
-
return
|
|
45
|
+
return V(t);
|
|
46
|
+
}, M = async () => {
|
|
47
|
+
if (l("liquidSyntax")) {
|
|
48
|
+
e.loadingStatus = !0;
|
|
49
|
+
try {
|
|
50
|
+
const { html: t } = await f({ minimize: !0, resetDataSavedFlag: !1 }), { compiledHtml: o } = d(t);
|
|
51
|
+
if (!await v(o))
|
|
52
|
+
return;
|
|
53
|
+
} finally {
|
|
54
|
+
e.loadingStatus = !1;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
H();
|
|
43
58
|
};
|
|
44
|
-
return
|
|
45
|
-
handleSave:
|
|
46
|
-
}), { __sfc: !0, config: a, exportHtml: m, save:
|
|
59
|
+
return x({
|
|
60
|
+
handleSave: E
|
|
61
|
+
}), { __sfc: !0, config: a, isFeatureEnabled: l, exportHtml: m, save: u, openVersionHistory: c, closeVersionHistory: p, getCompiledEmail: f, compileHtml: d, validateLiquidSyntax: v, editorStore: e, templateStore: y, hasMigrations: S, trans: s, isExporting: i, isSaving: r, migrationModalRef: g, testEmailClick: H, handleVersionHistory: T, handleExport: w, handleSaveAs: _, versionHistoryTooltipText: C, isVersionHistoryButtonVisible: A, executeSave: V, handleSave: E, handleTestEmail: M, getTooltipOptions: j, InButtonV2: G, MigrationConfirmModal: K };
|
|
47
62
|
}
|
|
48
63
|
});
|
|
49
64
|
export {
|
|
50
|
-
|
|
65
|
+
ut as default
|
|
51
66
|
};
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
return
|
|
6
|
-
},
|
|
7
|
-
o,
|
|
8
|
-
n,
|
|
1
|
+
import i from "./RightSlot.vue2.js";
|
|
2
|
+
import r from "../../../_virtual/_plugin-vue2_normalizer.js";
|
|
3
|
+
var o = function() {
|
|
4
|
+
var s = this, e = s._self._c, t = s._self._setupProxy;
|
|
5
|
+
return e("div", { staticClass: "d-f a-i-c" }, [t.isLiquidEnabled && !t.editorStore.isVersionHistoryOpen ? e(t.InChips, { staticClass: "mr-3", attrs: { id: "guido__liquid-tag-chip", styles: "stroke", type: "default", value: "liquid-tags", "close-button": !1, "disabled-status": t.editorStore.loadingStatus, interactive: !1, text: t.trans("email-editor.liquid-tags-enabled") } }) : s._e(), t.editorStore.isVersionHistoryOpen ? e(t.RestoreButton) : e(t.EditorActions, { ref: "editorActionsRef" })], 1);
|
|
6
|
+
}, a = [], n = /* @__PURE__ */ r(
|
|
9
7
|
i,
|
|
8
|
+
o,
|
|
9
|
+
a,
|
|
10
10
|
!1,
|
|
11
11
|
null,
|
|
12
12
|
null
|
|
13
13
|
);
|
|
14
|
-
const
|
|
14
|
+
const u = n.exports;
|
|
15
15
|
export {
|
|
16
|
-
|
|
16
|
+
u as default
|
|
17
17
|
};
|
|
@@ -1,19 +1,22 @@
|
|
|
1
|
-
import { defineComponent as
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
|
|
1
|
+
import { defineComponent as a, ref as f, computed as p } from "vue";
|
|
2
|
+
import { useConfig as u } from "../../../composables/useConfig.js";
|
|
3
|
+
import { useTranslations as d } from "../../../composables/useTranslations.js";
|
|
4
|
+
import { useEditorStore as c } from "../../../stores/editor.js";
|
|
5
|
+
import { InChips as l } from "@useinsider/design-system-vue";
|
|
6
|
+
import _ from "./EditorActions.vue.js";
|
|
7
|
+
import S from "./version-history/RestoreButton.vue.js";
|
|
8
|
+
const x = /* @__PURE__ */ a({
|
|
6
9
|
__name: "RightSlot",
|
|
7
|
-
setup(
|
|
8
|
-
const
|
|
9
|
-
return
|
|
10
|
-
handleSave: (
|
|
11
|
-
var
|
|
12
|
-
return (
|
|
10
|
+
setup(h, { expose: r }) {
|
|
11
|
+
const { isFeatureEnabled: o } = u(), n = d(), i = c(), t = f(null), s = p(() => o("liquidSyntax"));
|
|
12
|
+
return r({
|
|
13
|
+
handleSave: (m) => {
|
|
14
|
+
var e;
|
|
15
|
+
return (e = t.value) == null ? void 0 : e.handleSave(m);
|
|
13
16
|
}
|
|
14
|
-
}), { __sfc: !0, editorStore:
|
|
17
|
+
}), { __sfc: !0, isFeatureEnabled: o, trans: n, editorStore: i, editorActionsRef: t, isLiquidEnabled: s, InChips: l, EditorActions: _, RestoreButton: S };
|
|
15
18
|
}
|
|
16
19
|
});
|
|
17
20
|
export {
|
|
18
|
-
|
|
21
|
+
x as default
|
|
19
22
|
};
|
|
@@ -1,28 +1,30 @@
|
|
|
1
|
-
import { defaultHtmlCompilerRules as
|
|
2
|
-
import { itemsCompilerRules as
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
1
|
+
import { defaultHtmlCompilerRules as c } from "../config/compiler/htmlCompilerRules.js";
|
|
2
|
+
import { itemsCompilerRules as f } from "../config/compiler/itemsCompilerRules.js";
|
|
3
|
+
import { liquidCompilerRules as R } from "../config/compiler/liquidCompilerRules.js";
|
|
4
|
+
import { outlookCompilerRules as C } from "../config/compiler/outlookCompilerRules.js";
|
|
5
|
+
import { recommendationCompilerRules as d } from "../config/compiler/recommendationCompilerRules.js";
|
|
6
|
+
import { socialCompilerRules as b } from "../config/compiler/socialCompilerRules.js";
|
|
6
7
|
import { unsubscribeCompilerRules as g } from "../config/compiler/unsubscribeCompilerRules.js";
|
|
7
8
|
import { createHtmlCompiler as H } from "../utils/htmlCompiler.js";
|
|
8
|
-
import { useConfig as
|
|
9
|
-
const
|
|
9
|
+
import { useConfig as v } from "./useConfig.js";
|
|
10
|
+
const w = () => {
|
|
10
11
|
var l, m, r;
|
|
11
|
-
const { compiler: e,
|
|
12
|
-
...!!((m = e.value) != null && m.ignoreDefaultRules) ? [] :
|
|
13
|
-
...
|
|
12
|
+
const { compiler: e, isFeatureEnabled: t, partner: i } = v(), s = ((l = e.value) == null ? void 0 : l.customRules) || [], u = [
|
|
13
|
+
...!!((m = e.value) != null && m.ignoreDefaultRules) ? [] : c,
|
|
14
|
+
...d,
|
|
14
15
|
...g,
|
|
15
|
-
...a,
|
|
16
16
|
...f,
|
|
17
17
|
...C,
|
|
18
|
-
...
|
|
18
|
+
...b,
|
|
19
|
+
...t("liquidSyntax") ? R : [],
|
|
20
|
+
...s.map((o, a) => ({
|
|
19
21
|
...o,
|
|
20
|
-
priority: o.priority + 1e3 +
|
|
22
|
+
priority: o.priority + 1e3 + a
|
|
21
23
|
// Ensure additional rules run after default rules
|
|
22
24
|
}))
|
|
23
|
-
], p = H(
|
|
24
|
-
return { compileHtml: (o) => p.compile(o, void 0,
|
|
25
|
+
], p = H(u), n = (r = i.value) == null ? void 0 : r.fallbackFont;
|
|
26
|
+
return { compileHtml: (o) => p.compile(o, void 0, n) };
|
|
25
27
|
};
|
|
26
28
|
export {
|
|
27
|
-
|
|
29
|
+
w as useHtmlCompiler
|
|
28
30
|
};
|
|
@@ -1,23 +1,29 @@
|
|
|
1
|
-
import { useActionsApi as
|
|
2
|
-
import { useConfig as
|
|
3
|
-
import { useSaveStart as
|
|
4
|
-
import { useSyncModuleExtractor as
|
|
5
|
-
import { useStripoApi as
|
|
6
|
-
import { useTemplatePreparation as
|
|
7
|
-
import { useHtmlValidator as
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
1
|
+
import { useActionsApi as S } from "./useActionsApi.js";
|
|
2
|
+
import { useConfig as V } from "./useConfig.js";
|
|
3
|
+
import { useSaveStart as x, useSaveComplete as y } from "./useGuidoActions.js";
|
|
4
|
+
import { useSyncModuleExtractor as w } from "./useSyncModuleExtractor.js";
|
|
5
|
+
import { useStripoApi as b } from "../services/stripoApi.js";
|
|
6
|
+
import { useTemplatePreparation as q } from "../utils/templatePreparation.js";
|
|
7
|
+
import { useHtmlValidator as H } from "./useHtmlValidator.js";
|
|
8
|
+
import { useLiquidValidator as L } from "./validators/useLiquidValidator.js";
|
|
9
|
+
const F = () => {
|
|
10
|
+
const o = x(), s = y(), { validateHtml: r } = H(), { validateLiquidSyntax: n } = L(), { callbacks: a, isFeatureEnabled: l } = V(), { extractSyncModuleData: d } = w(), { setSyncModuleUnsubscriptionPages: u } = b(), { editorSave: c } = S();
|
|
11
|
+
return { save: async (m = !1) => {
|
|
12
|
+
var i;
|
|
12
13
|
o();
|
|
13
|
-
const { prepareTemplateDetails:
|
|
14
|
-
if (
|
|
14
|
+
const { prepareTemplateDetails: p } = q(), t = await p();
|
|
15
|
+
if (l("liquidSyntax")) {
|
|
16
|
+
if (!await n(t.compiledHtml))
|
|
17
|
+
return;
|
|
18
|
+
} else if (!await r(t.compiledHtml, t.dynamicContentList, !0))
|
|
15
19
|
return;
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
20
|
+
if ((i = a.value) != null && i.externalValidation && !await a.value.externalValidation(t))
|
|
21
|
+
return;
|
|
22
|
+
c();
|
|
23
|
+
const { unsubscribePayload: f, stripoModules: v } = d(t.rawHtml);
|
|
24
|
+
return await u(f), t.modules = v, m || s(t), t;
|
|
19
25
|
} };
|
|
20
26
|
};
|
|
21
27
|
export {
|
|
22
|
-
|
|
28
|
+
F as useSave
|
|
23
29
|
};
|
|
@@ -1,42 +1,42 @@
|
|
|
1
|
-
import { useActionsApi as
|
|
2
|
-
import { useBlocksConfig as
|
|
3
|
-
import { useConfig as
|
|
4
|
-
import { useCustomInterfaceAppearance as
|
|
5
|
-
import { useStripoEventHandler as
|
|
6
|
-
import { useToaster as
|
|
7
|
-
import { localePatch as
|
|
8
|
-
import { displayConditions as
|
|
9
|
-
import { useStripoApi as
|
|
10
|
-
import
|
|
11
|
-
import { useEditorStore as
|
|
12
|
-
import { dynamicContentToMergeTags as
|
|
13
|
-
import
|
|
14
|
-
const
|
|
15
|
-
const { features: l, template:
|
|
16
|
-
var
|
|
17
|
-
const e =
|
|
1
|
+
import { useActionsApi as F } from "./useActionsApi.js";
|
|
2
|
+
import { useBlocksConfig as D } from "./useBlocksConfig.js";
|
|
3
|
+
import { useConfig as I } from "./useConfig.js";
|
|
4
|
+
import { useCustomInterfaceAppearance as P } from "./useCustomInterfaceAppearance.js";
|
|
5
|
+
import { useStripoEventHandler as U } from "./useStripoEventHandler.js";
|
|
6
|
+
import { useToaster as R } from "./useToaster.js";
|
|
7
|
+
import { localePatch as q } from "../config/i18n/index.js";
|
|
8
|
+
import { displayConditions as x } from "../enums/displayConditions.js";
|
|
9
|
+
import { useStripoApi as H } from "../services/stripoApi.js";
|
|
10
|
+
import O from "../static/styles/customEditorStyle.css.js";
|
|
11
|
+
import { useEditorStore as C } from "../stores/editor.js";
|
|
12
|
+
import { dynamicContentToMergeTags as L } from "../utils/genericUtil.js";
|
|
13
|
+
import $ from "../package.json.js";
|
|
14
|
+
const ie = (E, c) => {
|
|
15
|
+
const { features: l, template: h, isFeatureEnabled: u } = I(), { handleError: m } = R(), { getToken: b, getCustomFonts: w, getSyncModulesStatus: k } = H(), { handleEvent: T } = U(), { getStripoBlocksConfig: V } = D(), _ = async (i, n = [], r = !1) => {
|
|
16
|
+
var g, y, S;
|
|
17
|
+
const e = C(), { html: p, css: a } = i, { baseBlocks: o, extensions: d } = await V(), f = ((g = l.value) == null ? void 0 : g.displayConditions) ?? !0, v = ((y = l.value) == null ? void 0 : y.modulesDisabled) ?? !1, M = ((S = h.value) == null ? void 0 : S.forceRecreate) ?? !1;
|
|
18
18
|
window.UIEditor.initEditor(
|
|
19
19
|
document.querySelector("#guido-editor"),
|
|
20
20
|
{
|
|
21
|
-
metadata:
|
|
22
|
-
html:
|
|
21
|
+
metadata: E,
|
|
22
|
+
html: p,
|
|
23
23
|
css: a,
|
|
24
|
-
forceRecreate:
|
|
24
|
+
forceRecreate: M,
|
|
25
25
|
locale: "en",
|
|
26
26
|
undoButtonSelector: "#guido__undo-button",
|
|
27
27
|
redoButtonSelector: "#guido__redo-button",
|
|
28
28
|
mobileViewButtonSelector: ".guido__view-option-selection-mobile",
|
|
29
29
|
desktopViewButtonSelector: ".guido__view-option-selection-desktop",
|
|
30
30
|
codeEditorButtonSelector: "#guido__code-button",
|
|
31
|
-
customAppearanceMergetags: !
|
|
31
|
+
customAppearanceMergetags: !u("liquidSyntax"),
|
|
32
32
|
customAppearanceMergetagsBorderColor: "#f1f3fe",
|
|
33
33
|
customAppearanceMergetagsBackgroundColor: "#f1f3fe",
|
|
34
|
-
customViewStyles:
|
|
35
|
-
conditionsEnabled:
|
|
36
|
-
customConditionsEnabled:
|
|
37
|
-
conditionCategories:
|
|
34
|
+
customViewStyles: O,
|
|
35
|
+
conditionsEnabled: f,
|
|
36
|
+
customConditionsEnabled: f,
|
|
37
|
+
conditionCategories: x,
|
|
38
38
|
enableXSSSecurity: !0,
|
|
39
|
-
modulesDisabled:
|
|
39
|
+
modulesDisabled: v,
|
|
40
40
|
syncModulesEnabled: r,
|
|
41
41
|
messageSettingsEnabled: !0,
|
|
42
42
|
displayGmailAnnotations: !0,
|
|
@@ -52,25 +52,28 @@ const oe = (C, c) => {
|
|
|
52
52
|
},
|
|
53
53
|
mergeTags: [
|
|
54
54
|
{
|
|
55
|
-
entries:
|
|
55
|
+
entries: L(
|
|
56
|
+
c.preselectedDynamicContentList,
|
|
57
|
+
u("liquidSyntax")
|
|
58
|
+
)
|
|
56
59
|
}
|
|
57
60
|
],
|
|
58
61
|
async onTokenRefreshRequest(t) {
|
|
59
62
|
try {
|
|
60
|
-
const s = await
|
|
63
|
+
const s = await b();
|
|
61
64
|
t(s);
|
|
62
65
|
} catch (s) {
|
|
63
|
-
|
|
66
|
+
m(s, "Failed to refresh token");
|
|
64
67
|
}
|
|
65
68
|
},
|
|
66
69
|
onTemplateLoaded() {
|
|
67
70
|
try {
|
|
68
|
-
const { importCss: t } =
|
|
69
|
-
t(), s(),
|
|
71
|
+
const { importCss: t } = P(), { activateCustomViewStyles: s, updateTimerInClonedTemplate: A } = F();
|
|
72
|
+
t(), s(), A(), c.onReady(), e.isStripoInitialized = !0, e.loadingStatus = !1, setTimeout(() => {
|
|
70
73
|
e.hasChanges = !1;
|
|
71
74
|
}, 1e3);
|
|
72
75
|
} catch (t) {
|
|
73
|
-
|
|
76
|
+
m(t, "Failed to load custom interface appearance");
|
|
74
77
|
}
|
|
75
78
|
},
|
|
76
79
|
onCodeEditorVisibilityChanged(t) {
|
|
@@ -85,23 +88,23 @@ const oe = (C, c) => {
|
|
|
85
88
|
onDataChanged() {
|
|
86
89
|
e.hasChanges = !0;
|
|
87
90
|
},
|
|
88
|
-
onEvent:
|
|
91
|
+
onEvent: T,
|
|
89
92
|
ignoreClickOutsideSelectors: [
|
|
90
93
|
"#guido-dynamic-content-modal",
|
|
91
94
|
".in-on-board-wrapper",
|
|
92
95
|
".in-drawer__container"
|
|
93
96
|
],
|
|
94
97
|
extensions: d,
|
|
95
|
-
localePatch:
|
|
98
|
+
localePatch: q
|
|
96
99
|
}
|
|
97
100
|
);
|
|
98
|
-
},
|
|
101
|
+
}, B = (i) => new Promise((n, r) => {
|
|
99
102
|
var d;
|
|
100
103
|
if (document.getElementById("UiEditorScript")) {
|
|
101
104
|
i(), n();
|
|
102
105
|
return;
|
|
103
106
|
}
|
|
104
|
-
const e =
|
|
107
|
+
const e = $.guido, a = `https://email-static.useinsider.com/guido/${(d = e == null ? void 0 : e.stripo) == null ? void 0 : d.version}/UIEditor.js`, o = document.createElement("script");
|
|
105
108
|
o.id = "UiEditorScript", o.type = "module", o.src = a, o.onload = () => {
|
|
106
109
|
i(), n();
|
|
107
110
|
}, o.onerror = () => {
|
|
@@ -109,15 +112,15 @@ const oe = (C, c) => {
|
|
|
109
112
|
}, document.body.appendChild(o);
|
|
110
113
|
});
|
|
111
114
|
return { initPlugin: async (i) => {
|
|
112
|
-
await
|
|
113
|
-
const n =
|
|
115
|
+
await B(async () => {
|
|
116
|
+
const n = C(), [r, e] = await Promise.all([
|
|
114
117
|
w(),
|
|
115
|
-
|
|
118
|
+
k()
|
|
116
119
|
]);
|
|
117
|
-
n.syncModulesEnabled = e, await
|
|
120
|
+
n.syncModulesEnabled = e, await _(i, r, e);
|
|
118
121
|
});
|
|
119
122
|
} };
|
|
120
123
|
};
|
|
121
124
|
export {
|
|
122
|
-
|
|
125
|
+
ie as useStripo
|
|
123
126
|
};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { ToasterTypeOptions as a } from "../../enums/toaster.js";
|
|
2
|
+
import { base64EncodeWithSpecialChars as u } from "../../utils/base64.js";
|
|
3
|
+
import { useHttp as d } from "../useHttp.js";
|
|
4
|
+
import { useToaster as c } from "../useToaster.js";
|
|
5
|
+
import { useTranslations as p } from "../useTranslations.js";
|
|
6
|
+
const v = () => {
|
|
7
|
+
const { post: i } = d(), { showToaster: e } = c(), s = p();
|
|
8
|
+
return { validateLiquidSyntax: async (o) => {
|
|
9
|
+
try {
|
|
10
|
+
const t = await i("/newsletter/contents/validate-syntax", [{
|
|
11
|
+
identifier: "default",
|
|
12
|
+
syntax: "liquid",
|
|
13
|
+
contents: {
|
|
14
|
+
subject: null,
|
|
15
|
+
preheader: null,
|
|
16
|
+
html: u(o),
|
|
17
|
+
ampHtml: null
|
|
18
|
+
}
|
|
19
|
+
}]);
|
|
20
|
+
if (!Array.isArray(t.data)) {
|
|
21
|
+
const l = t.data;
|
|
22
|
+
return e({
|
|
23
|
+
type: a.Warning,
|
|
24
|
+
message: l.message ?? s("journey-builder.liquid-validation-failed")
|
|
25
|
+
}), !1;
|
|
26
|
+
}
|
|
27
|
+
const [r] = t.data, n = Object.values((r == null ? void 0 : r.errors) ?? {});
|
|
28
|
+
return n.length ? (e({
|
|
29
|
+
type: a.Warning,
|
|
30
|
+
message: n[0].replace(/^line \d+:\s*/, "")
|
|
31
|
+
}), !1) : !0;
|
|
32
|
+
} catch {
|
|
33
|
+
return e({
|
|
34
|
+
type: a.Alert,
|
|
35
|
+
message: s("journey-builder.liquid-validation-failed")
|
|
36
|
+
}), !1;
|
|
37
|
+
}
|
|
38
|
+
} };
|
|
39
|
+
};
|
|
40
|
+
export {
|
|
41
|
+
v as useLiquidValidator
|
|
42
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { COUPON_PLACEHOLDER_LIQUID as e, COUPON_PLACEHOLDER_DEFAULT as i } from "../../extensions/Blocks/CouponBlock/template.js";
|
|
2
|
+
const o = [
|
|
3
|
+
{
|
|
4
|
+
id: "liquid-coupon-code",
|
|
5
|
+
description: "Replace legacy coupon placeholder with liquid syntax",
|
|
6
|
+
type: "replace",
|
|
7
|
+
search: i,
|
|
8
|
+
replacement: e,
|
|
9
|
+
replaceAll: !0,
|
|
10
|
+
priority: 50
|
|
11
|
+
}
|
|
12
|
+
];
|
|
13
|
+
export {
|
|
14
|
+
o as liquidCompilerRules
|
|
15
|
+
};
|
|
@@ -1,29 +1,40 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { useConfig as n } from "../../../composables/useConfig.js";
|
|
2
|
+
import { BlockType as e } from "../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
|
|
3
|
+
import { COUPON_BLOCK_ID as t } from "./block.js";
|
|
4
|
+
const c = "{@COUPON_CODE}", s = "{{ins_coupon_code}}";
|
|
5
|
+
function l() {
|
|
6
|
+
const { isFeatureEnabled: o } = n();
|
|
7
|
+
return o("liquidSyntax") ? s : c;
|
|
8
|
+
}
|
|
9
|
+
function i(o) {
|
|
10
|
+
return `
|
|
11
|
+
<${e.BLOCK_TEXT}
|
|
5
12
|
class="coupon-block ins-coupon-code coupon-block-v2 es-p10"
|
|
6
13
|
align="center"
|
|
7
|
-
esd-extension-block-id="${
|
|
14
|
+
esd-extension-block-id="${t}">
|
|
8
15
|
<p
|
|
9
16
|
path="1"
|
|
10
17
|
contenteditable="false"
|
|
11
18
|
style="font-size: 16px; color: #333333;">
|
|
12
|
-
<strong path="1,0"
|
|
19
|
+
<strong path="1,0">${o}</strong>
|
|
13
20
|
</p>
|
|
14
|
-
</${
|
|
15
|
-
|
|
21
|
+
</${e.BLOCK_TEXT}>
|
|
22
|
+
`;
|
|
23
|
+
}
|
|
24
|
+
const u = `
|
|
16
25
|
<td
|
|
17
26
|
class="coupon-block coupon-block-v2 ins-coupon-code esd-block-text esd-extension-block"
|
|
18
|
-
esd-extension-block-id="${
|
|
27
|
+
esd-extension-block-id="${t}"
|
|
19
28
|
>
|
|
20
29
|
<p class="ins-title" contenteditable="false">{@COUPON_CODE}</p>
|
|
21
30
|
</td>
|
|
22
31
|
`;
|
|
23
|
-
function
|
|
24
|
-
return
|
|
32
|
+
function d() {
|
|
33
|
+
return i(l());
|
|
25
34
|
}
|
|
26
35
|
export {
|
|
27
|
-
|
|
28
|
-
s as
|
|
36
|
+
c as COUPON_PLACEHOLDER_DEFAULT,
|
|
37
|
+
s as COUPON_PLACEHOLDER_LIQUID,
|
|
38
|
+
u as default,
|
|
39
|
+
d as getDefaultTemplate
|
|
29
40
|
};
|
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
var c = Object.defineProperty;
|
|
2
2
|
var g = (o, s, t) => s in o ? c(o, s, { enumerable: !0, configurable: !0, writable: !0, value: t }) : o[s] = t;
|
|
3
3
|
var r = (o, s, t) => g(o, typeof s != "symbol" ? s + "" : s, t);
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
import { useConfig as d } from "../../composables/useConfig.js";
|
|
5
|
+
import { mergeTagToDynamicContent as m, dynamicContentToMergeTags as u } from "../../utils/genericUtil.js";
|
|
6
|
+
import { UIElement as h, UIElementType as a, UEAttr as T, UIElementTagRegistry as y } from "../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
|
|
7
|
+
import { ExternalMergeTagsLibrary as C } from "./dynamic-content-modal.js";
|
|
8
|
+
const l = "external-dynamic-content-ui-element", L = "button-add-dynamic-content";
|
|
9
|
+
class w extends y {
|
|
9
10
|
registerUiElements(s) {
|
|
10
11
|
s[a.MERGETAGS] = l;
|
|
11
12
|
}
|
|
12
13
|
}
|
|
13
|
-
class
|
|
14
|
+
class f extends h {
|
|
14
15
|
constructor() {
|
|
15
16
|
super(...arguments);
|
|
16
17
|
r(this, "mergeTagsButton", null);
|
|
@@ -43,7 +44,7 @@ class b extends u {
|
|
|
43
44
|
onAttributeUpdated(t, e) {
|
|
44
45
|
if (t !== "mergeTag" || !(e != null && e.value))
|
|
45
46
|
return;
|
|
46
|
-
const n =
|
|
47
|
+
const n = m(e), i = this._getLastClickedPosition();
|
|
47
48
|
this.lastClickedElement = null, this.lastClickedFrame = null, this._openDynamicContentLibrary(n, i);
|
|
48
49
|
}
|
|
49
50
|
openMergeTagLibrary() {
|
|
@@ -55,10 +56,14 @@ class b extends u {
|
|
|
55
56
|
* Dispatches event with dynamic content data and position
|
|
56
57
|
*/
|
|
57
58
|
_openDynamicContentLibrary(t, e) {
|
|
58
|
-
this.mergeTagsLibrary || (this.mergeTagsLibrary = new
|
|
59
|
+
this.mergeTagsLibrary || (this.mergeTagsLibrary = new C()), this.mergeTagsLibrary.openMergeTagsLibrary(
|
|
59
60
|
t,
|
|
60
61
|
(n) => {
|
|
61
|
-
n.text && n.value
|
|
62
|
+
if (n.text && n.value) {
|
|
63
|
+
const { isFeatureEnabled: i } = d();
|
|
64
|
+
this.api.triggerValueChange(u([n], i("liquidSyntax"))[0]);
|
|
65
|
+
} else
|
|
66
|
+
this.api.triggerValueChange(null);
|
|
62
67
|
},
|
|
63
68
|
e
|
|
64
69
|
);
|
|
@@ -142,7 +147,7 @@ class b extends u {
|
|
|
142
147
|
<${a.BUTTON}
|
|
143
148
|
id="guido__btn-add-dynamic-content"
|
|
144
149
|
class="btn btn-primary"
|
|
145
|
-
${
|
|
150
|
+
${T.BUTTON.name}="${L}">
|
|
146
151
|
<${a.ICON} src="plus" class="icon icon-button color-primary">
|
|
147
152
|
</${a.ICON}>
|
|
148
153
|
${this.api.translate("Add Dynamic Content")}
|
|
@@ -151,6 +156,6 @@ class b extends u {
|
|
|
151
156
|
}
|
|
152
157
|
}
|
|
153
158
|
export {
|
|
154
|
-
|
|
155
|
-
|
|
159
|
+
w as DynamicContentTagRegistry,
|
|
160
|
+
f as DynamicContentUiElementExtension
|
|
156
161
|
};
|
package/dist/guido.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.gap-16[data-v-3b53a736],.gap-16[data-v-0e1b0c54]{gap:16px}[data-v-cd76c125] .in-button-v2__wrapper{line-height:0}[data-v-22226124] .in-segments-wrapper__button_selected,[data-v-22226124] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb;color:#0010ac;border-color:#0010ac}[data-v-2cb418af] .in-progress-wrapper__progress p span:last-child{display:none!important}[data-v-2cb418af] .in-progress-description-status{display:none!important}.view-options-wrapper[data-v-195ab6d4]{position:relative;display:inline-block}.new-tag[data-v-195ab6d4]{position:absolute;top:-8px;right:-16px;z-index:10}[data-v-195ab6d4] .guido__view-option-selection-desktop svg,[data-v-195ab6d4] .guido__view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-195ab6d4] .in-segments-wrapper__button_selected,[data-v-195ab6d4] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}[data-v-195ab6d4] .in-tooltip-wrapper__icon{cursor:pointer}.editor-toolbar[data-v-173c3a40]{gap:4px}.version-history-item[data-v-ee4b9c3f]{flex-basis:200px}.version-history[data-v-64c52560]{gap:8px}.version-history__toolbar[data-v-64c52560]{gap:4px}.view-options-wrapper[data-v-d405ca59]{position:relative;display:inline-block}.new-tag[data-v-d405ca59]{position:absolute;top:-8px;right:-16px;z-index:10}[data-v-d405ca59] .guido__verion-history-view-option-selection-desktop svg,[data-v-d405ca59] .guido__verion-history-view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-d405ca59] .in-segments-wrapper__button_selected,[data-v-d405ca59] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}[data-v-d405ca59] .in-tooltip-wrapper__icon{cursor:pointer}.editor-actions[data-v-
|
|
1
|
+
.gap-16[data-v-3b53a736],.gap-16[data-v-0e1b0c54]{gap:16px}[data-v-cd76c125] .in-button-v2__wrapper{line-height:0}[data-v-22226124] .in-segments-wrapper__button_selected,[data-v-22226124] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb;color:#0010ac;border-color:#0010ac}[data-v-2cb418af] .in-progress-wrapper__progress p span:last-child{display:none!important}[data-v-2cb418af] .in-progress-description-status{display:none!important}.view-options-wrapper[data-v-195ab6d4]{position:relative;display:inline-block}.new-tag[data-v-195ab6d4]{position:absolute;top:-8px;right:-16px;z-index:10}[data-v-195ab6d4] .guido__view-option-selection-desktop svg,[data-v-195ab6d4] .guido__view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-195ab6d4] .in-segments-wrapper__button_selected,[data-v-195ab6d4] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}[data-v-195ab6d4] .in-tooltip-wrapper__icon{cursor:pointer}.editor-toolbar[data-v-173c3a40]{gap:4px}.version-history-item[data-v-ee4b9c3f]{flex-basis:200px}.version-history[data-v-64c52560]{gap:8px}.version-history__toolbar[data-v-64c52560]{gap:4px}.view-options-wrapper[data-v-d405ca59]{position:relative;display:inline-block}.new-tag[data-v-d405ca59]{position:absolute;top:-8px;right:-16px;z-index:10}[data-v-d405ca59] .guido__verion-history-view-option-selection-desktop svg,[data-v-d405ca59] .guido__verion-history-view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-d405ca59] .in-segments-wrapper__button_selected,[data-v-d405ca59] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}[data-v-d405ca59] .in-tooltip-wrapper__icon{cursor:pointer}.editor-actions[data-v-4e2a4adb]{gap:4px}.header-wrapper[data-v-5c02dcc7]{min-width:1000px}.guido-loading__wrapper[data-v-07c4b2d8]{height:100%;top:75px!important;bottom:0!important}.guido-editor__wrapper[data-v-a26d7792]{position:relative;width:100%;height:calc(100vh - 128px)}.guido-editor__container[data-v-a26d7792]{width:100%;height:calc(100vh - 128px)}.guido-editor__no-header[data-v-a26d7792]{height:calc(100vh - 75px)}[data-v-293f1c47] .in-breadcrumb-wrapper__links{cursor:pointer}.templates-wrapper[data-v-df672485]{gap:16px;grid-template-columns:repeat(3,1fr)}.templates-wrapper .template-wrapper[data-v-df672485]{cursor:pointer}.templates-wrapper .template-wrapper .template-container[data-v-df672485]{height:274px;padding:2px;transition:none}.templates-wrapper .template-wrapper .template-container.selected[data-v-df672485]{padding:1px}.templates-wrapper .template-wrapper .template-container .thumbnail[data-v-df672485]{object-fit:cover;transform:scale(1)}[data-v-43c617a7] .guido__verion-history-view-option-selection-desktop svg,[data-v-43c617a7] .guido__verion-history-view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-43c617a7] .in-segments-wrapper__button_selected,[data-v-43c617a7] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}.error-list[data-v-c3fd5d4b]{gap:16px}.desktop-browser-header[data-v-d86c5af5]{height:79px;min-height:79px}.desktop-browser-header__left[data-v-d86c5af5]{-webkit-user-drag:none;height:79px;width:378px}.desktop-browser-header__center[data-v-d86c5af5]{height:79px;background-repeat:repeat-x;background-size:auto 100%;background-position:left top}.desktop-browser-header__right[data-v-d86c5af5]{-webkit-user-drag:none;height:79px;width:112px}.desktop-preview[data-v-988f8da6]{min-width:602px;height:70vh;min-height:583px;border-radius:10px}.desktop-preview iframe[data-v-988f8da6]{min-height:504px}.iframe-wrapper[data-v-e0424e99]{width:258px}.iframe-scaled[data-v-e0424e99]{width:320px;height:124.0310077519%;transform:scale(.80625);transform-origin:top left}.cropped-text[data-v-eb3d05d7]{width:220px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mobile-preview-wrapper__phone[data-v-3f472f96]{width:282px}.mobile-preview-wrapper__phone img[data-v-3f472f96]{object-fit:cover;border-radius:44px}.mobile-preview-wrapper__content[data-v-3f472f96]{width:258px;height:450px;left:12px}[data-v-29b9af29] .vueperslides__bullets,[data-v-dd1a237a] .vueperslides__bullets{pointer-events:none!important}[data-v-dd1a237a] .vueperslides__parallax-wrapper{height:110px!important}[data-v-d073b1dc] .vueperslides__bullets{pointer-events:none!important}[data-v-d073b1dc] .vueperslides__parallax-wrapper{height:110px!important}
|
|
@@ -1,27 +1,42 @@
|
|
|
1
|
-
import { useHttp as
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { useHttp as c } from "../composables/useHttp.js";
|
|
2
|
+
import { URLS as i } from "../enums/extensions/recommendationBlock.js";
|
|
3
|
+
const f = () => {
|
|
4
|
+
const { get: r } = c(), a = "6KcLM9TwheVB1mgK";
|
|
5
|
+
return {
|
|
5
6
|
fetchRecommendationCreateData: async () => {
|
|
6
7
|
try {
|
|
7
|
-
return (await
|
|
8
|
+
return (await r("/newsletter/recommendations/create-data")).data;
|
|
8
9
|
} catch (e) {
|
|
9
10
|
throw console.error("fetchUserModalState error:", e), e;
|
|
10
11
|
}
|
|
11
12
|
},
|
|
12
13
|
fetchRecommendationFilters: async () => {
|
|
13
14
|
try {
|
|
14
|
-
const { data: e } = await
|
|
15
|
+
const { data: e } = await r("/stripo/email-recommendation-attributes");
|
|
15
16
|
return e;
|
|
16
17
|
} catch (e) {
|
|
17
18
|
throw console.error("fetchRecommendationFilters error:", e), e;
|
|
18
19
|
}
|
|
19
20
|
},
|
|
20
|
-
fetchRecommendationProducts: async (e,
|
|
21
|
-
|
|
21
|
+
fetchRecommendationProducts: async (e, s) => {
|
|
22
|
+
var n;
|
|
23
|
+
try {
|
|
24
|
+
const t = decodeURIComponent(new URLSearchParams(Object.entries(s)).toString());
|
|
25
|
+
console.debug("🏁 Recommendation API Query:", t);
|
|
26
|
+
const { get: m } = c({
|
|
27
|
+
headers: {
|
|
28
|
+
"X-CLIENT-ID": a
|
|
29
|
+
}
|
|
30
|
+
}), o = await m(
|
|
31
|
+
`${i.RECOMMENDATION_API_URL}/v2/${e}?${t}`
|
|
32
|
+
);
|
|
33
|
+
return ((n = o == null ? void 0 : o.data) == null ? void 0 : n.data) ?? [];
|
|
34
|
+
} catch (t) {
|
|
35
|
+
throw console.error("fetchRecommendationProducts error:", t), t;
|
|
36
|
+
}
|
|
22
37
|
}
|
|
23
38
|
};
|
|
24
39
|
};
|
|
25
40
|
export {
|
|
26
|
-
|
|
41
|
+
f as useRecommendationApi
|
|
27
42
|
};
|
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
import { useConfig as
|
|
2
|
-
import { useHttp as
|
|
1
|
+
import { useConfig as f } from "../composables/useConfig.js";
|
|
2
|
+
import { useHttp as b } from "../composables/useHttp.js";
|
|
3
3
|
import { useToaster as w } from "../composables/useToaster.js";
|
|
4
|
-
import { useTranslations as
|
|
5
|
-
import { EditorType as
|
|
6
|
-
import { useRecommendationExtensionStore as
|
|
4
|
+
import { useTranslations as h } from "../composables/useTranslations.js";
|
|
5
|
+
import { EditorType as C } from "../enums/defaults.js";
|
|
6
|
+
import { useRecommendationExtensionStore as S } from "../extensions/Blocks/Recommendation/store/recommendation.js";
|
|
7
7
|
import { useSaveAsTemplateStore as v } from "../stores/save-as-template.js";
|
|
8
8
|
import { base64EncodeWithSpecialChars as a } from "../utils/base64.js";
|
|
9
|
-
import { useTemplatePreparation as
|
|
9
|
+
import { useTemplatePreparation as N } from "../utils/templatePreparation.js";
|
|
10
10
|
const R = () => {
|
|
11
|
-
const { get:
|
|
11
|
+
const { get: m, post: i } = b(), { handleError: o, showToaster: c } = w(), { config: l, isFeatureEnabled: y } = f(), p = h();
|
|
12
12
|
return {
|
|
13
13
|
getCategories: async () => {
|
|
14
14
|
try {
|
|
15
|
-
const { data: e = [] } = await
|
|
15
|
+
const { data: e = [] } = await m("/newsletter/template-library/get-template-categories");
|
|
16
16
|
return e;
|
|
17
17
|
} catch (e) {
|
|
18
18
|
return o(e, "Failed to fetch template categories"), [];
|
|
19
19
|
}
|
|
20
20
|
},
|
|
21
21
|
checkTemplateNameAvailability: async (e) => {
|
|
22
|
-
const { data: { status: t = !1 } } = await
|
|
22
|
+
const { data: { status: t = !1 } } = await m(
|
|
23
23
|
`/newsletter/template-library/template-name-exists?name=${e}`
|
|
24
24
|
);
|
|
25
25
|
return !t;
|
|
26
26
|
},
|
|
27
27
|
createCategory: async (e) => {
|
|
28
28
|
try {
|
|
29
|
-
const { data: { id: t } } = await
|
|
29
|
+
const { data: { id: t } } = await i(
|
|
30
30
|
"/newsletter/template-library/create-category",
|
|
31
31
|
{ name: e }
|
|
32
32
|
);
|
|
@@ -36,34 +36,36 @@ const R = () => {
|
|
|
36
36
|
}
|
|
37
37
|
},
|
|
38
38
|
createTemplate: async () => {
|
|
39
|
-
var e, t, g,
|
|
39
|
+
var e, t, g, u;
|
|
40
40
|
try {
|
|
41
|
-
const { prepareTemplateDetails:
|
|
41
|
+
const { prepareTemplateDetails: n } = N(), r = v(), s = await n(), d = {
|
|
42
42
|
name: r.getTemplateName,
|
|
43
43
|
categories: r.getSelectedCategoryIds,
|
|
44
44
|
productId: ((t = (e = l.value) == null ? void 0 : e.partner) == null ? void 0 : t.productType) || 0,
|
|
45
|
-
editorType:
|
|
46
|
-
messageType: ((
|
|
45
|
+
editorType: C,
|
|
46
|
+
messageType: ((u = (g = l.value) == null ? void 0 : g.partner) == null ? void 0 : u.messageType) || 0,
|
|
47
47
|
content: a(s.compiledHtml),
|
|
48
48
|
css: a(s.css),
|
|
49
49
|
unsubscriptionPreferencePageStatus: !1,
|
|
50
50
|
unsubscriptionPreferencePages: [],
|
|
51
51
|
recommendationCampaignUrls: a(
|
|
52
|
-
|
|
52
|
+
S().recommendationCampaignUrls
|
|
53
53
|
),
|
|
54
54
|
recommendationConfigs: a({}),
|
|
55
55
|
isGuido: !0,
|
|
56
|
+
// eslint-disable-next-line camelcase
|
|
57
|
+
template_engine: y("liquidSyntax") ? 1 : 0,
|
|
56
58
|
stripoConfig: a({
|
|
57
59
|
editor: "stripo",
|
|
58
60
|
html: s.rawHtml,
|
|
59
61
|
css: s.css
|
|
60
62
|
})
|
|
61
|
-
}, { data: { type:
|
|
63
|
+
}, { data: { type: T } } = await i(
|
|
62
64
|
"/newsletter/template-library/create-template",
|
|
63
|
-
|
|
65
|
+
d
|
|
64
66
|
);
|
|
65
|
-
if (
|
|
66
|
-
|
|
67
|
+
if (T === "alert") {
|
|
68
|
+
c({
|
|
67
69
|
message: p(
|
|
68
70
|
"newsletter.template-library-save-alert",
|
|
69
71
|
{ templateName: r.getTemplateName }
|
|
@@ -72,15 +74,15 @@ const R = () => {
|
|
|
72
74
|
});
|
|
73
75
|
return;
|
|
74
76
|
}
|
|
75
|
-
|
|
77
|
+
c({
|
|
76
78
|
message: p(
|
|
77
79
|
"newsletter.template-library-save-success",
|
|
78
80
|
{ templateName: r.getTemplateName }
|
|
79
81
|
),
|
|
80
82
|
type: "success"
|
|
81
83
|
});
|
|
82
|
-
} catch (
|
|
83
|
-
o(
|
|
84
|
+
} catch (n) {
|
|
85
|
+
o(n, "Failed to create template");
|
|
84
86
|
}
|
|
85
87
|
}
|
|
86
88
|
};
|
|
@@ -176,6 +176,8 @@ export declare const FeaturesSchema: v.ObjectSchema<{
|
|
|
176
176
|
readonly unsubscribe: v.OptionalSchema<v.BooleanSchema<undefined>, true>;
|
|
177
177
|
/** Disable modules panel in the editor */
|
|
178
178
|
readonly modulesDisabled: v.OptionalSchema<v.BooleanSchema<undefined>, false>;
|
|
179
|
+
/** Enable Liquid template syntax */
|
|
180
|
+
readonly liquidSyntax: v.OptionalSchema<v.BooleanSchema<undefined>, false>;
|
|
179
181
|
}, undefined>;
|
|
180
182
|
/**
|
|
181
183
|
* Default block types available in Stripo
|
|
@@ -497,6 +499,8 @@ export declare const GuidoConfigSchema: v.ObjectSchema<{
|
|
|
497
499
|
readonly unsubscribe: v.OptionalSchema<v.BooleanSchema<undefined>, true>;
|
|
498
500
|
/** Disable modules panel in the editor */
|
|
499
501
|
readonly modulesDisabled: v.OptionalSchema<v.BooleanSchema<undefined>, false>;
|
|
502
|
+
/** Enable Liquid template syntax */
|
|
503
|
+
readonly liquidSyntax: v.OptionalSchema<v.BooleanSchema<undefined>, false>;
|
|
500
504
|
}, undefined>, {}>;
|
|
501
505
|
/** Block configuration */
|
|
502
506
|
readonly blocks: v.OptionalSchema<v.ObjectSchema<{
|
|
@@ -61,6 +61,7 @@ export declare const useConfig: () => {
|
|
|
61
61
|
displayConditions: boolean;
|
|
62
62
|
unsubscribe: boolean;
|
|
63
63
|
modulesDisabled: boolean;
|
|
64
|
+
liquidSyntax: boolean;
|
|
64
65
|
};
|
|
65
66
|
blocks: {
|
|
66
67
|
excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
|
|
@@ -157,6 +158,7 @@ export declare const useConfig: () => {
|
|
|
157
158
|
displayConditions: boolean;
|
|
158
159
|
unsubscribe: boolean;
|
|
159
160
|
modulesDisabled: boolean;
|
|
161
|
+
liquidSyntax: boolean;
|
|
160
162
|
} | null>;
|
|
161
163
|
blocks: import("vue").ComputedRef<{
|
|
162
164
|
excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
export declare const COUPON_PLACEHOLDER_DEFAULT = "{@COUPON_CODE}";
|
|
2
|
+
export declare const COUPON_PLACEHOLDER_LIQUID = "{{ins_coupon_code}}";
|
|
1
3
|
declare const migrationTemplate = "\n <td\n class=\"coupon-block coupon-block-v2 ins-coupon-code esd-block-text esd-extension-block\"\n esd-extension-block-id=\"coupon-block\"\n >\n <p class=\"ins-title\" contenteditable=\"false\">{@COUPON_CODE}</p>\n </td>\n";
|
|
2
4
|
export declare function getDefaultTemplate(): string;
|
|
3
5
|
export default migrationTemplate;
|
|
@@ -66,6 +66,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
66
66
|
displayConditions: boolean;
|
|
67
67
|
unsubscribe: boolean;
|
|
68
68
|
modulesDisabled: boolean;
|
|
69
|
+
liquidSyntax: boolean;
|
|
69
70
|
};
|
|
70
71
|
blocks: {
|
|
71
72
|
excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
|
|
@@ -168,6 +169,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
168
169
|
displayConditions: boolean;
|
|
169
170
|
unsubscribe: boolean;
|
|
170
171
|
modulesDisabled: boolean;
|
|
172
|
+
liquidSyntax: boolean;
|
|
171
173
|
};
|
|
172
174
|
blocks: {
|
|
173
175
|
excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
|
|
@@ -270,6 +272,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
270
272
|
displayConditions: boolean;
|
|
271
273
|
unsubscribe: boolean;
|
|
272
274
|
modulesDisabled: boolean;
|
|
275
|
+
liquidSyntax: boolean;
|
|
273
276
|
};
|
|
274
277
|
blocks: {
|
|
275
278
|
excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
|
|
@@ -372,6 +375,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
372
375
|
displayConditions: boolean;
|
|
373
376
|
unsubscribe: boolean;
|
|
374
377
|
modulesDisabled: boolean;
|
|
378
|
+
liquidSyntax: boolean;
|
|
375
379
|
};
|
|
376
380
|
blocks: {
|
|
377
381
|
excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
|
|
@@ -474,6 +478,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
474
478
|
displayConditions: boolean;
|
|
475
479
|
unsubscribe: boolean;
|
|
476
480
|
modulesDisabled: boolean;
|
|
481
|
+
liquidSyntax: boolean;
|
|
477
482
|
};
|
|
478
483
|
blocks: {
|
|
479
484
|
excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
|
|
@@ -576,6 +581,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
576
581
|
displayConditions: boolean;
|
|
577
582
|
unsubscribe: boolean;
|
|
578
583
|
modulesDisabled: boolean;
|
|
584
|
+
liquidSyntax: boolean;
|
|
579
585
|
};
|
|
580
586
|
blocks: {
|
|
581
587
|
excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
|
|
@@ -678,6 +684,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
678
684
|
displayConditions: boolean;
|
|
679
685
|
unsubscribe: boolean;
|
|
680
686
|
modulesDisabled: boolean;
|
|
687
|
+
liquidSyntax: boolean;
|
|
681
688
|
};
|
|
682
689
|
blocks: {
|
|
683
690
|
excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
|
|
@@ -780,6 +787,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
780
787
|
displayConditions: boolean;
|
|
781
788
|
unsubscribe: boolean;
|
|
782
789
|
modulesDisabled: boolean;
|
|
790
|
+
liquidSyntax: boolean;
|
|
783
791
|
};
|
|
784
792
|
blocks: {
|
|
785
793
|
excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
|
|
@@ -882,6 +890,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
882
890
|
displayConditions: boolean;
|
|
883
891
|
unsubscribe: boolean;
|
|
884
892
|
modulesDisabled: boolean;
|
|
893
|
+
liquidSyntax: boolean;
|
|
885
894
|
};
|
|
886
895
|
blocks: {
|
|
887
896
|
excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
|
|
@@ -984,6 +993,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
984
993
|
displayConditions: boolean;
|
|
985
994
|
unsubscribe: boolean;
|
|
986
995
|
modulesDisabled: boolean;
|
|
996
|
+
liquidSyntax: boolean;
|
|
987
997
|
};
|
|
988
998
|
blocks: {
|
|
989
999
|
excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
|
|
@@ -1086,6 +1096,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
1086
1096
|
displayConditions: boolean;
|
|
1087
1097
|
unsubscribe: boolean;
|
|
1088
1098
|
modulesDisabled: boolean;
|
|
1099
|
+
liquidSyntax: boolean;
|
|
1089
1100
|
};
|
|
1090
1101
|
blocks: {
|
|
1091
1102
|
excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
|
|
@@ -1188,6 +1199,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
1188
1199
|
displayConditions: boolean;
|
|
1189
1200
|
unsubscribe: boolean;
|
|
1190
1201
|
modulesDisabled: boolean;
|
|
1202
|
+
liquidSyntax: boolean;
|
|
1191
1203
|
};
|
|
1192
1204
|
blocks: {
|
|
1193
1205
|
excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
|
|
@@ -1290,6 +1302,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
1290
1302
|
displayConditions: boolean;
|
|
1291
1303
|
unsubscribe: boolean;
|
|
1292
1304
|
modulesDisabled: boolean;
|
|
1305
|
+
liquidSyntax: boolean;
|
|
1293
1306
|
};
|
|
1294
1307
|
blocks: {
|
|
1295
1308
|
excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
|
|
@@ -1392,6 +1405,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
1392
1405
|
displayConditions: boolean;
|
|
1393
1406
|
unsubscribe: boolean;
|
|
1394
1407
|
modulesDisabled: boolean;
|
|
1408
|
+
liquidSyntax: boolean;
|
|
1395
1409
|
};
|
|
1396
1410
|
blocks: {
|
|
1397
1411
|
excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
|
|
@@ -1494,6 +1508,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
1494
1508
|
displayConditions: boolean;
|
|
1495
1509
|
unsubscribe: boolean;
|
|
1496
1510
|
modulesDisabled: boolean;
|
|
1511
|
+
liquidSyntax: boolean;
|
|
1497
1512
|
};
|
|
1498
1513
|
blocks: {
|
|
1499
1514
|
excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
|
|
@@ -1596,6 +1611,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
1596
1611
|
displayConditions: boolean;
|
|
1597
1612
|
unsubscribe: boolean;
|
|
1598
1613
|
modulesDisabled: boolean;
|
|
1614
|
+
liquidSyntax: boolean;
|
|
1599
1615
|
};
|
|
1600
1616
|
blocks: {
|
|
1601
1617
|
excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
|
|
@@ -1698,6 +1714,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
1698
1714
|
displayConditions: boolean;
|
|
1699
1715
|
unsubscribe: boolean;
|
|
1700
1716
|
modulesDisabled: boolean;
|
|
1717
|
+
liquidSyntax: boolean;
|
|
1701
1718
|
};
|
|
1702
1719
|
blocks: {
|
|
1703
1720
|
excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
|
|
@@ -1800,6 +1817,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
1800
1817
|
displayConditions: boolean;
|
|
1801
1818
|
unsubscribe: boolean;
|
|
1802
1819
|
modulesDisabled: boolean;
|
|
1820
|
+
liquidSyntax: boolean;
|
|
1803
1821
|
};
|
|
1804
1822
|
blocks: {
|
|
1805
1823
|
excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { DynamicContent, MergeTag } from '@@/Types/generic';
|
|
2
2
|
export declare const mergeTagToDynamicContent: (mergeTag: MergeTag) => DynamicContent;
|
|
3
|
-
export declare const dynamicContentToMergeTags: (dynamicContentList: DynamicContent[]) => MergeTag[];
|
|
3
|
+
export declare const dynamicContentToMergeTags: (dynamicContentList: DynamicContent[], liquidSyntax?: boolean) => MergeTag[];
|
|
4
4
|
export declare const getCsrfToken: () => string;
|
|
5
5
|
/**
|
|
6
6
|
* URL Parameter utilities
|
|
@@ -1,25 +1,47 @@
|
|
|
1
|
-
const
|
|
2
|
-
const
|
|
3
|
-
text:
|
|
4
|
-
value:
|
|
1
|
+
const s = (e) => {
|
|
2
|
+
const a = e.value.match(/\{\{([^}]+)\}\}/)[1].split("|").map((l) => l.trim()), [n] = a, c = {
|
|
3
|
+
text: e.label,
|
|
4
|
+
value: n || ""
|
|
5
5
|
};
|
|
6
|
-
if (
|
|
7
|
-
const [, l,
|
|
8
|
-
|
|
6
|
+
if (a.length >= 2) {
|
|
7
|
+
const [, l, r] = a;
|
|
8
|
+
if (l.startsWith("default:")) {
|
|
9
|
+
let t = l.slice(8).trim();
|
|
10
|
+
t.startsWith('"') && t.endsWith('"') && (t = t.slice(1, -1)), c.fallback = t;
|
|
11
|
+
} else {
|
|
12
|
+
const t = l.includes("=") ? { key: l.split("=")[0].trim(), value: l.split("=")[1].trim() } : null;
|
|
13
|
+
t ? c.format = t : r || (c.fallback = l), r && (c.fallback = r);
|
|
14
|
+
}
|
|
9
15
|
}
|
|
10
|
-
return
|
|
11
|
-
},
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
return c;
|
|
17
|
+
}, u = (e, f = !1) => e.map((a) => {
|
|
18
|
+
if (a.format)
|
|
19
|
+
return {
|
|
20
|
+
label: `${a.text} | ${a.format.key}=${a.format.value}`,
|
|
21
|
+
value: `{{${a.value}|${a.format.key}=${a.format.value}}}`
|
|
22
|
+
};
|
|
23
|
+
if (f) {
|
|
24
|
+
if (!a.fallback)
|
|
25
|
+
return {
|
|
26
|
+
label: a.text,
|
|
27
|
+
value: `{{ ${a.value} }}`
|
|
28
|
+
};
|
|
29
|
+
const c = !Number.isNaN(Number(a.fallback)) && a.fallback.trim() !== "" ? a.fallback : `"${a.fallback}"`;
|
|
30
|
+
return {
|
|
31
|
+
label: `${a.text} | ${a.fallback}`,
|
|
32
|
+
value: `{{ ${a.value} | default: ${c} }}`
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
return {
|
|
36
|
+
label: a.fallback ? `${a.text} | ${a.fallback}` : a.text,
|
|
37
|
+
value: a.fallback ? `{{${a.value}|${a.fallback}}}` : `{{${a.value}}}`
|
|
38
|
+
};
|
|
39
|
+
}), o = () => {
|
|
40
|
+
var e;
|
|
41
|
+
return ((e = document.head.querySelector('meta[name="csrf-token"]')) == null ? void 0 : e.getAttribute("content")) ?? "";
|
|
20
42
|
};
|
|
21
43
|
export {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
44
|
+
u as dynamicContentToMergeTags,
|
|
45
|
+
o as getCsrfToken,
|
|
46
|
+
s as mergeTagToDynamicContent
|
|
25
47
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@useinsider/guido",
|
|
3
|
-
"version": "3.1.1-beta.
|
|
3
|
+
"version": "3.1.1-beta.d77f343",
|
|
4
4
|
"description": "Guido is a Vue + TypeScript wrapper for Email Plugin. Easily embed the email editor in your Vue applications.",
|
|
5
5
|
"main": "./dist/guido.umd.cjs",
|
|
6
6
|
"module": "./dist/library.js",
|
|
@@ -34,6 +34,7 @@
|
|
|
34
34
|
"dependencies": {
|
|
35
35
|
"@stripoinc/ui-editor-extensions": "3.5.0",
|
|
36
36
|
"@useinsider/design-system-vue": "1.1.0-beta.73ec2fa",
|
|
37
|
+
"@useinsider/guido": "3.1.1-beta.22d798c",
|
|
37
38
|
"@vueuse/core": "11.3.0",
|
|
38
39
|
"lodash-es": "4.17.21",
|
|
39
40
|
"pinia": "2.3.1",
|