@useinsider/guido 3.10.1-beta.e36dd40 → 3.11.0-beta.0235cfb
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/composables/useCortexBlueprintBridge.js +7 -7
- package/dist/composables/useCustomInterfaceAppearance.js +16 -18
- package/dist/composables/useEmailTemplateApplier.js +9 -9
- package/dist/composables/useExport.js +18 -18
- package/dist/composables/useHtmlValidator.js +90 -90
- package/dist/composables/useStripo.js +53 -51
- package/dist/composables/useStripoNotifications.js +26 -0
- package/dist/composables/useToaster.js +11 -11
- package/dist/composables/useVersionHistoryApi.js +2 -2
- package/dist/composables/validators/useLiquidValidator.js +1 -1
- package/dist/composables/validators/useUnsubscribeBlockValidator.js +10 -10
- package/dist/config/compiler/recommendationCompilerRules.js +55 -38
- package/dist/config/compiler/utils/recommendationCompilerUtils.js +88 -77
- package/dist/config/i18n/en/labels.json.js +4 -1
- package/dist/config/migrator/index.js +7 -6
- package/dist/config/migrator/socialIconMigrator.js +29 -0
- package/dist/enums/toaster.js +2 -2
- package/dist/enums/unsubscribe.js +41 -36
- package/dist/extensions/Blocks/Checkbox/block.js +5 -3
- package/dist/extensions/Blocks/Checkbox/control.js +42 -28
- package/dist/extensions/Blocks/RadioButton/block.js +9 -7
- package/dist/extensions/Blocks/RadioButton/control.js +64 -50
- package/dist/extensions/Blocks/Recommendation/useRecommendationBlockWarning.js +7 -7
- package/dist/extensions/Blocks/Recommendation/utils/legacyStrategyMap.js +2 -0
- package/dist/package.json.js +1 -1
- package/dist/services/blankTemplate.js +1 -1
- package/dist/services/templateLibraryApi.js +8 -7
- package/dist/src/composables/useStripoNotifications.d.ts +10 -0
- package/dist/src/config/migrator/socialIconMigrator.d.ts +1 -0
- package/dist/src/enums/toaster.d.ts +2 -2
- package/dist/src/enums/unsubscribe.d.ts +2 -0
- package/dist/src/extensions/Blocks/Recommendation/utils/legacyStrategyMap.d.ts +1 -0
- package/dist/src/stores/toaster.d.ts +2 -3
- package/dist/static/styles/components/dropdown-menu.css.js +12 -0
- package/dist/static/styles/components/wide-panel.css.js +7 -0
- package/dist/stores/toaster.js +10 -10
- package/dist/utils/templatePreparation.js +20 -16
- package/package.json +3 -3
- package/dist/static/styles/components/notification.css.js +0 -74
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
import { useConfig as
|
|
2
|
-
import { useRecommendation as
|
|
3
|
-
import {
|
|
4
|
-
import { useRecommendationExtensionStore as
|
|
5
|
-
import { isIgnoredRecommendationBlock as
|
|
6
|
-
function
|
|
7
|
-
const i = `{{${
|
|
1
|
+
import { useConfig as g } from "../../../composables/useConfig.js";
|
|
2
|
+
import { useRecommendation as O } from "../../../composables/useRecommendation.js";
|
|
3
|
+
import { MOBILE_ROW_SELECTOR as q, MOBILE_CONTAINER_SELECTOR as M, CSS_CLASS_RECO_BUTTON as B } from "../../../extensions/Blocks/Recommendation/constants/selectors.js";
|
|
4
|
+
import { useRecommendationExtensionStore as N } from "../../../extensions/Blocks/Recommendation/store/recommendation.js";
|
|
5
|
+
import { isIgnoredRecommendationBlock as T } from "./recommendationIgnoreUtils.js";
|
|
6
|
+
function L(t, r, e, o, c = "") {
|
|
7
|
+
const i = `{{${c}${t}_${r}_${e}}}`, n = `{{${c}${t}_${r}_currency}}`;
|
|
8
8
|
return o === "before" ? `${n} ${i}` : `${i} ${n}`;
|
|
9
9
|
}
|
|
10
|
-
function
|
|
10
|
+
function _(t) {
|
|
11
11
|
let r = t;
|
|
12
12
|
for (; r.children.length === 1; )
|
|
13
13
|
[r] = r.children;
|
|
14
14
|
return r;
|
|
15
15
|
}
|
|
16
|
-
function A(t, r, e, o,
|
|
16
|
+
function A(t, r, e, o, c, i) {
|
|
17
17
|
switch (r) {
|
|
18
18
|
case "productImage": {
|
|
19
19
|
const n = t.querySelector("img");
|
|
20
20
|
n && (n.setAttribute("src", `{{${i}${e}_${o}_image_url}}`), n.setAttribute("alt", `{{${i}${e}_${o}_name}}`));
|
|
21
|
-
const
|
|
22
|
-
|
|
21
|
+
const s = t.querySelector("a");
|
|
22
|
+
s && (s.setAttribute("href", `{{${i}${e}_${o}_url}}`), s.classList.add(B));
|
|
23
23
|
break;
|
|
24
24
|
}
|
|
25
25
|
case "productName": {
|
|
26
26
|
const n = t.querySelector("p");
|
|
27
|
-
n && (
|
|
27
|
+
n && (_(n).textContent = `{{${i}${e}_${o}_name}}`);
|
|
28
28
|
break;
|
|
29
29
|
}
|
|
30
30
|
// Inline mode ("Move to next line" OFF) merges BOTH prices into one row
|
|
@@ -33,15 +33,15 @@ function A(t, r, e, o, s, i) {
|
|
|
33
33
|
case "productPrice":
|
|
34
34
|
case "productOldPrice": {
|
|
35
35
|
const n = (l, d) => {
|
|
36
|
-
l && (
|
|
36
|
+
l && (_(l).textContent = L(
|
|
37
37
|
e,
|
|
38
38
|
o,
|
|
39
39
|
d,
|
|
40
|
-
|
|
40
|
+
c,
|
|
41
41
|
i
|
|
42
42
|
));
|
|
43
|
-
},
|
|
44
|
-
n(
|
|
43
|
+
}, s = t.querySelector(".product-price p"), a = t.querySelector(".product-old-price p"), u = !s && !a ? t.querySelector("p") : null;
|
|
44
|
+
n(s ?? (r === "productPrice" ? u : null), "price"), n(a ?? (r === "productOldPrice" ? u : null), "original_price");
|
|
45
45
|
break;
|
|
46
46
|
}
|
|
47
47
|
case "productButton": {
|
|
@@ -53,8 +53,8 @@ function A(t, r, e, o, s, i) {
|
|
|
53
53
|
const n = t.querySelector(".omnibus-price-value");
|
|
54
54
|
if (n) {
|
|
55
55
|
n.textContent = `{{${i}${e}_${o}_omnibus_price}}`;
|
|
56
|
-
const
|
|
57
|
-
|
|
56
|
+
const s = n.closest("p");
|
|
57
|
+
s && (s.setAttribute("product-attr", "omnibus_price"), s.setAttribute("composition", "true"));
|
|
58
58
|
}
|
|
59
59
|
break;
|
|
60
60
|
}
|
|
@@ -62,112 +62,112 @@ function A(t, r, e, o, s, i) {
|
|
|
62
62
|
const n = t.querySelector(".omnibus-discount-value");
|
|
63
63
|
if (n) {
|
|
64
64
|
n.textContent = `{{${i}${e}_${o}_omnibus_discount}}`;
|
|
65
|
-
const
|
|
66
|
-
|
|
65
|
+
const s = n.closest("p");
|
|
66
|
+
s && (s.setAttribute("product-attr", "omnibus_discount"), s.setAttribute("composition", "true"));
|
|
67
67
|
}
|
|
68
68
|
break;
|
|
69
69
|
}
|
|
70
70
|
default: {
|
|
71
71
|
const n = t.getAttribute("product-attr") ? t : t.querySelector("[product-attr]");
|
|
72
72
|
if (n) {
|
|
73
|
-
const
|
|
74
|
-
a && (
|
|
73
|
+
const s = n.getAttribute("product-attr"), a = n.querySelector("p");
|
|
74
|
+
a && (_(a).textContent = `{{${i}${e}_${o}_${s}}}`);
|
|
75
75
|
}
|
|
76
76
|
break;
|
|
77
77
|
}
|
|
78
78
|
}
|
|
79
79
|
}
|
|
80
|
-
const
|
|
81
|
-
function
|
|
82
|
-
const
|
|
80
|
+
const P = "name";
|
|
81
|
+
function b(t, r, e, o) {
|
|
82
|
+
const c = `${o}${r}_${e}_${P}`;
|
|
83
83
|
return {
|
|
84
|
-
open: t.createComment(`{% if ${
|
|
84
|
+
open: t.createComment(`{% if ${c} and ${c} != "" %}`),
|
|
85
85
|
close: t.createComment("{% endif %}")
|
|
86
86
|
};
|
|
87
87
|
}
|
|
88
|
-
function
|
|
89
|
-
return
|
|
88
|
+
function R(t, r, e) {
|
|
89
|
+
return b(t, r, 0, e);
|
|
90
90
|
}
|
|
91
|
-
function
|
|
91
|
+
function D(t, r, e, o) {
|
|
92
92
|
if (!t.innerHTML.includes("{{"))
|
|
93
93
|
return;
|
|
94
|
-
const { open:
|
|
95
|
-
t.insertBefore(
|
|
94
|
+
const { open: c, close: i } = b(t.ownerDocument, r, e, o);
|
|
95
|
+
t.insertBefore(c, t.firstChild), t.appendChild(i);
|
|
96
96
|
}
|
|
97
|
-
function
|
|
98
|
-
var n,
|
|
97
|
+
function w(t, r, e, o) {
|
|
98
|
+
var n, s;
|
|
99
99
|
if (!t.innerHTML.includes("{{"))
|
|
100
100
|
return;
|
|
101
|
-
const { open:
|
|
102
|
-
(n = t.parentNode) == null || n.insertBefore(
|
|
101
|
+
const { open: c, close: i } = b(t.ownerDocument, r, e, o);
|
|
102
|
+
(n = t.parentNode) == null || n.insertBefore(c, t), (s = t.parentNode) == null || s.insertBefore(i, t.nextSibling);
|
|
103
103
|
}
|
|
104
|
-
function
|
|
104
|
+
function W(t, r, e, o) {
|
|
105
105
|
t.querySelectorAll(".recommendation-product-row").forEach((i, n) => {
|
|
106
106
|
i.querySelectorAll("[data-attribute-type]").forEach((a) => {
|
|
107
107
|
const u = a.getAttribute("data-attribute-type") || "", l = a.querySelectorAll(".attribute-cell");
|
|
108
108
|
l.length > 0 ? l.forEach((d) => {
|
|
109
109
|
A(d, u, r, n, e, o);
|
|
110
110
|
}) : A(a, u, r, n, e, o);
|
|
111
|
-
}),
|
|
111
|
+
}), w(i, r, n, o);
|
|
112
112
|
});
|
|
113
113
|
}
|
|
114
|
-
function
|
|
115
|
-
const
|
|
116
|
-
if (!
|
|
114
|
+
function v(t, r, e, o) {
|
|
115
|
+
const c = t.querySelectorAll(".recommendation-product-row");
|
|
116
|
+
if (!c.length)
|
|
117
117
|
return;
|
|
118
|
-
const [i] =
|
|
119
|
-
|
|
118
|
+
const [i] = c, n = i.querySelector("[data-attribute-type]"), s = n ? n.querySelectorAll(".attribute-cell").length : 1;
|
|
119
|
+
c.forEach((a, u) => {
|
|
120
120
|
a.querySelectorAll("[data-attribute-type]").forEach((d) => {
|
|
121
121
|
const p = d.getAttribute("data-attribute-type") || "";
|
|
122
|
-
d.querySelectorAll(".attribute-cell").forEach((
|
|
123
|
-
const h = u *
|
|
124
|
-
A(
|
|
122
|
+
d.querySelectorAll(".attribute-cell").forEach((f, m) => {
|
|
123
|
+
const h = u * s + m;
|
|
124
|
+
A(f, p, r, h, e, o), D(f, r, h, o);
|
|
125
125
|
});
|
|
126
126
|
});
|
|
127
127
|
});
|
|
128
128
|
}
|
|
129
|
-
function
|
|
129
|
+
function H(t, r, e, o) {
|
|
130
130
|
t.querySelectorAll(".ins-recommendation-product-container").forEach((i) => {
|
|
131
|
-
|
|
131
|
+
v(i, r, e, o);
|
|
132
132
|
});
|
|
133
133
|
}
|
|
134
|
-
function
|
|
135
|
-
const o = t.getAttribute("data-layout") || "grid",
|
|
136
|
-
o === "list" ?
|
|
134
|
+
function F(t, r, e) {
|
|
135
|
+
const o = t.getAttribute("data-layout") || "grid", c = t.getAttribute("currency-alignment") || "after";
|
|
136
|
+
o === "list" ? W(t, r, c, e) : H(t, r, c, e);
|
|
137
137
|
}
|
|
138
|
-
function
|
|
139
|
-
const o = new RegExp(`${r}\\s*:\\s*(\\d+)\\s*px`, "i"),
|
|
140
|
-
return
|
|
138
|
+
function y(t, r, e) {
|
|
139
|
+
const o = new RegExp(`${r}\\s*:\\s*(\\d+)\\s*px`, "i"), c = t.match(o);
|
|
140
|
+
return c ? parseInt(c[1]) : e;
|
|
141
141
|
}
|
|
142
|
-
function
|
|
142
|
+
function $(t) {
|
|
143
143
|
const r = t.trim();
|
|
144
144
|
return r.endsWith("%") ? parseFloat(r) < 100 : /^\d+(?:\.\d+)?(?:px)?$/.test(r) && parseInt(r) > 0;
|
|
145
145
|
}
|
|
146
|
-
function
|
|
146
|
+
function C(t) {
|
|
147
147
|
const r = t.getAttribute("width");
|
|
148
|
-
if (r &&
|
|
148
|
+
if (r && $(r))
|
|
149
149
|
return r.trim();
|
|
150
150
|
const e = (t.getAttribute("style") || "").match(/(?:^|[;\s])width\s*:\s*(\d+(?:\.\d+)?(?:px|%))/i);
|
|
151
|
-
return e &&
|
|
151
|
+
return e && $(e[1]) ? e[1] : null;
|
|
152
152
|
}
|
|
153
|
-
function
|
|
153
|
+
function G(t, r) {
|
|
154
154
|
let e = t.parentElement;
|
|
155
155
|
for (; e && e !== r; ) {
|
|
156
|
-
if (e.tagName === "TD" &&
|
|
156
|
+
if (e.tagName === "TD" && C(e))
|
|
157
157
|
return e;
|
|
158
158
|
e = e.parentElement;
|
|
159
159
|
}
|
|
160
160
|
return null;
|
|
161
161
|
}
|
|
162
|
-
function
|
|
163
|
-
const r = t.getAttribute("style") || "", e =
|
|
164
|
-
|
|
162
|
+
function V(t) {
|
|
163
|
+
const r = t.getAttribute("style") || "", e = y(r, "width", 600), o = y(r, "padding", 0) * 2, c = Math.max(0, e - o);
|
|
164
|
+
c !== 0 && t.querySelectorAll("img.adapt-img").forEach((i) => {
|
|
165
165
|
if (i.hasAttribute("width"))
|
|
166
166
|
return;
|
|
167
|
-
const n =
|
|
167
|
+
const n = G(i, t);
|
|
168
168
|
if (!n)
|
|
169
169
|
return;
|
|
170
|
-
const
|
|
170
|
+
const s = C(n), a = y(n.getAttribute("style") || "", "padding", 0) * 2, u = s.endsWith("%") ? Math.floor(c * parseFloat(s) / 100) : parseInt(s), l = Math.max(1, u - a);
|
|
171
171
|
i.setAttribute("width", String(l));
|
|
172
172
|
const d = i.getAttribute("style") || "";
|
|
173
173
|
if (!/\bwidth\s*:\s*\d/i.test(d)) {
|
|
@@ -176,32 +176,43 @@ function G(t) {
|
|
|
176
176
|
}
|
|
177
177
|
});
|
|
178
178
|
}
|
|
179
|
-
|
|
179
|
+
const E = "MSO_MOBILE_HIDE_START", U = "MSO_MOBILE_HIDE_END";
|
|
180
|
+
function X(t, r) {
|
|
181
|
+
t.querySelectorAll(q).forEach((e) => {
|
|
182
|
+
var i, n;
|
|
183
|
+
const o = e.querySelector(M);
|
|
184
|
+
if (!o || o.children.length === 0)
|
|
185
|
+
return;
|
|
186
|
+
const c = e.previousSibling;
|
|
187
|
+
(c == null ? void 0 : c.nodeType) === Node.COMMENT_NODE && c.data === E || ((i = e.parentNode) == null || i.insertBefore(r.createComment(E), e), (n = e.parentNode) == null || n.insertBefore(r.createComment(U), e.nextSibling));
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
function j(t, r) {
|
|
180
191
|
const e = t.match(/<!DOCTYPE[^>]*>/i);
|
|
181
192
|
return (e ? `${e[0]}
|
|
182
193
|
` : "") + r.documentElement.outerHTML;
|
|
183
194
|
}
|
|
184
|
-
function
|
|
195
|
+
function Q(t) {
|
|
185
196
|
const r = t.replaceAll("{%", "<!--{%").replaceAll("%}", "%}-->"), e = new DOMParser().parseFromString(r, "text/html"), o = e.querySelectorAll(".recommendation-block-v2");
|
|
186
197
|
if (!o.length)
|
|
187
198
|
return t;
|
|
188
|
-
const { buildCampaignUrl:
|
|
199
|
+
const { buildCampaignUrl: c } = O(), i = N();
|
|
189
200
|
i.recommendationCampaignUrls = {};
|
|
190
|
-
const { isFeatureEnabled: n } =
|
|
201
|
+
const { isFeatureEnabled: n } = g(), s = n("liquidSyntax") ? "reco_" : "";
|
|
191
202
|
return o.forEach((u) => {
|
|
192
|
-
var d, p,
|
|
203
|
+
var d, p, S, f;
|
|
193
204
|
const l = u.getAttribute("recommendation-id");
|
|
194
205
|
if (l) {
|
|
195
|
-
if ((d = u.parentNode) == null || d.insertBefore(e.createComment("REC_START"), u), (p = u.parentNode) == null || p.insertBefore(e.createComment("REC_END"), u.nextSibling), u.querySelectorAll('[data-visibility="0"]').forEach((
|
|
196
|
-
|
|
197
|
-
const { open:
|
|
198
|
-
(
|
|
206
|
+
if ((d = u.parentNode) == null || d.insertBefore(e.createComment("REC_START"), u), (p = u.parentNode) == null || p.insertBefore(e.createComment("REC_END"), u.nextSibling), u.querySelectorAll('[data-visibility="0"]').forEach((m) => m.remove()), c(l), X(u, e), !T(u)) {
|
|
207
|
+
F(u, l, s);
|
|
208
|
+
const { open: m, close: h } = R(e, l, s);
|
|
209
|
+
(S = u.parentNode) == null || S.insertBefore(m, u), (f = u.parentNode) == null || f.insertBefore(h, u.nextSibling);
|
|
199
210
|
}
|
|
200
|
-
|
|
211
|
+
V(u);
|
|
201
212
|
}
|
|
202
|
-
}),
|
|
213
|
+
}), j(r, e).replaceAll("<!--{%", "{%").replaceAll("%}-->", "%}").replaceAll("<!--{%", "{%").replaceAll("%}-->", "%}");
|
|
203
214
|
}
|
|
204
215
|
export {
|
|
205
|
-
|
|
206
|
-
|
|
216
|
+
L as formatPriceVariable,
|
|
217
|
+
Q as prepareRecommendationBlocks
|
|
207
218
|
};
|
|
@@ -4,7 +4,10 @@ const e = "Items", o = {
|
|
|
4
4
|
"Recommendation Block": "Recommendation",
|
|
5
5
|
Items: e,
|
|
6
6
|
"This block is switched from the Old Version to the New Version. We recommend you check the Recommendation block and test your message to ensure it works properly.": "This block is switched from the Old Version to the New Version. We recommend you check the Recommendation block and test your message to ensure it works properly.",
|
|
7
|
-
"This block is switched from the Old Version to the New Version. We recommend you check the Items block and test your message to ensure it works properly.": "This block is switched from the Old Version to the New Version. We recommend you check the Items block and test your message to ensure it works properly."
|
|
7
|
+
"This block is switched from the Old Version to the New Version. We recommend you check the Items block and test your message to ensure it works properly.": "This block is switched from the Old Version to the New Version. We recommend you check the Items block and test your message to ensure it works properly.",
|
|
8
|
+
"Pixel Tracking Opt-in": "Pixel Tracking Opt-in",
|
|
9
|
+
"OPT-IN SELECTION": "OPT-IN SELECTION",
|
|
10
|
+
"UNSUBSCRIBE GROUPS": "UNSUBSCRIBE GROUPS"
|
|
8
11
|
};
|
|
9
12
|
export {
|
|
10
13
|
e as Items,
|
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
import { migrateCheckbox as
|
|
1
|
+
import { migrateCheckbox as t } from "./checkboxMigrator.js";
|
|
2
2
|
import { migrateCouponBlock as i } from "./couponBlockMigrator.js";
|
|
3
3
|
import { migrateItemsBlock as e } from "./itemsBlockMigrator.js";
|
|
4
4
|
import { migrateRadioButton as a } from "./radioButtonMigrator.js";
|
|
5
|
-
import { migrateRecommendation as
|
|
5
|
+
import { migrateRecommendation as c } from "./recommendationMigrator.js";
|
|
6
|
+
import { migrateSocialIcons as g } from "./socialIconMigrator.js";
|
|
6
7
|
import { migrateUnsubscribe as n } from "./unsubscribeMigrator.js";
|
|
7
|
-
const
|
|
8
|
-
let m =
|
|
9
|
-
return m =
|
|
8
|
+
const k = async (o, r = {}) => {
|
|
9
|
+
let m = o;
|
|
10
|
+
return m = t(m), m = a(m), m = await n(m), m = i(m), m = c(m, r), m = e(m), m = g(m), m;
|
|
10
11
|
};
|
|
11
12
|
export {
|
|
12
|
-
|
|
13
|
+
k as migrate
|
|
13
14
|
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
var u = Object.defineProperty;
|
|
2
|
+
var T = (e, t, r) => t in e ? u(e, t, { enumerable: !0, configurable: !0, writable: !0, value: r }) : e[t] = r;
|
|
3
|
+
var s = (e, t, r) => T(e, typeof t != "symbol" ? t + "" : t, r);
|
|
4
|
+
const i = "twitter", E = "xcom", o = "esd-tmp-icon-type", p = new RegExp(i, "i");
|
|
5
|
+
class g {
|
|
6
|
+
constructor() {
|
|
7
|
+
s(this, "parser");
|
|
8
|
+
this.parser = new DOMParser();
|
|
9
|
+
}
|
|
10
|
+
migrate(t) {
|
|
11
|
+
try {
|
|
12
|
+
if (!p.test(t))
|
|
13
|
+
return t;
|
|
14
|
+
const r = this.parser.parseFromString(t, "text/html"), a = r.querySelectorAll(`[${o}]`);
|
|
15
|
+
let n = !1;
|
|
16
|
+
return a.forEach((c) => {
|
|
17
|
+
String(c.getAttribute(o)).toLowerCase() === i && (c.setAttribute(o, E), n = !0);
|
|
18
|
+
}), n ? r.documentElement.outerHTML : t;
|
|
19
|
+
} catch (r) {
|
|
20
|
+
return console.error("SocialIconMigrator failed:", r), t;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function _(e) {
|
|
25
|
+
return new g().migrate(e);
|
|
26
|
+
}
|
|
27
|
+
export {
|
|
28
|
+
_ as migrateSocialIcons
|
|
29
|
+
};
|
package/dist/enums/toaster.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var
|
|
1
|
+
var n = /* @__PURE__ */ ((r) => (r.Success = "success", r.Warning = "warning", r.Error = "error", r.Info = "information", r))(n || {});
|
|
2
2
|
export {
|
|
3
|
-
|
|
3
|
+
n as ToasterTypeOptions
|
|
4
4
|
};
|
|
@@ -1,35 +1,38 @@
|
|
|
1
1
|
import { useTranslations as R } from "../composables/useTranslations.js";
|
|
2
|
-
import { ProductType as
|
|
2
|
+
import { ProductType as s } from "../@types/config/schemas.js";
|
|
3
3
|
import "../@types/config/defaults.js";
|
|
4
|
-
import { getEnvironmentPrefix as
|
|
5
|
-
const
|
|
4
|
+
import { getEnvironmentPrefix as _ } from "../utils/environmentUtil.js";
|
|
5
|
+
const B = {
|
|
6
6
|
UNSUBSCRIBE_LINK_TYPE: 1,
|
|
7
7
|
PREFERENCES_LINK_TYPE: 3
|
|
8
|
-
},
|
|
8
|
+
}, C = {
|
|
9
9
|
UNSUBSCRIBE_LINK_REGEX: /{{ins-unsubscribe-link}}/g,
|
|
10
10
|
DATA_OGSB_BUTTON_CSS_REGEX: "\\[data-ogsb\\]\\s*\\.es-button\\.es-button-[0-9]+\\s*\\{(?:[^\\}]*)\\}",
|
|
11
11
|
GLOBAL_UNSUBSCRIBE_LINK_REGEX: /{{ins-global-unsubscribe-link}}/g,
|
|
12
12
|
PREFERENCES_UNSUBSCRIBE_LINK_REGEX: /{{ins-preferences-unsubscribe-link}}/g
|
|
13
|
-
},
|
|
14
|
-
UNSUBSCRIBE_URL: `https://mail.${
|
|
15
|
-
PREFERENCES_URL: `https://mail.${
|
|
16
|
-
},
|
|
17
|
-
[
|
|
18
|
-
[
|
|
19
|
-
[
|
|
20
|
-
},
|
|
13
|
+
}, e = _(), U = {
|
|
14
|
+
UNSUBSCRIBE_URL: `https://mail.${e}.com/user/v1/unsub`,
|
|
15
|
+
PREFERENCES_URL: `https://mail.${e}.com/user/v1/prefs`
|
|
16
|
+
}, o = {
|
|
17
|
+
[s.EMAIL]: "email",
|
|
18
|
+
[s.ARCHITECT]: "journey",
|
|
19
|
+
[s.UNSUBSCRIBE_PAGES]: "email"
|
|
20
|
+
}, c = "iid", S = "G", N = "P", u = [
|
|
21
|
+
S,
|
|
22
|
+
N
|
|
23
|
+
], T = () => ({
|
|
21
24
|
name: R()("onboarding-center.email-subscribers-global-unsub-card-title"),
|
|
22
|
-
sendGridId:
|
|
23
|
-
}),
|
|
25
|
+
sendGridId: S
|
|
26
|
+
}), b = "/email/unsubscribe-pages", E = {
|
|
24
27
|
GLOBAL_UNSUBSCRIBE: 1,
|
|
25
28
|
GLOBAL_UNSUBSCRIBE_CONFIRMATION_PAGE: 2,
|
|
26
29
|
SUBSCRIPTION_PREFERENCE_CENTER: 3,
|
|
27
30
|
SUBSCRIPTION_PREFERENCE_CONFIRMATION: 4,
|
|
28
31
|
RESUBSCRIBE: 5
|
|
29
|
-
},
|
|
32
|
+
}, P = {
|
|
30
33
|
[E.GLOBAL_UNSUBSCRIBE]: "custom-unsubscribe",
|
|
31
34
|
[E.SUBSCRIPTION_PREFERENCE_CENTER]: "custom-preferences"
|
|
32
|
-
},
|
|
35
|
+
}, L = {
|
|
33
36
|
[E.GLOBAL_UNSUBSCRIBE]: [
|
|
34
37
|
E.GLOBAL_UNSUBSCRIBE,
|
|
35
38
|
E.GLOBAL_UNSUBSCRIBE_CONFIRMATION_PAGE,
|
|
@@ -39,32 +42,34 @@ const i = {
|
|
|
39
42
|
E.SUBSCRIPTION_PREFERENCE_CENTER,
|
|
40
43
|
E.SUBSCRIPTION_PREFERENCE_CONFIRMATION
|
|
41
44
|
]
|
|
42
|
-
},
|
|
43
|
-
const
|
|
45
|
+
}, O = () => {
|
|
46
|
+
const n = R();
|
|
44
47
|
return {
|
|
45
|
-
[E.GLOBAL_UNSUBSCRIBE]:
|
|
46
|
-
[E.GLOBAL_UNSUBSCRIBE_CONFIRMATION_PAGE]:
|
|
47
|
-
[E.RESUBSCRIBE]:
|
|
48
|
-
[E.SUBSCRIPTION_PREFERENCE_CENTER]:
|
|
49
|
-
[E.SUBSCRIPTION_PREFERENCE_CONFIRMATION]:
|
|
48
|
+
[E.GLOBAL_UNSUBSCRIBE]: n("unsubscription-preference.type-global-unsubscribe"),
|
|
49
|
+
[E.GLOBAL_UNSUBSCRIBE_CONFIRMATION_PAGE]: n("unsubscription-preference.type-global-unsubscription-confirmation"),
|
|
50
|
+
[E.RESUBSCRIBE]: n("unsubscription-preference.type-resubscribe"),
|
|
51
|
+
[E.SUBSCRIPTION_PREFERENCE_CENTER]: n("unsubscription-preference.type-subscription-preferences-center"),
|
|
52
|
+
[E.SUBSCRIPTION_PREFERENCE_CONFIRMATION]: n("unsubscription-preference.type-subscription-preferences-confirmation")
|
|
50
53
|
};
|
|
51
|
-
},
|
|
54
|
+
}, p = {
|
|
52
55
|
default: "{{ins-unsubscribe-link}}",
|
|
53
56
|
[E.GLOBAL_UNSUBSCRIBE]: "{{ins-global-unsubscribe-link}}",
|
|
54
57
|
[E.SUBSCRIPTION_PREFERENCE_CENTER]: "{{ins-preferences-unsubscribe-link}}"
|
|
55
58
|
};
|
|
56
59
|
export {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
60
|
+
S as DEFAULT_UNSUBSCRIBE_GROUP_SEND_GRID_ID,
|
|
61
|
+
c as INSIDER_ID,
|
|
62
|
+
C as LINK_REGEXES,
|
|
63
|
+
B as LINK_TYPES,
|
|
64
|
+
p as MERGE_TAGS,
|
|
62
65
|
E as PAGE_TYPES,
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
b as
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
66
|
+
N as PIXEL_TRACKING_SEND_GRID_ID,
|
|
67
|
+
o as PRODUCT_TYPE_URL_SEGMENTS,
|
|
68
|
+
L as TYPE_COLLECTIONS,
|
|
69
|
+
b as UNSUBSCRIBE_PAGES_LINK,
|
|
70
|
+
u as UNSUBSCRIBE_SENTINEL_SEND_GRID_IDS,
|
|
71
|
+
P as UNSUBSCRIBE_SYNC_MODULE_TYPES,
|
|
72
|
+
U as URLS,
|
|
73
|
+
T as getDefaultUnsubscribeGroup,
|
|
74
|
+
O as getTypeTranslations
|
|
70
75
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Block as e, BlockCompositionType as t } from "../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
|
|
2
2
|
import { getDefaultTemplate as o } from "./template.js";
|
|
3
3
|
const r = "checkbox-block";
|
|
4
|
-
class
|
|
4
|
+
class l extends e {
|
|
5
5
|
constructor() {
|
|
6
6
|
super();
|
|
7
7
|
}
|
|
@@ -18,7 +18,9 @@ class s extends e {
|
|
|
18
18
|
return this.api.translate("Checkbox Block");
|
|
19
19
|
}
|
|
20
20
|
getDescription() {
|
|
21
|
-
return this.api.translate(
|
|
21
|
+
return this.api.translate(
|
|
22
|
+
"Checkbox lets you select Unsubscribe and Preference Type for users to manage their opt-in or opt-out preferences."
|
|
23
|
+
);
|
|
22
24
|
}
|
|
23
25
|
getTemplate() {
|
|
24
26
|
return o();
|
|
@@ -29,5 +31,5 @@ class s extends e {
|
|
|
29
31
|
}
|
|
30
32
|
export {
|
|
31
33
|
r as CHECKBOX_BLOCK_ID,
|
|
32
|
-
|
|
34
|
+
l as CheckboxBlock
|
|
33
35
|
};
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var
|
|
4
|
-
import { useHttp as
|
|
5
|
-
import { getDefaultUnsubscribeGroup as
|
|
6
|
-
import { Control as
|
|
7
|
-
const b = "ui-elements-checkbox",
|
|
8
|
-
class
|
|
1
|
+
var p = Object.defineProperty;
|
|
2
|
+
var L = (i, n, e) => n in i ? p(i, n, { enumerable: !0, configurable: !0, writable: !0, value: e }) : i[n] = e;
|
|
3
|
+
var a = (i, n, e) => L(i, typeof n != "symbol" ? n + "" : n, e);
|
|
4
|
+
import { useHttp as h } from "../../../composables/useHttp.js";
|
|
5
|
+
import { getDefaultUnsubscribeGroup as T, PIXEL_TRACKING_SEND_GRID_ID as C, UNSUBSCRIBE_SENTINEL_SEND_GRID_IDS as I } from "../../../enums/unsubscribe.js";
|
|
6
|
+
import { Control as m, UIElementType as r, UEAttr as t, ModificationDescription as S } from "../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
|
|
7
|
+
const b = "ui-elements-checkbox", E = "select", { get: _ } = h();
|
|
8
|
+
class G extends m {
|
|
9
9
|
constructor() {
|
|
10
10
|
super(...arguments);
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
a(this, "currentNode");
|
|
12
|
+
a(this, "selectedUnsubGroup");
|
|
13
|
+
a(this, "unsubList", []);
|
|
14
14
|
}
|
|
15
15
|
getId() {
|
|
16
16
|
return b;
|
|
@@ -19,12 +19,12 @@ class I extends p {
|
|
|
19
19
|
if (this.selectedUnsubGroup = "", this.currentNode && "getAttribute" in this.currentNode) {
|
|
20
20
|
const e = this.currentNode.getAttribute("id");
|
|
21
21
|
if (e) {
|
|
22
|
-
const s = e
|
|
22
|
+
const s = I.includes(e) ? e : Number(e);
|
|
23
23
|
s && (this.selectedUnsubGroup = s);
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
this.api.updateValues({
|
|
27
|
-
[
|
|
27
|
+
[E]: this.selectedUnsubGroup
|
|
28
28
|
});
|
|
29
29
|
}
|
|
30
30
|
_getLabel(e, s = `${Math.random()}`) {
|
|
@@ -46,17 +46,19 @@ class I extends p {
|
|
|
46
46
|
return this.unsubList.map((e) => this._getSelectItem(e.name, e.sendGridId)).join("");
|
|
47
47
|
}
|
|
48
48
|
getTemplate() {
|
|
49
|
+
const e = this.api.translate("Unsubscribe & Preference Center Type"), s = this.api.translate("Select Unsubscribe and Preference Type");
|
|
49
50
|
return `
|
|
50
51
|
<div class="checkbox-controls-container">
|
|
51
|
-
<div class="checkbox-select-container container
|
|
52
|
+
<div class="checkbox-select-container container one-column stretch">
|
|
52
53
|
<${r.LABEL}
|
|
53
|
-
${t.LABEL.text}="${
|
|
54
|
+
${t.LABEL.text}="${e}"
|
|
54
55
|
${t.LABEL.name}="${Math.random()}">
|
|
55
56
|
</${r.LABEL}>
|
|
56
57
|
|
|
57
58
|
<${r.SELECTPICKER}
|
|
58
|
-
${t.SELECTPICKER.name}="${
|
|
59
|
-
${t.SELECTPICKER.
|
|
59
|
+
${t.SELECTPICKER.name}="${E}"
|
|
60
|
+
${t.SELECTPICKER.searchable}="true"
|
|
61
|
+
${t.SELECTPICKER.placeholder}="${s}">
|
|
60
62
|
${this._getSelect()}
|
|
61
63
|
</${r.SELECTPICKER}>
|
|
62
64
|
</div>
|
|
@@ -64,30 +66,42 @@ class I extends p {
|
|
|
64
66
|
`;
|
|
65
67
|
}
|
|
66
68
|
_onSelectChange(e) {
|
|
67
|
-
this.currentNode && this.api.getDocumentModifier().modifyHtml(this.currentNode).setAttribute("id", e.toString()).apply(new
|
|
69
|
+
this.currentNode && this.api.getDocumentModifier().modifyHtml(this.currentNode).setAttribute("id", e.toString()).apply(new S(`Updated text to ${e}`));
|
|
68
70
|
}
|
|
69
71
|
_listenToFormUpdates() {
|
|
70
|
-
this.api.onValueChanged(
|
|
72
|
+
this.api.onValueChanged(E, (e) => this._onSelectChange(e));
|
|
71
73
|
}
|
|
72
74
|
onTemplateNodeUpdated(e) {
|
|
73
75
|
this.currentNode = e, this._setFormValues();
|
|
74
76
|
}
|
|
75
77
|
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
76
78
|
async onRender() {
|
|
77
|
-
const e = await
|
|
79
|
+
const e = await _(
|
|
78
80
|
"/unsubscribe-groups/unsubscribe-list"
|
|
79
|
-
), s =
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
}))
|
|
83
|
-
|
|
84
|
-
|
|
81
|
+
), s = {
|
|
82
|
+
name: this.api.translate("Pixel Tracking Opt-in"),
|
|
83
|
+
sendGridId: C
|
|
84
|
+
}, c = [T(), ...e.data], u = (o) => ({
|
|
85
|
+
[t.SELECT_ITEM.text]: o.name,
|
|
86
|
+
[t.SELECT_ITEM.value]: o.sendGridId
|
|
87
|
+
}), l = (o) => ({
|
|
88
|
+
[t.SELECT_ITEM.text]: o,
|
|
89
|
+
[t.SELECT_ITEM.value]: `header:${o}`,
|
|
90
|
+
[t.SELECT_ITEM.disabled]: !0
|
|
91
|
+
}), d = [
|
|
92
|
+
l(this.api.translate("OPT-IN SELECTION")),
|
|
93
|
+
u(s),
|
|
94
|
+
l(this.api.translate("UNSUBSCRIBE GROUPS")),
|
|
95
|
+
...c.map(u)
|
|
96
|
+
];
|
|
97
|
+
this.unsubList = [s, ...c], this.api.setUIEAttribute(
|
|
98
|
+
E,
|
|
85
99
|
t.SELECTPICKER.items,
|
|
86
|
-
|
|
100
|
+
d
|
|
87
101
|
), this._setFormValues(), this._listenToFormUpdates();
|
|
88
102
|
}
|
|
89
103
|
}
|
|
90
104
|
export {
|
|
91
105
|
b as CHECKBOX_CONTROL_BLOCK_ID,
|
|
92
|
-
|
|
106
|
+
G as CheckboxControl
|
|
93
107
|
};
|