@useinsider/guido 3.1.1-beta.13eb7ba → 3.1.1-beta.26ba2a7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/@types/config/schemas.js +10 -8
- package/dist/components/Guido.vue.js +4 -4
- package/dist/components/Guido.vue2.js +91 -81
- package/dist/composables/useHtmlValidator.js +40 -38
- package/dist/config/compiler/unsubscribeCompilerRules.js +37 -37
- package/dist/config/i18n/en/tooltips.json.js +2 -1
- package/dist/guido.css +1 -1
- package/dist/src/@types/config/schemas.d.ts +4 -0
- package/dist/src/composables/useConfig.d.ts +2 -0
- package/dist/src/stores/config.d.ts +18 -0
- package/dist/static/styles/base.css.js +7 -2
- package/dist/utils/templatePreparation.js +16 -14
- package/package.json +1 -1
|
@@ -61,7 +61,7 @@ const m = {
|
|
|
61
61
|
value: t()
|
|
62
62
|
})
|
|
63
63
|
)
|
|
64
|
-
}),
|
|
64
|
+
}), A = o({
|
|
65
65
|
/** Initial HTML content */
|
|
66
66
|
html: e(t(), ""),
|
|
67
67
|
/** Initial CSS content */
|
|
@@ -71,11 +71,13 @@ const m = {
|
|
|
71
71
|
c(f),
|
|
72
72
|
[]
|
|
73
73
|
),
|
|
74
|
+
/** Valid custom field attribute names from the partner's categorized fields */
|
|
75
|
+
customFieldAttributes: e(c(t()), []),
|
|
74
76
|
/** Selected unsubscribe page IDs */
|
|
75
77
|
selectedUnsubscribePages: e(c(p()), []),
|
|
76
78
|
/** Force recreate template in Stripo storage (use true when updating externally modified templates) */
|
|
77
79
|
forceRecreate: e(a(), !1)
|
|
78
|
-
}),
|
|
80
|
+
}), R = o({
|
|
79
81
|
/** Sender display name */
|
|
80
82
|
senderName: e(t(), ""),
|
|
81
83
|
/** Email subject line */
|
|
@@ -88,7 +90,7 @@ const m = {
|
|
|
88
90
|
/** Migration date for template compatibility */
|
|
89
91
|
migrationDate: e(p(), 1759696858),
|
|
90
92
|
/** Email header settings */
|
|
91
|
-
emailHeader: e(
|
|
93
|
+
emailHeader: e(R, { senderName: "", subject: "" }),
|
|
92
94
|
/** Folder name for user-saved modules (used by Stripo plugin panel for path construction) */
|
|
93
95
|
savedModulesFolderName: e(t(), b.SAVED_MODULES),
|
|
94
96
|
/** Folder name for default/prebuilt modules (used by Stripo plugin panel for path construction) */
|
|
@@ -205,7 +207,7 @@ const m = {
|
|
|
205
207
|
"externalValidation must be a function"
|
|
206
208
|
)
|
|
207
209
|
)
|
|
208
|
-
}),
|
|
210
|
+
}), F = o({
|
|
209
211
|
// Required sections
|
|
210
212
|
/** Identity configuration (required) */
|
|
211
213
|
identity: h,
|
|
@@ -213,7 +215,7 @@ const m = {
|
|
|
213
215
|
partner: y,
|
|
214
216
|
// Optional sections (with defaults)
|
|
215
217
|
/** Template content and presets */
|
|
216
|
-
template: e(
|
|
218
|
+
template: e(A, {}),
|
|
217
219
|
/** Editor settings */
|
|
218
220
|
editor: e(C, {}),
|
|
219
221
|
/** UI configuration */
|
|
@@ -237,9 +239,9 @@ export {
|
|
|
237
239
|
E as DefaultBlockTypeSchema,
|
|
238
240
|
f as DynamicContentSchema,
|
|
239
241
|
C as EditorSchema,
|
|
240
|
-
|
|
242
|
+
R as EmailHeaderSchema,
|
|
241
243
|
I as FeaturesSchema,
|
|
242
|
-
|
|
244
|
+
F as GuidoConfigSchema,
|
|
243
245
|
h as IdentitySchema,
|
|
244
246
|
m as MessageType,
|
|
245
247
|
y as PartnerSchema,
|
|
@@ -247,6 +249,6 @@ export {
|
|
|
247
249
|
M as RegexRuleSchema,
|
|
248
250
|
N as RemoveRuleSchema,
|
|
249
251
|
L as ReplaceRuleSchema,
|
|
250
|
-
|
|
252
|
+
A as TemplateSchema,
|
|
251
253
|
T as UISchema
|
|
252
254
|
};
|
|
@@ -3,7 +3,7 @@ import i from "./Guido.vue2.js";
|
|
|
3
3
|
import a from "../_virtual/_plugin-vue2_normalizer.js";
|
|
4
4
|
var t = function() {
|
|
5
5
|
var o = this, r = o._self._c, e = o._self._setupProxy;
|
|
6
|
-
return r("div", { staticClass: "guido-editor__wrapper", class: { "guido-editor__no-header": e.noHeader } }, [r(e.HeaderWrapper, { ref: "headerWrapperRef" }), e.editorStore.isPreviewModeOpen ? r(e.PreviewContainer) : o._e(), r("div", { directives: [{ name: "show", rawName: "v-show", value: !e.previewStore.isLoaded, expression: "!previewStore.isLoaded" }], staticClass: "guido-editor__container", class: { "guido-editor__no-header": e.noHeader }, attrs: { id: "guido-editor" } }), r(e.Toaster), r(e.FilterSelectionDrawer), r(e.SaveAsTemplateDrawer), e.isTestPartner() ? o._e() : r(e.OnboardingWrapper, { on: { "onboarding-finished": function(
|
|
6
|
+
return r("div", { ref: "wrapperRef", staticClass: "guido-editor__wrapper", class: { "guido-editor__no-header": e.noHeader } }, [r(e.HeaderWrapper, { ref: "headerWrapperRef" }), e.editorStore.isPreviewModeOpen ? r(e.PreviewContainer) : o._e(), r("div", { directives: [{ name: "show", rawName: "v-show", value: !e.previewStore.isLoaded, expression: "!previewStore.isLoaded" }], staticClass: "guido-editor__container", class: { "guido-editor__no-header": e.noHeader }, attrs: { id: "guido-editor" } }), r(e.Toaster), r(e.FilterSelectionDrawer), r(e.SaveAsTemplateDrawer), e.isTestPartner() ? o._e() : r(e.OnboardingWrapper, { on: { "onboarding-finished": function(p) {
|
|
7
7
|
return e.emit("onboarding:finished");
|
|
8
8
|
} } }), r(e.UnsubscribeWrapper), r(e.LoadingWrapper)], 1);
|
|
9
9
|
}, n = [], s = /* @__PURE__ */ a(
|
|
@@ -12,9 +12,9 @@ var t = function() {
|
|
|
12
12
|
n,
|
|
13
13
|
!1,
|
|
14
14
|
null,
|
|
15
|
-
"
|
|
15
|
+
"25780af6"
|
|
16
16
|
);
|
|
17
|
-
const
|
|
17
|
+
const u = s.exports;
|
|
18
18
|
export {
|
|
19
|
-
|
|
19
|
+
u as default
|
|
20
20
|
};
|
|
@@ -1,121 +1,131 @@
|
|
|
1
|
-
import { defineComponent as
|
|
2
|
-
import { provideGuidoActions as
|
|
3
|
-
import { usePartner as
|
|
4
|
-
import { useStripo as
|
|
5
|
-
import { useTimerClone as
|
|
6
|
-
import { migrate as
|
|
7
|
-
import { ModuleFolderDefaults as
|
|
8
|
-
import
|
|
9
|
-
import
|
|
10
|
-
import
|
|
11
|
-
import
|
|
12
|
-
import
|
|
13
|
-
import
|
|
14
|
-
import
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
|
|
1
|
+
import { defineComponent as j, defineAsyncComponent as R, ref as A, computed as I, watch as J, onMounted as Q, onUnmounted as X } from "vue";
|
|
2
|
+
import { provideGuidoActions as Y } from "../composables/useGuidoActions.js";
|
|
3
|
+
import { usePartner as Z } from "../composables/usePartner.js";
|
|
4
|
+
import { useStripo as ee } from "../composables/useStripo.js";
|
|
5
|
+
import { useTimerClone as te } from "../composables/useTimerClone.js";
|
|
6
|
+
import { migrate as W } from "../config/migrator/index.js";
|
|
7
|
+
import { ModuleFolderDefaults as B } from "../enums/defaults.js";
|
|
8
|
+
import { RIBBON_SELECTOR as oe } from "../enums/onboarding.js";
|
|
9
|
+
import ne from "./organisms/base/Toaster.vue.js";
|
|
10
|
+
import se from "./organisms/extensions/recommendation/FilterSelectionDrawer.vue.js";
|
|
11
|
+
import re from "./organisms/header/HeaderWrapper.vue.js";
|
|
12
|
+
import ce from "./organisms/LoadingWrapper.vue.js";
|
|
13
|
+
import ae from "./organisms/save-as-template/SaveAsTemplateDrawer.vue.js";
|
|
14
|
+
import ie from "./organisms/unsubscribe/UnsubscribeWrapper.vue.js";
|
|
15
|
+
import { useStripoApi as me } from "../services/stripoApi.js";
|
|
16
|
+
import { useConfigStore as de } from "../stores/config.js";
|
|
17
|
+
import { useDynamicContentStore as le } from "../stores/dynamic-content.js";
|
|
18
|
+
import { useEditorStore as ue } from "../stores/editor.js";
|
|
19
|
+
import { usePreviewStore as pe } from "../stores/preview.js";
|
|
20
|
+
import { useUnsubscribeStore as fe } from "../stores/unsubscribe.js";
|
|
21
|
+
const Re = /* @__PURE__ */ j({
|
|
21
22
|
__name: "Guido",
|
|
22
23
|
props: {
|
|
23
24
|
config: null
|
|
24
25
|
},
|
|
25
26
|
emits: ["dynamic-content:open", "back", "save:start", "save:complete", "on-change", "ready", "onboarding:finished", "test-email:click"],
|
|
26
|
-
setup(
|
|
27
|
-
const
|
|
27
|
+
setup(H, { expose: x, emit: s }) {
|
|
28
|
+
const b = H, G = R(
|
|
28
29
|
() => import("./organisms/email-preview/PreviewContainer.vue.js")
|
|
29
|
-
),
|
|
30
|
+
), z = R(
|
|
30
31
|
() => import("./organisms/onboarding/OnboardingWrapper.vue.js")
|
|
31
|
-
),
|
|
32
|
-
|
|
33
|
-
const
|
|
32
|
+
), S = A(), d = A(), l = le(), g = fe(), a = de();
|
|
33
|
+
a.init(b.config);
|
|
34
|
+
const u = ue(), q = pe(), i = I(() => u.hasChanges), { isTestPartner: K } = Z(), w = () => {
|
|
34
35
|
var e;
|
|
35
|
-
return (e =
|
|
36
|
+
return (e = S.value) == null ? void 0 : e.handleSave(!0);
|
|
36
37
|
}, {
|
|
37
|
-
templateId:
|
|
38
|
-
userId:
|
|
39
|
-
partnerName:
|
|
40
|
-
username:
|
|
41
|
-
template:
|
|
42
|
-
editor:
|
|
43
|
-
} =
|
|
44
|
-
|
|
45
|
-
const
|
|
46
|
-
emailId:
|
|
47
|
-
userId:
|
|
48
|
-
username:
|
|
49
|
-
partnerName:
|
|
50
|
-
savedModulesFolderName:
|
|
51
|
-
defaultModulesFolderName:
|
|
52
|
-
},
|
|
53
|
-
preselectedDynamicContentList:
|
|
38
|
+
templateId: p,
|
|
39
|
+
userId: E,
|
|
40
|
+
partnerName: D,
|
|
41
|
+
username: C,
|
|
42
|
+
template: t,
|
|
43
|
+
editor: r
|
|
44
|
+
} = a, m = (t == null ? void 0 : t.html) || "", T = (t == null ? void 0 : t.css) || "", f = (t == null ? void 0 : t.preselectedDynamicContent) || [], k = (r == null ? void 0 : r.savedModulesFolderName) || B.SAVED_MODULES, F = (r == null ? void 0 : r.defaultModulesFolderName) || B.DEFAULT_MODULES;
|
|
45
|
+
u.templateId = p;
|
|
46
|
+
const v = {
|
|
47
|
+
emailId: p,
|
|
48
|
+
userId: E,
|
|
49
|
+
username: C,
|
|
50
|
+
partnerName: D,
|
|
51
|
+
savedModulesFolderName: k,
|
|
52
|
+
defaultModulesFolderName: F
|
|
53
|
+
}, L = {
|
|
54
|
+
preselectedDynamicContentList: f,
|
|
54
55
|
onReady: () => {
|
|
55
|
-
console.debug("guido:ready"),
|
|
56
|
+
console.debug("guido:ready"), s("ready");
|
|
56
57
|
}
|
|
57
|
-
}, { initPlugin:
|
|
58
|
+
}, { initPlugin: U } = ee(v, L), { getDefaultTemplate: _ } = me(), { cloneTimersOnSave: M, hasTimerBlocks: O } = te(), V = I(() => {
|
|
58
59
|
var e;
|
|
59
|
-
return !((e =
|
|
60
|
+
return !((e = a.ui) != null && e.showHeader);
|
|
60
61
|
});
|
|
61
|
-
|
|
62
|
+
Y({
|
|
62
63
|
onBack: () => {
|
|
63
|
-
console.debug("guido:back"),
|
|
64
|
+
console.debug("guido:back"), s("back");
|
|
64
65
|
},
|
|
65
66
|
onSaveStart: () => {
|
|
66
|
-
console.debug("guido:save:start"),
|
|
67
|
+
console.debug("guido:save:start"), s("save:start");
|
|
67
68
|
},
|
|
68
69
|
onSaveComplete: (e) => {
|
|
69
|
-
const
|
|
70
|
-
console.debug("guido:save:complete",
|
|
70
|
+
const n = { ...e, metadata: v };
|
|
71
|
+
console.debug("guido:save:complete", n), s("save:complete", n);
|
|
71
72
|
},
|
|
72
73
|
onTestEmailClick: () => {
|
|
73
|
-
console.debug("guido:test-email:click"),
|
|
74
|
+
console.debug("guido:test-email:click"), s("test-email:click");
|
|
74
75
|
}
|
|
75
76
|
});
|
|
76
|
-
const
|
|
77
|
-
console.debug("dynamic-content:close", e),
|
|
78
|
-
},
|
|
77
|
+
const P = (e) => {
|
|
78
|
+
console.debug("dynamic-content:close", e), l.setSelectedDynamicContent(e), document.dispatchEvent(new CustomEvent("dynamic-content:close", { detail: e }));
|
|
79
|
+
}, N = () => {
|
|
79
80
|
console.debug("dynamic-content:close", "Without Data"), document.dispatchEvent(new CustomEvent("dynamic-content:close", { detail: { text: "", value: "" } }));
|
|
80
81
|
};
|
|
81
|
-
|
|
82
|
-
|
|
82
|
+
J(() => i.value, () => {
|
|
83
|
+
s("on-change", i.value);
|
|
83
84
|
});
|
|
84
|
-
const
|
|
85
|
-
const
|
|
86
|
-
console.debug("dynamic-content:open",
|
|
85
|
+
const y = (e) => {
|
|
86
|
+
const n = e, { attribute: o, position: $ } = n.detail;
|
|
87
|
+
console.debug("dynamic-content:open", n.detail), s("dynamic-content:open", o, $);
|
|
87
88
|
};
|
|
88
|
-
|
|
89
|
-
|
|
89
|
+
let c = null;
|
|
90
|
+
const h = () => {
|
|
91
|
+
var n;
|
|
92
|
+
const e = document.querySelector(oe);
|
|
93
|
+
(n = d.value) == null || n.style.setProperty("--ribbon-offset", `${(e == null ? void 0 : e.offsetHeight) ?? 0}px`);
|
|
94
|
+
};
|
|
95
|
+
return Q(async () => {
|
|
96
|
+
var n;
|
|
97
|
+
console.debug("Guido says happy coding 🎉"), console.debug("🚗 Ka-Chow"), h();
|
|
98
|
+
const e = (n = d.value) == null ? void 0 : n.parentElement;
|
|
99
|
+
e && (c = new ResizeObserver(h), c.observe(e));
|
|
90
100
|
try {
|
|
91
|
-
|
|
92
|
-
let
|
|
93
|
-
html:
|
|
94
|
-
css:
|
|
101
|
+
g.selectedUnsubscribePages = (t == null ? void 0 : t.selectedUnsubscribePages) || [];
|
|
102
|
+
let o = {
|
|
103
|
+
html: m && await W(m),
|
|
104
|
+
css: T
|
|
95
105
|
};
|
|
96
|
-
|
|
97
|
-
} catch (
|
|
98
|
-
console.error("Failed to initialize Stripo editor:",
|
|
106
|
+
o.html || (o = await _(), o.html = await W(o.html)), O(o.html) && (o.html = await M(o.html)), await U(o), l.selectedDynamicContentList = f;
|
|
107
|
+
} catch (o) {
|
|
108
|
+
console.error("Failed to initialize Stripo editor:", o);
|
|
99
109
|
}
|
|
100
|
-
document.addEventListener("dynamic-content:open",
|
|
101
|
-
}),
|
|
102
|
-
document.removeEventListener("dynamic-content:open",
|
|
110
|
+
document.addEventListener("dynamic-content:open", y);
|
|
111
|
+
}), X(() => {
|
|
112
|
+
c == null || c.disconnect(), document.removeEventListener("dynamic-content:open", y);
|
|
103
113
|
try {
|
|
104
114
|
window.UIEditor.removeEditor();
|
|
105
115
|
} catch {
|
|
106
116
|
console.debug("Failed to remove Stripo editor: No editor found");
|
|
107
117
|
}
|
|
108
|
-
|
|
109
|
-
}),
|
|
118
|
+
a.reset();
|
|
119
|
+
}), x({
|
|
110
120
|
dynamicContent: {
|
|
111
|
-
insert:
|
|
112
|
-
close:
|
|
121
|
+
insert: P,
|
|
122
|
+
close: N
|
|
113
123
|
},
|
|
114
|
-
hasChanges:
|
|
115
|
-
saveSilent:
|
|
116
|
-
}), { __sfc: !0, PreviewContainer:
|
|
124
|
+
hasChanges: i,
|
|
125
|
+
saveSilent: w
|
|
126
|
+
}), { __sfc: !0, PreviewContainer: G, OnboardingWrapper: z, headerWrapperRef: S, wrapperRef: d, dynamicContentStore: l, unsubscribeStore: g, props: b, configStore: a, editorStore: u, previewStore: q, hasChanges: i, isTestPartner: K, saveSilent: w, templateId: p, userId: E, partnerName: D, username: C, templateConfig: t, editorConfig: r, html: m, css: T, preselectedDynamicContentList: f, savedModulesFolderName: k, defaultModulesFolderName: F, emit: s, metadata: v, options: L, initPlugin: U, getDefaultTemplate: _, cloneTimersOnSave: M, hasTimerBlocks: O, noHeader: V, insertDynamicContent: P, closeDynamicContent: N, handleDynamicContentOpen: y, ribbonObserver: c, updateRibbonOffset: h, Toaster: ne, FilterSelectionDrawer: se, HeaderWrapper: re, LoadingWrapper: ce, SaveAsTemplateDrawer: ae, UnsubscribeWrapper: ie };
|
|
117
127
|
}
|
|
118
128
|
});
|
|
119
129
|
export {
|
|
120
|
-
|
|
130
|
+
Re as default
|
|
121
131
|
};
|
|
@@ -9,76 +9,76 @@ import { useHttp as j } from "./useHttp.js";
|
|
|
9
9
|
import { useToaster as q } from "./useToaster.js";
|
|
10
10
|
import { useTranslations as z } from "./useTranslations.js";
|
|
11
11
|
const K = /recommendation-id="(\d+)"/g;
|
|
12
|
-
function U(
|
|
13
|
-
return [...
|
|
12
|
+
function U(a) {
|
|
13
|
+
return [...a.matchAll(K)].map((u) => u[1]);
|
|
14
14
|
}
|
|
15
|
-
function Y(
|
|
16
|
-
return u.some((d) =>
|
|
15
|
+
function Y(a, u) {
|
|
16
|
+
return u.some((d) => a.startsWith(`${d}_`));
|
|
17
17
|
}
|
|
18
18
|
const ce = () => {
|
|
19
19
|
var y, h;
|
|
20
|
-
const { showToaster:
|
|
20
|
+
const { showToaster: a } = q(), { post: u } = j(), { config: d } = L(), r = z(), g = $(), p = ((h = (y = d.value) == null ? void 0 : y.partner) == null ? void 0 : h.messageType) === V.transactional, b = async (e) => {
|
|
21
21
|
const t = await u(
|
|
22
22
|
"/newsletter/template-library/check-template-html-body",
|
|
23
23
|
{ html: X(e) }
|
|
24
24
|
), { status: n, message: l } = t.data;
|
|
25
|
-
return n ||
|
|
25
|
+
return n || a({
|
|
26
26
|
type: c.Alert,
|
|
27
27
|
message: n === void 0 ? l : r("newsletter.invalid-url-link-for-toaster")
|
|
28
|
-
}), r(P), l === r(G) &&
|
|
28
|
+
}), r(P), l === r(G) && a({
|
|
29
29
|
type: c.Alert,
|
|
30
30
|
message: r("newsletter.already-in-progress")
|
|
31
31
|
}), n;
|
|
32
|
-
},
|
|
32
|
+
}, w = (e) => !["if", "endif", "else", "elif", "now"].includes(e.toLowerCase()), S = (e) => ["if", "endif"].includes(e.toLowerCase()), E = (e, s) => {
|
|
33
33
|
const t = e.match(/({%(.*?)%})/g);
|
|
34
34
|
let n = !0;
|
|
35
35
|
return t !== null && !p && t.forEach((l) => {
|
|
36
36
|
const o = l.slice(2, -2).trim().match(/(".*?"|[^"\s]+)(?=\s*|\s*$)/g);
|
|
37
37
|
if (o && o.length > 0) {
|
|
38
|
-
const [
|
|
39
|
-
|
|
38
|
+
const [i] = o;
|
|
39
|
+
w(i) && !s.includes(i) && (a({
|
|
40
40
|
type: c.Warning,
|
|
41
41
|
message: r("custom-fields.invalid-custom-fields")
|
|
42
42
|
}), n = !1);
|
|
43
43
|
}
|
|
44
44
|
}), n;
|
|
45
45
|
}, A = async (e, s, t) => {
|
|
46
|
-
const n = t ? await
|
|
46
|
+
const n = t ? await b(e) : !0;
|
|
47
47
|
return E(e, s) && n;
|
|
48
|
-
}, I = (e) => e.length > 0 ? !0 : (
|
|
48
|
+
}, I = (e) => e.length > 0 ? !0 : (a({
|
|
49
49
|
type: c.Warning,
|
|
50
50
|
message: r("newsletter.html-content-is-empty")
|
|
51
51
|
}), !1), k = (e) => {
|
|
52
52
|
const s = (e.match(/{/gm) || []).length, t = (e.match(/}/gm) || []).length;
|
|
53
|
-
return s > t &&
|
|
53
|
+
return s > t && a({
|
|
54
54
|
type: c.Warning,
|
|
55
55
|
message: r("custom-fields.missing-closing-braces")
|
|
56
|
-
}), s < t &&
|
|
56
|
+
}), s < t && a({
|
|
57
57
|
type: c.Warning,
|
|
58
58
|
message: r("custom-fields.missing-opening-braces")
|
|
59
59
|
}), s === t;
|
|
60
60
|
}, x = (e) => {
|
|
61
61
|
const s = e.match(/{{\s*(\w+\s+((\w+\|\w+)|(\w+)))\s*}}/gm) === null;
|
|
62
|
-
return s ||
|
|
62
|
+
return s || a({
|
|
63
63
|
type: c.Warning,
|
|
64
64
|
message: r("custom-fields.invalid-custom-fields")
|
|
65
65
|
}), s;
|
|
66
66
|
}, T = (e, s) => {
|
|
67
67
|
const t = e.match(/{{([a-zA-Z0-9_\s]*)}}/gm);
|
|
68
68
|
if (t && !p) {
|
|
69
|
-
const n = new Set(s.map((
|
|
70
|
-
if (t.forEach((
|
|
71
|
-
const m =
|
|
69
|
+
const n = new Set(s.map((i) => i.toLowerCase())), l = U(e), o = [];
|
|
70
|
+
if (t.forEach((i) => {
|
|
71
|
+
const m = i.slice(2, -2).trim().toLowerCase();
|
|
72
72
|
(!n.has(m) || m === "") && !Y(m, l) && o.push(m);
|
|
73
73
|
}), o.length > 0) {
|
|
74
|
-
const
|
|
74
|
+
const i = `
|
|
75
75
|
<ul>
|
|
76
76
|
${o.map((m) => `<li>${m}</li>`).join("")}
|
|
77
77
|
</ul>
|
|
78
78
|
`;
|
|
79
|
-
return
|
|
79
|
+
return a({
|
|
80
80
|
type: c.Alert,
|
|
81
|
-
message: r("custom-fields.invalid-custom-fields") +
|
|
81
|
+
message: r("custom-fields.invalid-custom-fields") + i
|
|
82
82
|
}), !1;
|
|
83
83
|
}
|
|
84
84
|
}
|
|
@@ -87,12 +87,12 @@ const ce = () => {
|
|
|
87
87
|
const s = e.match(/{%(.*?)%}/g), t = [];
|
|
88
88
|
let n = !0;
|
|
89
89
|
if (s && s.forEach((l) => {
|
|
90
|
-
const o = l.match(_),
|
|
91
|
-
(!o || l !== m) && !
|
|
90
|
+
const o = l.match(_), i = l.match(H), m = (o == null ? void 0 : o.join("")) || "";
|
|
91
|
+
(!o || l !== m) && !i && (a({
|
|
92
92
|
type: c.Alert,
|
|
93
93
|
message: r("newsletter.display-conditions-invalid-syntax")
|
|
94
94
|
}), n = !1), o && o.forEach((f) => {
|
|
95
|
-
f.trim() === "=" && (
|
|
95
|
+
f.trim() === "=" && (a({
|
|
96
96
|
type: c.Alert,
|
|
97
97
|
message: r("custom-conditions.wrong-equality-operators")
|
|
98
98
|
}), n = !1);
|
|
@@ -102,8 +102,8 @@ const ce = () => {
|
|
|
102
102
|
});
|
|
103
103
|
});
|
|
104
104
|
}), t.length) {
|
|
105
|
-
const l = t.filter((
|
|
106
|
-
l.length !== o.length && (
|
|
105
|
+
const l = t.filter((i) => i === "if"), o = t.filter((i) => i === "endif");
|
|
106
|
+
l.length !== o.length && (a({
|
|
107
107
|
type: c.Alert,
|
|
108
108
|
message: r("custom-conditions.missing-if-endif-tag")
|
|
109
109
|
}), n = !1);
|
|
@@ -111,45 +111,47 @@ const ce = () => {
|
|
|
111
111
|
return n;
|
|
112
112
|
}, W = (e) => {
|
|
113
113
|
const s = (e.match(/{% /gm) || []).length, t = (e.match(/ %}/gm) || []).length, n = s === t;
|
|
114
|
-
return n ||
|
|
114
|
+
return n || a({
|
|
115
115
|
type: c.Warning,
|
|
116
116
|
message: r("custom-conditions.no-space-after-braces")
|
|
117
117
|
}), n;
|
|
118
|
-
}, N = (e) => (e.match(/({%(.*?)%})/g) || []).filter((t) => t.includes("if")).map((t) => (t.match(/{{.*}}/gm) || []).length).reduce((t, n) => t + n, 0) > 0 ? (
|
|
118
|
+
}, N = (e) => (e.match(/({%(.*?)%})/g) || []).filter((t) => t.includes("if")).map((t) => (t.match(/{{.*}}/gm) || []).length).reduce((t, n) => t + n, 0) > 0 ? (a({
|
|
119
119
|
type: c.Warning,
|
|
120
120
|
message: r("custom-conditions.no-braces-inside-if-tag")
|
|
121
|
-
}), !1) : !0, O = () => g.recommendationConfigs && Object.values(g.recommendationConfigs).find((s) => s.filters.find((t) => t.value === "")) !== void 0 ? (
|
|
121
|
+
}), !1) : !0, O = () => g.recommendationConfigs && Object.values(g.recommendationConfigs).find((s) => s.filters.find((t) => t.value === "")) !== void 0 ? (a({
|
|
122
122
|
type: c.Alert,
|
|
123
123
|
message: r("newsletter.fill-all-necessary-fields")
|
|
124
124
|
}), !1) : !0, B = (e) => {
|
|
125
125
|
const s = /src="[^"]*\.(svg|pst)"/gm;
|
|
126
|
-
return e.match(s) === null ? !0 : (
|
|
126
|
+
return e.match(s) === null ? !0 : (a({
|
|
127
127
|
type: c.Alert,
|
|
128
128
|
message: r("newsletter.invalid-image-type")
|
|
129
129
|
}), !1);
|
|
130
130
|
}, R = (e) => {
|
|
131
131
|
const n = new DOMParser().parseFromString(e, "text/html").querySelectorAll(".checkbox-block-v2");
|
|
132
132
|
return Array.from(n).find((o) => {
|
|
133
|
-
var
|
|
134
|
-
return !((
|
|
135
|
-
}) ? (
|
|
133
|
+
var i;
|
|
134
|
+
return !((i = o.id) != null && i.trim());
|
|
135
|
+
}) ? (a({
|
|
136
136
|
type: c.Alert,
|
|
137
137
|
message: r("unsubscribe-templates.select-checkbox-groups")
|
|
138
138
|
}), !1) : !0;
|
|
139
139
|
}, D = (e) => {
|
|
140
140
|
const n = new DOMParser().parseFromString(e, "text/html").querySelectorAll(".radio-button-v2");
|
|
141
141
|
return Array.from(n).find((o) => {
|
|
142
|
-
var
|
|
143
|
-
return !((
|
|
144
|
-
}) ? (
|
|
142
|
+
var i;
|
|
143
|
+
return !((i = o.id) != null && i.trim());
|
|
144
|
+
}) ? (a({
|
|
145
145
|
type: c.Alert,
|
|
146
146
|
message: r("unsubscribe-templates.select-radio-button-groups")
|
|
147
147
|
}), !1) : !0;
|
|
148
148
|
};
|
|
149
149
|
return { validateHtml: async (e, s, t = !1) => {
|
|
150
|
+
var o, i;
|
|
150
151
|
const n = [
|
|
151
|
-
...s.map((
|
|
152
|
-
...M
|
|
152
|
+
...s.map((m) => m.value),
|
|
153
|
+
...M,
|
|
154
|
+
...((i = (o = d.value) == null ? void 0 : o.template) == null ? void 0 : i.customFieldAttributes) ?? []
|
|
153
155
|
];
|
|
154
156
|
return await A(e, n, t) && I(e) && k(e) && x(e) && T(e, n) && F(e) && W(e) && N(e) && O() && B(e) && R(e) && D(e);
|
|
155
157
|
} };
|
|
@@ -1,41 +1,41 @@
|
|
|
1
|
-
import { usePartner as
|
|
2
|
-
import { LINK_REGEXES as
|
|
3
|
-
import { parsePageList as
|
|
4
|
-
import { useConfigStore as
|
|
5
|
-
import { useDynamicContentStore as
|
|
6
|
-
import { useUnsubscribeStore as
|
|
7
|
-
const
|
|
1
|
+
import { usePartner as y } from "../../composables/usePartner.js";
|
|
2
|
+
import { LINK_REGEXES as p, LINK_TYPES as S, INSIDER_ID as m, URLS as R } from "../../enums/unsubscribe.js";
|
|
3
|
+
import { parsePageList as I } from "../../extensions/Blocks/Unsubscribe/utils/utils.js";
|
|
4
|
+
import { useConfigStore as N } from "../../stores/config.js";
|
|
5
|
+
import { useDynamicContentStore as U } from "../../stores/dynamic-content.js";
|
|
6
|
+
import { useUnsubscribeStore as C } from "../../stores/unsubscribe.js";
|
|
7
|
+
const G = [
|
|
8
8
|
{
|
|
9
9
|
id: "add-unsubscribe-link-values",
|
|
10
10
|
description: "Adding unsubscribe link values",
|
|
11
11
|
type: "custom",
|
|
12
12
|
processor: (t) => {
|
|
13
|
-
const { getPartnerName: i } =
|
|
13
|
+
const { getPartnerName: i } = y(), o = N(), s = U(), d = C(), a = o.variationId;
|
|
14
14
|
if (!a)
|
|
15
15
|
return t;
|
|
16
16
|
let e = t;
|
|
17
|
-
const r = `/${i()}/email/${a}?user={{iid}}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
17
|
+
const r = `/${i()}/email/${a}?user={{iid}}`, E = new DOMParser().parseFromString(e, "text/html").querySelectorAll(".unsubscribe-block-v2[data-unsubscribe-page-list]");
|
|
18
|
+
let c = !1, l = !1;
|
|
19
|
+
return E.forEach((f) => {
|
|
20
|
+
var b;
|
|
21
|
+
const u = f.getAttribute("data-unsubscribe-page-list");
|
|
22
|
+
if (!u)
|
|
22
23
|
return;
|
|
23
|
-
const
|
|
24
|
-
(
|
|
25
|
-
)) ?? []
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
}), e;
|
|
24
|
+
const _ = I(u), g = ((b = d.templates) == null ? void 0 : b.filter(
|
|
25
|
+
(n) => _.includes(n.id)
|
|
26
|
+
)) ?? [];
|
|
27
|
+
c = c || g.some((n) => n.type === S.UNSUBSCRIBE_LINK_TYPE), l = l || g.some((n) => n.type === S.PREFERENCES_LINK_TYPE);
|
|
28
|
+
}), (c || l) && (s.selectedDynamicContentList.some((u) => u.value === m) || s.selectedDynamicContentList.push({
|
|
29
|
+
text: m,
|
|
30
|
+
value: m,
|
|
31
|
+
fallback: ""
|
|
32
|
+
})), c && (e = e.replace(
|
|
33
|
+
p.GLOBAL_UNSUBSCRIBE_LINK_REGEX,
|
|
34
|
+
R.UNSUBSCRIBE_URL + r
|
|
35
|
+
)), l && (e = e.replace(
|
|
36
|
+
p.PREFERENCES_UNSUBSCRIBE_LINK_REGEX,
|
|
37
|
+
R.PREFERENCES_URL + r
|
|
38
|
+
)), E.length && (e = e.replace(p.UNSUBSCRIBE_LINK_REGEX, "")), e;
|
|
39
39
|
},
|
|
40
40
|
priority: 60
|
|
41
41
|
},
|
|
@@ -43,7 +43,7 @@ const D = [
|
|
|
43
43
|
id: "remove-data-ogsb-button-styles",
|
|
44
44
|
description: "Removing styles like [data-ogsb] .es-button.es-button-123 { background: red; }",
|
|
45
45
|
type: "regex",
|
|
46
|
-
pattern:
|
|
46
|
+
pattern: p.DATA_OGSB_BUTTON_CSS_REGEX,
|
|
47
47
|
replacement: "",
|
|
48
48
|
flags: "g",
|
|
49
49
|
priority: 61
|
|
@@ -61,16 +61,16 @@ const D = [
|
|
|
61
61
|
type: "custom",
|
|
62
62
|
processor: (t) => {
|
|
63
63
|
let i = t;
|
|
64
|
-
const
|
|
65
|
-
return
|
|
66
|
-
if (
|
|
64
|
+
const o = i.match(/<a[^>]+>(.*?)<\/a>/gm);
|
|
65
|
+
return o && o.forEach((s) => {
|
|
66
|
+
if (s.includes("insEmail=1"))
|
|
67
67
|
return;
|
|
68
|
-
if (
|
|
69
|
-
const a =
|
|
68
|
+
if (s.match(/<a\s+(?:[^>]*?\s+)?href=(["'`”])(.*?)\1\s+(?:[^>]*?\s+)?universal=(["'`”])true\3/gm)) {
|
|
69
|
+
const a = s.replace(/href=(["'`”])(.*?)\1/gm, (e) => {
|
|
70
70
|
const r = e.slice(6, e.length - 1).trim();
|
|
71
71
|
return e.includes("?") || e.includes("#") ? r.slice(-1) === "&" ? e.replace(r, `${r}insEmail=1`) : e.replace(r, `${r}&insEmail=1`) : e.replace(r, `${r}?insEmail=1`);
|
|
72
72
|
});
|
|
73
|
-
i = i.replace(
|
|
73
|
+
i = i.replace(s, a);
|
|
74
74
|
}
|
|
75
75
|
}), i;
|
|
76
76
|
},
|
|
@@ -78,5 +78,5 @@ const D = [
|
|
|
78
78
|
}
|
|
79
79
|
];
|
|
80
80
|
export {
|
|
81
|
-
|
|
81
|
+
G as unsubscribeCompilerRules
|
|
82
82
|
};
|
|
@@ -75,7 +75,8 @@ const e = {
|
|
|
75
75
|
"The image with the invalid link cannot be saved to the image gallery": "Enter a valid image link to continue.",
|
|
76
76
|
"The data source link is unavailable. Please, make sure there is an access to the data source.": "Enter an accessible Data Source Link to contiue.",
|
|
77
77
|
"The file should not exceed the maximum resolution of {maxImageResolution}px.": "Upload files up to 1024x512 pixels to continue.",
|
|
78
|
-
"The option is disabled because was overridden in the Code editor": "The option is disabled because it was overridden in the Code Editor."
|
|
78
|
+
"The option is disabled because was overridden in the Code editor": "The option is disabled because it was overridden in the Code Editor.",
|
|
79
|
+
"Dropdown with a list of available data services, preliminarily created in the Data section → Services tab of the Account.": "Service for Data Collection lets you enter a form submission URL for the recipients to submit."
|
|
79
80
|
};
|
|
80
81
|
export {
|
|
81
82
|
e as default
|
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-079d2bf7] .in-progress-wrapper__progress p span:last-child{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-acff76a8]{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-
|
|
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-079d2bf7] .in-progress-wrapper__progress p span:last-child{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-acff76a8]{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-25780af6]{--ribbon-offset: 0px;position:relative;width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__container[data-v-25780af6]{width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__no-header[data-v-25780af6]{height:calc(100vh - 75px - var(--ribbon-offset))}[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}
|
|
@@ -95,6 +95,8 @@ export declare const TemplateSchema: v.ObjectSchema<{
|
|
|
95
95
|
readonly value: v.StringSchema<undefined>;
|
|
96
96
|
}, undefined>, undefined>;
|
|
97
97
|
}, undefined>, undefined>, readonly []>;
|
|
98
|
+
/** Valid custom field attribute names from the partner's categorized fields */
|
|
99
|
+
readonly customFieldAttributes: v.OptionalSchema<v.ArraySchema<v.StringSchema<undefined>, undefined>, readonly []>;
|
|
98
100
|
/** Selected unsubscribe page IDs */
|
|
99
101
|
readonly selectedUnsubscribePages: v.OptionalSchema<v.ArraySchema<v.NumberSchema<undefined>, undefined>, readonly []>;
|
|
100
102
|
/** Force recreate template in Stripo storage (use true when updating externally modified templates) */
|
|
@@ -422,6 +424,8 @@ export declare const GuidoConfigSchema: v.ObjectSchema<{
|
|
|
422
424
|
readonly value: v.StringSchema<undefined>;
|
|
423
425
|
}, undefined>, undefined>;
|
|
424
426
|
}, undefined>, undefined>, readonly []>;
|
|
427
|
+
/** Valid custom field attribute names from the partner's categorized fields */
|
|
428
|
+
readonly customFieldAttributes: v.OptionalSchema<v.ArraySchema<v.StringSchema<undefined>, undefined>, readonly []>;
|
|
425
429
|
/** Selected unsubscribe page IDs */
|
|
426
430
|
readonly selectedUnsubscribePages: v.OptionalSchema<v.ArraySchema<v.NumberSchema<undefined>, undefined>, readonly []>;
|
|
427
431
|
/** Force recreate template in Stripo storage (use true when updating externally modified templates) */
|
|
@@ -30,6 +30,7 @@ export declare const useConfig: () => {
|
|
|
30
30
|
value: string;
|
|
31
31
|
} | undefined;
|
|
32
32
|
}[];
|
|
33
|
+
customFieldAttributes: string[];
|
|
33
34
|
selectedUnsubscribePages: number[];
|
|
34
35
|
forceRecreate: boolean;
|
|
35
36
|
};
|
|
@@ -121,6 +122,7 @@ export declare const useConfig: () => {
|
|
|
121
122
|
value: string;
|
|
122
123
|
} | undefined;
|
|
123
124
|
}[];
|
|
125
|
+
customFieldAttributes: string[];
|
|
124
126
|
selectedUnsubscribePages: number[];
|
|
125
127
|
forceRecreate: boolean;
|
|
126
128
|
} | null>;
|
|
@@ -35,6 +35,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
35
35
|
value: string;
|
|
36
36
|
} | undefined;
|
|
37
37
|
}[];
|
|
38
|
+
customFieldAttributes: string[];
|
|
38
39
|
selectedUnsubscribePages: number[];
|
|
39
40
|
forceRecreate: boolean;
|
|
40
41
|
};
|
|
@@ -132,6 +133,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
132
133
|
value: string;
|
|
133
134
|
} | undefined;
|
|
134
135
|
}[];
|
|
136
|
+
customFieldAttributes: string[];
|
|
135
137
|
selectedUnsubscribePages: number[];
|
|
136
138
|
forceRecreate: boolean;
|
|
137
139
|
};
|
|
@@ -229,6 +231,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
229
231
|
value: string;
|
|
230
232
|
} | undefined;
|
|
231
233
|
}[];
|
|
234
|
+
customFieldAttributes: string[];
|
|
232
235
|
selectedUnsubscribePages: number[];
|
|
233
236
|
forceRecreate: boolean;
|
|
234
237
|
};
|
|
@@ -326,6 +329,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
326
329
|
value: string;
|
|
327
330
|
} | undefined;
|
|
328
331
|
}[];
|
|
332
|
+
customFieldAttributes: string[];
|
|
329
333
|
selectedUnsubscribePages: number[];
|
|
330
334
|
forceRecreate: boolean;
|
|
331
335
|
};
|
|
@@ -423,6 +427,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
423
427
|
value: string;
|
|
424
428
|
} | undefined;
|
|
425
429
|
}[];
|
|
430
|
+
customFieldAttributes: string[];
|
|
426
431
|
selectedUnsubscribePages: number[];
|
|
427
432
|
forceRecreate: boolean;
|
|
428
433
|
};
|
|
@@ -520,6 +525,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
520
525
|
value: string;
|
|
521
526
|
} | undefined;
|
|
522
527
|
}[];
|
|
528
|
+
customFieldAttributes: string[];
|
|
523
529
|
selectedUnsubscribePages: number[];
|
|
524
530
|
forceRecreate: boolean;
|
|
525
531
|
};
|
|
@@ -617,6 +623,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
617
623
|
value: string;
|
|
618
624
|
} | undefined;
|
|
619
625
|
}[];
|
|
626
|
+
customFieldAttributes: string[];
|
|
620
627
|
selectedUnsubscribePages: number[];
|
|
621
628
|
forceRecreate: boolean;
|
|
622
629
|
};
|
|
@@ -714,6 +721,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
714
721
|
value: string;
|
|
715
722
|
} | undefined;
|
|
716
723
|
}[];
|
|
724
|
+
customFieldAttributes: string[];
|
|
717
725
|
selectedUnsubscribePages: number[];
|
|
718
726
|
forceRecreate: boolean;
|
|
719
727
|
};
|
|
@@ -811,6 +819,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
811
819
|
value: string;
|
|
812
820
|
} | undefined;
|
|
813
821
|
}[];
|
|
822
|
+
customFieldAttributes: string[];
|
|
814
823
|
selectedUnsubscribePages: number[];
|
|
815
824
|
forceRecreate: boolean;
|
|
816
825
|
};
|
|
@@ -908,6 +917,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
908
917
|
value: string;
|
|
909
918
|
} | undefined;
|
|
910
919
|
}[];
|
|
920
|
+
customFieldAttributes: string[];
|
|
911
921
|
selectedUnsubscribePages: number[];
|
|
912
922
|
forceRecreate: boolean;
|
|
913
923
|
};
|
|
@@ -1005,6 +1015,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
1005
1015
|
value: string;
|
|
1006
1016
|
} | undefined;
|
|
1007
1017
|
}[];
|
|
1018
|
+
customFieldAttributes: string[];
|
|
1008
1019
|
selectedUnsubscribePages: number[];
|
|
1009
1020
|
forceRecreate: boolean;
|
|
1010
1021
|
};
|
|
@@ -1102,6 +1113,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
1102
1113
|
value: string;
|
|
1103
1114
|
} | undefined;
|
|
1104
1115
|
}[];
|
|
1116
|
+
customFieldAttributes: string[];
|
|
1105
1117
|
selectedUnsubscribePages: number[];
|
|
1106
1118
|
forceRecreate: boolean;
|
|
1107
1119
|
};
|
|
@@ -1199,6 +1211,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
1199
1211
|
value: string;
|
|
1200
1212
|
} | undefined;
|
|
1201
1213
|
}[];
|
|
1214
|
+
customFieldAttributes: string[];
|
|
1202
1215
|
selectedUnsubscribePages: number[];
|
|
1203
1216
|
forceRecreate: boolean;
|
|
1204
1217
|
};
|
|
@@ -1296,6 +1309,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
1296
1309
|
value: string;
|
|
1297
1310
|
} | undefined;
|
|
1298
1311
|
}[];
|
|
1312
|
+
customFieldAttributes: string[];
|
|
1299
1313
|
selectedUnsubscribePages: number[];
|
|
1300
1314
|
forceRecreate: boolean;
|
|
1301
1315
|
};
|
|
@@ -1393,6 +1407,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
1393
1407
|
value: string;
|
|
1394
1408
|
} | undefined;
|
|
1395
1409
|
}[];
|
|
1410
|
+
customFieldAttributes: string[];
|
|
1396
1411
|
selectedUnsubscribePages: number[];
|
|
1397
1412
|
forceRecreate: boolean;
|
|
1398
1413
|
};
|
|
@@ -1490,6 +1505,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
1490
1505
|
value: string;
|
|
1491
1506
|
} | undefined;
|
|
1492
1507
|
}[];
|
|
1508
|
+
customFieldAttributes: string[];
|
|
1493
1509
|
selectedUnsubscribePages: number[];
|
|
1494
1510
|
forceRecreate: boolean;
|
|
1495
1511
|
};
|
|
@@ -1587,6 +1603,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
1587
1603
|
value: string;
|
|
1588
1604
|
} | undefined;
|
|
1589
1605
|
}[];
|
|
1606
|
+
customFieldAttributes: string[];
|
|
1590
1607
|
selectedUnsubscribePages: number[];
|
|
1591
1608
|
forceRecreate: boolean;
|
|
1592
1609
|
};
|
|
@@ -1684,6 +1701,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
1684
1701
|
value: string;
|
|
1685
1702
|
} | undefined;
|
|
1686
1703
|
}[];
|
|
1704
|
+
customFieldAttributes: string[];
|
|
1687
1705
|
selectedUnsubscribePages: number[];
|
|
1688
1706
|
forceRecreate: boolean;
|
|
1689
1707
|
};
|
|
@@ -1,11 +1,16 @@
|
|
|
1
|
-
const
|
|
1
|
+
const n = `.amp-input-list,
|
|
2
2
|
.button,
|
|
3
3
|
.base-input,
|
|
4
4
|
ue-stripe-thumb,
|
|
5
5
|
.ue-stripe-thumb {
|
|
6
6
|
transition: all .5s ease;
|
|
7
7
|
}
|
|
8
|
+
|
|
9
|
+
:host {
|
|
10
|
+
height: 100% !important;
|
|
11
|
+
min-height: 0 !important;
|
|
12
|
+
}
|
|
8
13
|
`;
|
|
9
14
|
export {
|
|
10
|
-
|
|
15
|
+
n as default
|
|
11
16
|
};
|
|
@@ -3,22 +3,24 @@ import { useHtmlCompiler as C } from "../composables/useHtmlCompiler.js";
|
|
|
3
3
|
import { useRecommendationExtensionStore as T } from "../extensions/Blocks/Recommendation/store/recommendation.js";
|
|
4
4
|
import { useDynamicContentStore as x } from "../stores/dynamic-content.js";
|
|
5
5
|
import { useUnsubscribeStore as y } from "../stores/unsubscribe.js";
|
|
6
|
-
const
|
|
7
|
-
const o = x(),
|
|
6
|
+
const w = () => {
|
|
7
|
+
const o = x(), e = y(), { getCompiledEmail: i, getTemplateData: s, editorSave: n } = f(), { compileHtml: a } = C();
|
|
8
8
|
return {
|
|
9
9
|
prepareTemplateDetails: async () => {
|
|
10
|
-
const { html:
|
|
10
|
+
const { html: m, ampHtml: r = "", ampErrors: c = [] } = await i({
|
|
11
11
|
minimize: !0,
|
|
12
12
|
resetDataSavedFlag: !1
|
|
13
|
-
}), { html: l, css: p, syncModulesIds: u = [] } = await
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
13
|
+
}), { html: l, css: p, syncModulesIds: u = [] } = await s();
|
|
14
|
+
e.selectedUnsubscribePages.length && await e.fetchTemplates();
|
|
15
|
+
const { compiledHtml: d, stats: t, appliedRules: g } = a(m), S = o.getSelectedDynamicContentList, b = T();
|
|
16
|
+
return n(), console.debug("HTML Compilation Stats:", {
|
|
17
|
+
originalSize: t.originalSize,
|
|
18
|
+
compiledSize: t.compiledSize,
|
|
19
|
+
reduction: `${t.reductionPercentage.toFixed(2)}%`,
|
|
20
|
+
appliedRules: g,
|
|
21
|
+
executionTime: `${t.executionTime.toFixed(2)}ms`
|
|
20
22
|
}), {
|
|
21
|
-
dynamicContentList:
|
|
23
|
+
dynamicContentList: S,
|
|
22
24
|
compiledHtml: d,
|
|
23
25
|
rawHtml: l,
|
|
24
26
|
css: p,
|
|
@@ -30,13 +32,13 @@ const E = () => {
|
|
|
30
32
|
configs: {}
|
|
31
33
|
},
|
|
32
34
|
unsubscribe: {
|
|
33
|
-
status:
|
|
34
|
-
config:
|
|
35
|
+
status: e.unsubscribePagesStatus,
|
|
36
|
+
config: e.selectedUnsubscribePages
|
|
35
37
|
}
|
|
36
38
|
};
|
|
37
39
|
}
|
|
38
40
|
};
|
|
39
41
|
};
|
|
40
42
|
export {
|
|
41
|
-
|
|
43
|
+
w as useTemplatePreparation
|
|
42
44
|
};
|
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.26ba2a7",
|
|
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",
|