@useinsider/guido 3.22.0-beta.e1b5da2 → 3.22.0-beta.e9b6f94
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 +35 -4
- package/dist/components/Guido.vue.js +1 -1
- package/dist/components/Guido.vue2.js +118 -108
- package/dist/composables/useEditorOpenMetrics.js +167 -0
- package/dist/composables/useStripo.js +93 -82
- package/dist/config/compiler/utils/recommendationCompilerUtils.js +22 -22
- package/dist/config/migrator/recommendation/compositionMapper.js +49 -56
- package/dist/config/migrator/recommendation/extractors.js +40 -100
- package/dist/config/migrator/recommendation/htmlBuilder.js +207 -285
- package/dist/config/migrator/recommendation/settingsMapper.js +36 -37
- package/dist/config/migrator/recommendation/themeMapper.js +41 -53
- package/dist/config/migrator/recommendationMigrator.js +61 -68
- package/dist/config/migrator/unsubscribeMigrator.js +60 -87
- package/dist/extensions/Blocks/Recommendation/block.js +24 -33
- package/dist/extensions/Blocks/Recommendation/controls/cardComposition/index.js +19 -20
- package/dist/extensions/Blocks/Recommendation/controls/main/index.js +163 -148
- package/dist/extensions/Blocks/Recommendation/templates/grid/template.js +22 -23
- package/dist/extensions/Blocks/Recommendation/templates/list/template.js +18 -19
- package/dist/extensions/Blocks/Recommendation/templates/utils.js +91 -82
- package/dist/extensions/Blocks/Recommendation/utils/legacyStrategyMap.js +2 -3
- package/dist/guido.css +1 -1
- package/dist/library.js +12 -10
- package/dist/package.json.js +6 -4
- package/dist/public/prefetchRuntime.js +4 -0
- package/dist/src/composables/useEditorOpenMetrics.d.ts +27 -0
- package/dist/src/composables/useStripo.d.ts +2 -1
- package/dist/src/config/migrator/recommendation/compositionMapper.d.ts +1 -3
- package/dist/src/config/migrator/recommendation/extractors.d.ts +6 -35
- package/dist/src/config/migrator/recommendation/htmlBuilder.d.ts +1 -3
- package/dist/src/config/migrator/recommendation/themeMapper.d.ts +1 -3
- package/dist/src/config/migrator/recommendation/types.d.ts +1 -11
- package/dist/src/extensions/Blocks/Recommendation/block.d.ts +0 -1
- package/dist/src/extensions/Blocks/Recommendation/controls/main/index.d.ts +8 -2
- package/dist/src/extensions/Blocks/Recommendation/templates/utils.d.ts +13 -1
- package/dist/src/extensions/Blocks/Recommendation/utils/legacyStrategyMap.d.ts +19 -2
- package/dist/src/library.d.ts +1 -0
- package/dist/src/public/prefetchRuntime.d.ts +1 -0
- package/dist/src/utils/runtimePrefetch.d.ts +4 -0
- package/dist/src/utils/stripoRuntime.d.ts +3 -0
- package/dist/static/stripo-runtime-manifest.json.js +9 -0
- package/dist/utils/runtimePrefetch.js +26 -0
- package/dist/utils/stripoRuntime.js +13 -0
- package/package.json +6 -1
- package/dist/extensions/Blocks/Recommendation/utils/inlinePriceOrder.js +0 -12
- package/dist/src/extensions/Blocks/Recommendation/utils/inlinePriceOrder.d.ts +0 -9
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
import { ATTR_PRODUCT_IMAGE as p, ATTR_PRODUCT_BUTTON as C, ATTR_PRODUCT_OLD_PRICE as A, ATTR_PRODUCT_PRICE as
|
|
2
|
-
import { buildSpacer as
|
|
3
|
-
import { listElementRenderer as
|
|
4
|
-
import { resolveInlinePriceOrder as O } from "../../utils/inlinePriceOrder.js";
|
|
1
|
+
import { ATTR_PRODUCT_IMAGE as p, ATTR_PRODUCT_BUTTON as C, ATTR_PRODUCT_OLD_PRICE as A, ATTR_PRODUCT_PRICE as I } from "../../constants/selectors.js";
|
|
2
|
+
import { buildSpacer as m, DEFAULT_CARD_COMPOSITION as g, buildElementRenderer as E, buildCellOptions as i, resolveInlinePriceOrder as w, DEFAULT_CARD_VISIBILITY as y } from "../utils.js";
|
|
3
|
+
import { listElementRenderer as L, renderInlineListPriceRow as O } from "./elementRenderer.js";
|
|
5
4
|
const S = "0 5px";
|
|
6
5
|
function U(l, r, n) {
|
|
7
|
-
const
|
|
6
|
+
const t = n ? "" : ' style="display: none;"', o = l.replace(/<tr>/, "").replace(/<\/tr>/, "");
|
|
8
7
|
return `<tr
|
|
9
8
|
class="recommendation-attribute-row"
|
|
10
9
|
data-attribute-type="${r}"
|
|
11
|
-
data-visibility="${n ? "1" : "0"}"${
|
|
10
|
+
data-visibility="${n ? "1" : "0"}"${t}>${o}</tr>`;
|
|
12
11
|
}
|
|
13
12
|
const N = `
|
|
14
13
|
<tr class="recommendation-product-row">
|
|
@@ -28,40 +27,40 @@ const N = `
|
|
|
28
27
|
</td>
|
|
29
28
|
</tr>
|
|
30
29
|
`;
|
|
31
|
-
function x(l, r = g, n = {},
|
|
30
|
+
function x(l, r = g, n = {}, t = {}) {
|
|
32
31
|
const {
|
|
33
32
|
cellPadding: o = S,
|
|
34
33
|
cardBackgroundColor: d,
|
|
35
34
|
visibility: c,
|
|
36
35
|
priceInline: a = !1
|
|
37
|
-
} =
|
|
36
|
+
} = t, u = d ? ` style="table-layout: fixed; background-color: ${d};"` : ' style="table-layout: fixed;"', s = E(L, r, n), P = s[p](l, i(p, t)), R = w(r), T = `
|
|
38
37
|
<td class="product-info-cell" valign="middle" style="padding: 15px;">
|
|
39
38
|
<table cellpadding="0" cellspacing="0" role="presentation" width="100%" style="table-layout: fixed;">
|
|
40
39
|
<tbody>
|
|
41
|
-
${r.filter((
|
|
42
|
-
const b = (c == null ? void 0 : c[
|
|
40
|
+
${r.filter((e) => e !== p && e !== C).filter((e) => !(a && e === R.skip)).filter((e) => s[e]).map((e) => {
|
|
41
|
+
const b = (c == null ? void 0 : c[e]) ?? y[e] ?? !0, f = a && e === R.anchor ? O(
|
|
43
42
|
l,
|
|
44
43
|
R.originalFirst,
|
|
45
|
-
i(
|
|
46
|
-
i(A,
|
|
47
|
-
) : s[
|
|
48
|
-
return U(f,
|
|
44
|
+
i(I, t),
|
|
45
|
+
i(A, t)
|
|
46
|
+
) : s[e](l, i(e, t, r));
|
|
47
|
+
return U(f, e, b);
|
|
49
48
|
}).join(`
|
|
50
49
|
`)}
|
|
51
50
|
</tbody>
|
|
52
51
|
</table>
|
|
53
52
|
</td>
|
|
54
|
-
`, _ = s[C](l, i(C,
|
|
53
|
+
`, _ = s[C](l, i(C, t)), D = P + T + _;
|
|
55
54
|
return N.replace("{-{-CARD_PADDING-}-}", o).replace("{-{-WRAPPER_STYLE-}-}", u).replace("{-{-PRODUCT_CONTENT-}-}", D);
|
|
56
55
|
}
|
|
57
|
-
function
|
|
58
|
-
const o =
|
|
56
|
+
function W(l, r, n = {}, t = {}) {
|
|
57
|
+
const o = m(t.rowSpacingPx);
|
|
59
58
|
return l.map((d, c) => {
|
|
60
|
-
const a = x(d, r, n,
|
|
59
|
+
const a = x(d, r, n, t);
|
|
61
60
|
return c > 0 ? o + a : a;
|
|
62
61
|
}).join("");
|
|
63
62
|
}
|
|
64
63
|
export {
|
|
65
64
|
x as getListProductCard,
|
|
66
|
-
|
|
65
|
+
W as prepareProductRows
|
|
67
66
|
};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ATTR_PRODUCT_PRICE as l, ATTR_PRODUCT_OLD_PRICE as a, ATTR_CUSTOM_PREFIX as T, ATTR_PRODUCT_IMAGE as b, ATTR_PRODUCT_NAME as _, ATTR_PRODUCT_OMNIBUS_PRICE as C, ATTR_PRODUCT_OMNIBUS_DISCOUNT as A, ATTR_PRODUCT_BUTTON as p, PRODUCT_ATTRIBUTE_PREFIX as I } from "../constants/selectors.js";
|
|
2
2
|
import { useRecommendationExtensionStore as L } from "../store/recommendation.js";
|
|
3
|
-
import { compositionKeyToProductAttr as
|
|
3
|
+
import { compositionKeyToProductAttr as y, isDefaultProductAttr as f, bareAttributeName as S, findFilterByBareName as $, productAttrToCompositionKey as P } from "../utils/compositionKeys.js";
|
|
4
4
|
import { formatPrice as B } from "../utils/priceFormatter.js";
|
|
5
5
|
import { buildTitleRows as k } from "./titleRows.js";
|
|
6
|
-
function
|
|
6
|
+
function x() {
|
|
7
7
|
const t = L(), { currencySettings: e } = t.recommendationConfigs;
|
|
8
8
|
return {
|
|
9
9
|
code: e.value,
|
|
@@ -14,83 +14,91 @@ function N() {
|
|
|
14
14
|
thousandSeparator: e.thousandSeparator
|
|
15
15
|
};
|
|
16
16
|
}
|
|
17
|
-
function
|
|
18
|
-
const o =
|
|
17
|
+
function m(t, e = "price") {
|
|
18
|
+
const o = x(), n = t[e], c = (n == null ? void 0 : n[o.code]) ?? Object.values(n ?? {})[0] ?? 0;
|
|
19
19
|
return B({
|
|
20
20
|
price: c,
|
|
21
21
|
currency: o
|
|
22
22
|
});
|
|
23
23
|
}
|
|
24
24
|
function q(t) {
|
|
25
|
-
return
|
|
25
|
+
return m(t, "price") === m(t, "original_price");
|
|
26
26
|
}
|
|
27
|
-
function
|
|
27
|
+
function N(t) {
|
|
28
28
|
return t.replace(/_/g, " ").replace(/\b\w/g, (e) => e.toUpperCase());
|
|
29
29
|
}
|
|
30
|
-
function
|
|
30
|
+
function J(t) {
|
|
31
|
+
const e = t.indexOf(l), o = t.indexOf(a), n = o !== -1 && (e === -1 || o < e);
|
|
32
|
+
return {
|
|
33
|
+
originalFirst: n,
|
|
34
|
+
anchor: n ? a : l,
|
|
35
|
+
skip: n ? l : a
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function F(t) {
|
|
31
39
|
const e = Array.isArray(t) ? t[t.length - 1] : t;
|
|
32
40
|
if (typeof e == "string")
|
|
33
41
|
return e;
|
|
34
42
|
if (typeof e == "number")
|
|
35
43
|
return String(e);
|
|
36
44
|
}
|
|
37
|
-
function
|
|
45
|
+
function v(t, e) {
|
|
38
46
|
var o;
|
|
39
47
|
return ((o = $(t, e)) == null ? void 0 : o.type) === "defaultAttribute";
|
|
40
48
|
}
|
|
41
|
-
function
|
|
42
|
-
return
|
|
49
|
+
function w(t, e) {
|
|
50
|
+
return v(t, e) ? t : `${I}${t}`;
|
|
43
51
|
}
|
|
44
|
-
function
|
|
45
|
-
return
|
|
52
|
+
function Q(t) {
|
|
53
|
+
return P(t);
|
|
46
54
|
}
|
|
47
|
-
const
|
|
48
|
-
function
|
|
49
|
-
const n = t[
|
|
55
|
+
const M = Symbol("customCellHtml");
|
|
56
|
+
function Z(t, e, o = {}) {
|
|
57
|
+
const n = t[M];
|
|
50
58
|
if (!n)
|
|
51
59
|
return { ...t };
|
|
52
60
|
const c = { ...t };
|
|
53
|
-
return e.filter((
|
|
54
|
-
const
|
|
55
|
-
c[
|
|
56
|
-
var
|
|
57
|
-
const
|
|
58
|
-
return n(r,
|
|
61
|
+
return e.filter((i) => i.startsWith(T) && !c[i]).forEach((i) => {
|
|
62
|
+
const s = y(i), r = f(s) ? w(s, o) : s, u = S(r), h = N(u), D = f(r);
|
|
63
|
+
c[i] = (d, U) => {
|
|
64
|
+
var g;
|
|
65
|
+
const O = D ? d[u] : (g = d.product_attributes) == null ? void 0 : g[u], E = F(O) ?? h;
|
|
66
|
+
return n(r, E, U);
|
|
59
67
|
};
|
|
60
68
|
}), c;
|
|
61
69
|
}
|
|
62
|
-
function
|
|
63
|
-
const n = t.startsWith(
|
|
70
|
+
function tt(t, e, o = []) {
|
|
71
|
+
const n = t.startsWith(T) ? P(S(y(t))) : t, i = n !== t && !o.includes(n) ? n : t, s = (r) => (r == null ? void 0 : r[t]) ?? (r == null ? void 0 : r[i]);
|
|
64
72
|
return {
|
|
65
73
|
cellPadding: e.cellPadding,
|
|
66
74
|
cardBackgroundColor: e.cardBackgroundColor,
|
|
67
|
-
cellBackgroundColor:
|
|
68
|
-
cellAlignment:
|
|
69
|
-
cellClasses:
|
|
70
|
-
omnibusText:
|
|
71
|
-
styleTemplate:
|
|
75
|
+
cellBackgroundColor: s(e.cellBackgroundColors),
|
|
76
|
+
cellAlignment: s(e.cellAlignments),
|
|
77
|
+
cellClasses: s(e.cellClasses),
|
|
78
|
+
omnibusText: s(e.omnibusTexts),
|
|
79
|
+
styleTemplate: s(e.styleTemplates)
|
|
72
80
|
};
|
|
73
81
|
}
|
|
74
|
-
const
|
|
82
|
+
const et = {
|
|
75
83
|
TITLE: "You May Also Like!"
|
|
76
|
-
},
|
|
77
|
-
m,
|
|
78
|
-
T,
|
|
84
|
+
}, ot = [
|
|
79
85
|
b,
|
|
80
86
|
_,
|
|
87
|
+
a,
|
|
88
|
+
l,
|
|
81
89
|
C,
|
|
82
90
|
A,
|
|
83
|
-
|
|
84
|
-
],
|
|
85
|
-
[m]: !0,
|
|
86
|
-
[T]: !0,
|
|
87
|
-
[_]: !0,
|
|
91
|
+
p
|
|
92
|
+
], nt = {
|
|
88
93
|
[b]: !0,
|
|
94
|
+
[_]: !0,
|
|
95
|
+
[l]: !0,
|
|
96
|
+
[a]: !0,
|
|
89
97
|
[C]: !1,
|
|
90
98
|
[A]: !1,
|
|
91
|
-
[
|
|
99
|
+
[p]: !0
|
|
92
100
|
}, W = 10;
|
|
93
|
-
function
|
|
101
|
+
function rt(t = W) {
|
|
94
102
|
return `
|
|
95
103
|
<tr>
|
|
96
104
|
<td class="spacer" style="height: ${t}px;"></td>
|
|
@@ -100,9 +108,9 @@ function nt(t = W) {
|
|
|
100
108
|
function H(t, e) {
|
|
101
109
|
return e ? e.pStyle ?? "" : t;
|
|
102
110
|
}
|
|
103
|
-
function
|
|
104
|
-
const n = H(e.pStyle, o), c = o ? o.openTags ?? "" : e.openTags,
|
|
105
|
-
return `<p contenteditable="false" style="${n}">${c}${t}${
|
|
111
|
+
function it(t, e, o) {
|
|
112
|
+
const n = H(e.pStyle, o), c = o ? o.openTags ?? "" : e.openTags, i = o ? o.closeTags ?? "" : e.closeTags;
|
|
113
|
+
return `<p contenteditable="false" style="${n}">${c}${t}${i}</p>`;
|
|
106
114
|
}
|
|
107
115
|
function st(t, e) {
|
|
108
116
|
const o = [];
|
|
@@ -111,30 +119,30 @@ function st(t, e) {
|
|
|
111
119
|
function V(t) {
|
|
112
120
|
return t ? ` background-color: ${t};` : "";
|
|
113
121
|
}
|
|
114
|
-
function
|
|
122
|
+
function ct(t) {
|
|
115
123
|
const e = V(t);
|
|
116
124
|
return e ? ` style="${e.trim()}"` : "";
|
|
117
125
|
}
|
|
118
|
-
function
|
|
126
|
+
function lt(t, e = "") {
|
|
119
127
|
return {
|
|
120
128
|
before: (t == null ? void 0 : t.before) ?? e,
|
|
121
129
|
after: (t == null ? void 0 : t.after) ?? ""
|
|
122
130
|
};
|
|
123
131
|
}
|
|
124
|
-
function
|
|
132
|
+
function at(t, e) {
|
|
125
133
|
return `${(e == null ? void 0 : e.openTags) ?? ""}${t}${(e == null ? void 0 : e.closeTags) ?? ""}`;
|
|
126
134
|
}
|
|
127
|
-
function
|
|
135
|
+
function ut(t) {
|
|
128
136
|
return t != null && t.buttonFitToContainer ? "es-button-border es-fw" : "es-button-border";
|
|
129
137
|
}
|
|
130
|
-
const
|
|
131
|
-
function
|
|
132
|
-
return !t || typeof t != "string" || t.trim() === "" ?
|
|
138
|
+
const dt = "display: block; max-width: 100%; height: auto;", gt = "border-width: 1px; background: rgb(217, 234, 211); border-color: rgb(106, 168, 79);", ft = "color: rgb(56, 118, 29); background: rgb(217, 234, 211); font-family: arial, 'helvetica neue', helvetica, sans-serif; font-size: 16px; font-weight: normal; line-height: 120%; mso-border-alt: 10px solid rgb(217, 234, 211); mso-padding-alt: 0;", R = "https://email-static.useinsider.com/stripo/modules/email-recommendation-v3/assets/images/image-placeholder.png";
|
|
139
|
+
function mt(t) {
|
|
140
|
+
return !t || typeof t != "string" || t.trim() === "" ? R : t.startsWith("http://") ? t.replace("http://", "https://") : t;
|
|
133
141
|
}
|
|
134
142
|
function Y(t) {
|
|
135
143
|
return {
|
|
136
144
|
name: "Product Name",
|
|
137
|
-
image_url:
|
|
145
|
+
image_url: R,
|
|
138
146
|
price: { USD: 18 },
|
|
139
147
|
original_price: { USD: 20 },
|
|
140
148
|
discount: { USD: 2 },
|
|
@@ -146,20 +154,20 @@ function Y(t) {
|
|
|
146
154
|
category: []
|
|
147
155
|
};
|
|
148
156
|
}
|
|
149
|
-
function
|
|
157
|
+
function Tt(t = 6) {
|
|
150
158
|
return Array.from(
|
|
151
159
|
{ length: t },
|
|
152
160
|
(e, o) => Y(String(o + 1))
|
|
153
161
|
);
|
|
154
162
|
}
|
|
155
|
-
function
|
|
163
|
+
function bt(t = "grid", e) {
|
|
156
164
|
const o = t === "list" ? `
|
|
157
|
-
data-layout="list"` : "", n = e ? ` ${e}` : "",
|
|
165
|
+
data-layout="list"` : "", n = e ? ` ${e}` : "", i = `recommendation-block-v2 esd-block-recommendation-v3-block es-p20${t === "list" ? " es-m-p0 ins-recommendation-list-layout" : ""}${n}`, s = t === "list" ? "" : `
|
|
158
166
|
{-{-MOBILE_PRODUCT_ROWS-}-}`, r = t === "list" ? ' style="display: none;"' : "";
|
|
159
167
|
return `
|
|
160
168
|
<td
|
|
161
169
|
align="left"
|
|
162
|
-
class="${
|
|
170
|
+
class="${i}"${o}>
|
|
163
171
|
<table width="100%" cellpadding="0" cellspacing="0" border="0">
|
|
164
172
|
<tr>
|
|
165
173
|
<td align="center">
|
|
@@ -195,7 +203,7 @@ function Tt(t = "grid", e) {
|
|
|
195
203
|
cellspacing="0"
|
|
196
204
|
border="0"
|
|
197
205
|
style="display: none;"
|
|
198
|
-
>${
|
|
206
|
+
>${s}
|
|
199
207
|
</table>
|
|
200
208
|
</td>
|
|
201
209
|
</tr>
|
|
@@ -208,35 +216,36 @@ function Tt(t = "grid", e) {
|
|
|
208
216
|
`;
|
|
209
217
|
}
|
|
210
218
|
export {
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
219
|
+
M as CUSTOM_CELL_HTML,
|
|
220
|
+
et as DEFAULTS,
|
|
221
|
+
ft as DEFAULT_BUTTON_ANCHOR_STYLE,
|
|
222
|
+
gt as DEFAULT_BUTTON_BORDER_STYLE,
|
|
223
|
+
ot as DEFAULT_CARD_COMPOSITION,
|
|
224
|
+
nt as DEFAULT_CARD_VISIBILITY,
|
|
225
|
+
dt as DEFAULT_IMG_STYLE,
|
|
218
226
|
W as DEFAULT_ROW_SPACING_PX,
|
|
219
|
-
|
|
227
|
+
R as PLACEHOLDER_IMAGE,
|
|
220
228
|
V as bgColorFragment,
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
229
|
+
tt as buildCellOptions,
|
|
230
|
+
Z as buildElementRenderer,
|
|
231
|
+
rt as buildSpacer,
|
|
232
|
+
ct as cellBgStyleAttr,
|
|
233
|
+
bt as createBlockTemplate,
|
|
234
|
+
m as formatProductPrice,
|
|
235
|
+
x as getCurrentCurrencyConfig,
|
|
236
|
+
Tt as getDefaultProducts,
|
|
237
|
+
v as isDefaultAttribute,
|
|
230
238
|
q as isSamePrice,
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
239
|
+
at as renderButtonLabel,
|
|
240
|
+
it as renderStyledParagraph,
|
|
241
|
+
ut as resolveButtonBorderClass,
|
|
242
|
+
J as resolveInlinePriceOrder,
|
|
243
|
+
lt as resolveOmnibusText,
|
|
235
244
|
H as resolvePStyle,
|
|
236
|
-
|
|
245
|
+
w as resolveProductAttrValue,
|
|
237
246
|
st as resolveSegmentBgStyle,
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
247
|
+
mt as sanitizeImageUrl,
|
|
248
|
+
Q as toCustomCompositionKey,
|
|
249
|
+
N as toDisplayName,
|
|
250
|
+
F as toDisplayableAttributeValue
|
|
242
251
|
};
|
|
@@ -3,10 +3,9 @@ function r(e) {
|
|
|
3
3
|
return e;
|
|
4
4
|
switch (e) {
|
|
5
5
|
case "viewedTogether":
|
|
6
|
+
return "similarViewed";
|
|
6
7
|
case "purchasedTogether":
|
|
7
|
-
|
|
8
|
-
case "similarBought":
|
|
9
|
-
return "mostPopular";
|
|
8
|
+
return "similarBought";
|
|
10
9
|
case "trending":
|
|
11
10
|
return "trendingProducts";
|
|
12
11
|
case "mostValuable":
|
package/dist/guido.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
@charset "UTF-8";.auth-error-modal[data-v-b4d7ae51]{position:relative;z-index:145}.gap-16[data-v-5553d071],.gap-16[data-v-0e1b0c54]{gap:16px}[data-v-b8f24f34] .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-87033101]{position:relative;display:inline-block}.new-tag[data-v-87033101]{position:absolute;top:-8px;right:-16px;z-index:10}[data-v-87033101] .guido__view-option-selection-desktop svg,[data-v-87033101] .guido__view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-87033101] .in-segments-wrapper__button_selected,[data-v-87033101] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}[data-v-87033101] .in-tooltip-wrapper-v2__icon{cursor:pointer}.editor-toolbar[data-v-173c3a40]{gap:4px}.version-history-item[data-v-ee4b9c3f]{flex-basis:200px}.version-history[data-v-fad98586]{gap:8px}.version-history__toolbar[data-v-fad98586]{gap:4px}.view-options-wrapper[data-v-6ebabfe4]{position:relative;display:inline-block}.new-tag[data-v-6ebabfe4]{position:absolute;top:-8px;right:-16px;z-index:10}[data-v-6ebabfe4] .guido__verion-history-view-option-selection-desktop svg,[data-v-6ebabfe4] .guido__verion-history-view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-6ebabfe4] .in-segments-wrapper__button_selected,[data-v-6ebabfe4] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}[data-v-6ebabfe4] .in-tooltip-wrapper-v2__icon{cursor:pointer}.auto-save-toggle[data-v-2c964af4]{position:relative}.auto-save-toggle__info-box[data-v-2c964af4]{position:absolute;top:100%;left:0;z-index:10;width:280px}.editor-actions[data-v-baf7a5dd]{gap:4px}.header-wrapper[data-v-d11dd577]{min-width:1000px}.guido-loading__wrapper[data-v-07c4b2d8]{height:100%;top:75px!important;bottom:0!important}.validation-error-list[data-v-e48cebe9]{gap:16px}.validation-error-row[data-v-e48cebe9]{gap:8px;padding:24px;border:1px solid #E1E1E1;border-radius:8px}.validation-error-row__icon[data-v-e48cebe9]{flex-shrink:0;font-size:24px;line-height:0}.validation-error-row__text[data-v-e48cebe9]{font-size:13px;line-height:16px;color:#292929;word-break:break-word}.guido-editor__wrapper[data-v-
|
|
1
|
+
@charset "UTF-8";.auth-error-modal[data-v-b4d7ae51]{position:relative;z-index:145}.gap-16[data-v-5553d071],.gap-16[data-v-0e1b0c54]{gap:16px}[data-v-b8f24f34] .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-87033101]{position:relative;display:inline-block}.new-tag[data-v-87033101]{position:absolute;top:-8px;right:-16px;z-index:10}[data-v-87033101] .guido__view-option-selection-desktop svg,[data-v-87033101] .guido__view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-87033101] .in-segments-wrapper__button_selected,[data-v-87033101] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}[data-v-87033101] .in-tooltip-wrapper-v2__icon{cursor:pointer}.editor-toolbar[data-v-173c3a40]{gap:4px}.version-history-item[data-v-ee4b9c3f]{flex-basis:200px}.version-history[data-v-fad98586]{gap:8px}.version-history__toolbar[data-v-fad98586]{gap:4px}.view-options-wrapper[data-v-6ebabfe4]{position:relative;display:inline-block}.new-tag[data-v-6ebabfe4]{position:absolute;top:-8px;right:-16px;z-index:10}[data-v-6ebabfe4] .guido__verion-history-view-option-selection-desktop svg,[data-v-6ebabfe4] .guido__verion-history-view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-6ebabfe4] .in-segments-wrapper__button_selected,[data-v-6ebabfe4] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}[data-v-6ebabfe4] .in-tooltip-wrapper-v2__icon{cursor:pointer}.auto-save-toggle[data-v-2c964af4]{position:relative}.auto-save-toggle__info-box[data-v-2c964af4]{position:absolute;top:100%;left:0;z-index:10;width:280px}.editor-actions[data-v-baf7a5dd]{gap:4px}.header-wrapper[data-v-d11dd577]{min-width:1000px}.guido-loading__wrapper[data-v-07c4b2d8]{height:100%;top:75px!important;bottom:0!important}.validation-error-list[data-v-e48cebe9]{gap:16px}.validation-error-row[data-v-e48cebe9]{gap:8px;padding:24px;border:1px solid #E1E1E1;border-radius:8px}.validation-error-row__icon[data-v-e48cebe9]{flex-shrink:0;font-size:24px;line-height:0}.validation-error-row__text[data-v-e48cebe9]{font-size:13px;line-height:16px;color:#292929;word-break:break-word}.guido-editor__wrapper[data-v-f2154cb6]{--ribbon-offset: 0px;position:relative;width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__container[data-v-f2154cb6]{width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__no-header[data-v-f2154cb6]{height:calc(100vh - 75px - var(--ribbon-offset))}[data-v-293f1c47] .in-breadcrumb-wrapper__links{cursor:pointer}.templates-wrapper[data-v-91a26acd]{gap:16px;grid-template-columns:repeat(3,1fr)}.templates-wrapper .template-wrapper[data-v-91a26acd]{cursor:pointer}.templates-wrapper .template-wrapper .template-container[data-v-91a26acd]{height:274px;padding:2px;transition:none}.templates-wrapper .template-wrapper .template-container.selected[data-v-91a26acd]{padding:1px}.templates-wrapper .template-wrapper .template-container .thumbnail[data-v-91a26acd]{object-fit:cover;transform:scale(1)}[data-v-b9a93c6e] .guido__verion-history-view-option-selection-desktop svg,[data-v-b9a93c6e] .guido__verion-history-view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-b9a93c6e] .in-segments-wrapper__button_selected,[data-v-b9a93c6e] .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-cf946232]{min-width:602px;height:70vh;min-height:583px;border-radius:10px}.desktop-preview iframe[data-v-cf946232]{min-height:504px}.iframe-wrapper[data-v-f255b2bb]{width:258px}.iframe-scaled[data-v-f255b2bb]{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-6bcaca8a] .vueperslides__parallax-wrapper{padding-bottom:110px!important}[data-v-f16f20f8] .vueperslides__bullets{pointer-events:none!important}[data-v-f16f20f8] .vueperslides__parallax-wrapper{padding-bottom:110px!important}[data-v-bb3cca55] .vueperslides__bullets{pointer-events:none!important}[data-v-bb3cca55] .vueperslides__parallax-wrapper{height:110px!important;padding-bottom:110px!important}[data-v-19d8cb42] .vueperslides__bullets,[data-v-ec2027ff] .vueperslides__bullets,[data-v-b09e80c4] .vueperslides__bullets{pointer-events:none!important}[data-v-b09e80c4] .vueperslides__parallax-wrapper{height:110px!important;padding-bottom:110px!important}[data-v-9bdef600] .vueperslides__parallax-wrapper{padding-bottom:110px!important}.assign-strategy-drawer-content .assign-strategy-select[data-v-6ce48dfd]{width:100%;max-width:none}.assign-strategy-drawer-content .assign-strategy-select[data-v-6ce48dfd] .in-skeleton{width:100%!important}.assign-strategy-drawer-content .assign-strategy-select[data-v-6ce48dfd] .in-dropdown-box__container{width:413px}.assign-strategy-drawer .spaced-dot-sep{background-image:linear-gradient(90deg,#91949f 20%,#fff0 0);background-position:center bottom;background-repeat:repeat-x;background-size:5px 1px}.assign-strategy-drawer .spaced-dot-sep--top{background-position:center top}.assign-strategy-drawer .spaced-dot-sep--fc-n:first-child{background:none}.legacy-strategy-updated-modal[data-v-da2225a1]{position:relative;z-index:145}
|
package/dist/library.js
CHANGED
|
@@ -1,20 +1,22 @@
|
|
|
1
1
|
import { default as a } from "./components/Guido.vue.js";
|
|
2
|
-
import { MessageType as t, ProductType as
|
|
2
|
+
import { MessageType as t, ProductType as f } from "./@types/config/schemas.js";
|
|
3
3
|
import "./@types/config/defaults.js";
|
|
4
|
-
import { getValidationErrors as
|
|
5
|
-
import { assignTrackingIds as
|
|
4
|
+
import { getValidationErrors as p, isValidConfig as s, parseConfig as m, parseConfigSafe as g, validateConfig as n } from "./@types/config/validator.js";
|
|
5
|
+
import { assignTrackingIds as l, readTrackFloor as x, readTrackSeq as c } from "./utils/linkTrackingIds.js";
|
|
6
6
|
import { useGuidoEmailEditorStore as C } from "./stores/guido-email-editor.js";
|
|
7
|
+
import { prefetchGuidoRuntime as E } from "./utils/runtimePrefetch.js";
|
|
7
8
|
export {
|
|
8
9
|
a as Guido,
|
|
9
10
|
t as MessageType,
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
f as ProductType,
|
|
12
|
+
l as assignTrackingIds,
|
|
13
|
+
p as getValidationErrors,
|
|
14
|
+
s as isValidConfig,
|
|
15
|
+
m as parseConfig,
|
|
16
|
+
g as parseConfigSafe,
|
|
17
|
+
E as prefetchGuidoRuntime,
|
|
16
18
|
x as readTrackFloor,
|
|
17
|
-
|
|
19
|
+
c as readTrackSeq,
|
|
18
20
|
C as useGuidoEmailEditorStore,
|
|
19
21
|
n as validateConfig
|
|
20
22
|
};
|
package/dist/package.json.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
const o = { stripo: { version: "2.81.1" } },
|
|
2
|
-
|
|
1
|
+
const o = "3.22.0-beta.e9b6f94", s = { stripo: { version: "2.81.1" } }, e = {
|
|
2
|
+
version: o,
|
|
3
|
+
guido: s
|
|
3
4
|
};
|
|
4
5
|
export {
|
|
5
|
-
|
|
6
|
-
|
|
6
|
+
e as default,
|
|
7
|
+
s as guido,
|
|
8
|
+
o as version
|
|
7
9
|
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export type TimedOpenPhase = 'migration' | 'default_template' | 'timer_clone';
|
|
2
|
+
declare const PHASES: readonly ["setup", "host_ready", "migration_start", "migration_end", "default_template_start", "default_template_end", "timer_clone_start", "timer_clone_end", "plugin_start", "script_ready", "fonts_sync_ready", "blocks_config_ready", "init_editor", "token_start", "token_end", "ready"];
|
|
3
|
+
export type OpenPhase = typeof PHASES[number];
|
|
4
|
+
export type OpenOutcome = 'ready' | 'error' | 'abandoned';
|
|
5
|
+
export interface OpenContext {
|
|
6
|
+
partnerName: string;
|
|
7
|
+
productType: number;
|
|
8
|
+
templateId: string;
|
|
9
|
+
variationId: string;
|
|
10
|
+
}
|
|
11
|
+
export interface OpenTemplate {
|
|
12
|
+
html: string;
|
|
13
|
+
css: string;
|
|
14
|
+
forceRecreate: boolean;
|
|
15
|
+
}
|
|
16
|
+
export interface EditorOpenMetrics {
|
|
17
|
+
mark: (phase: OpenPhase) => void;
|
|
18
|
+
timed: <T>(phase: TimedOpenPhase, task: () => Promise<T>) => Promise<T>;
|
|
19
|
+
setContext: (context: OpenContext) => void;
|
|
20
|
+
setTemplate: (template: OpenTemplate) => void;
|
|
21
|
+
setScriptPreloaded: (preloaded: boolean) => void;
|
|
22
|
+
markReady: () => void;
|
|
23
|
+
markFailed: () => void;
|
|
24
|
+
dispose: () => void;
|
|
25
|
+
}
|
|
26
|
+
export declare const startEditorOpenMetrics: () => EditorOpenMetrics;
|
|
27
|
+
export {};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import type { EditorOpenMetrics } from '@@/Composables/useEditorOpenMetrics';
|
|
1
2
|
import type { Metadata, Options, Template } from '@@/Types/stripo';
|
|
2
|
-
export declare const useStripo: () => {
|
|
3
|
+
export declare const useStripo: (openMetrics: EditorOpenMetrics) => {
|
|
3
4
|
initPlugin: (template: Template, metadata: Metadata, options: Options) => Promise<void>;
|
|
4
5
|
preloadRuntime: () => void;
|
|
5
6
|
};
|
|
@@ -1,4 +1,2 @@
|
|
|
1
1
|
import { type LegacyVariable, type MappedComposition } from './types';
|
|
2
|
-
export declare function mapComposition(variables: LegacyVariable[] | undefined
|
|
3
|
-
oldPriceFirst?: boolean;
|
|
4
|
-
}): MappedComposition;
|
|
2
|
+
export declare function mapComposition(variables: LegacyVariable[] | undefined): MappedComposition;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { LegacyPaddingViewport, LegacyVariable } from './types';
|
|
2
1
|
export declare function extractTitleText(block: Element): string;
|
|
3
2
|
/**
|
|
4
3
|
* Fallback for legacy configs that carry no `p_recommendation_title` variable:
|
|
@@ -8,31 +7,6 @@ export declare function extractTitleText(block: Element): string;
|
|
|
8
7
|
* @returns True when the legacy block renders a visible title
|
|
9
8
|
*/
|
|
10
9
|
export declare function hasVisibleTitle(block: Element): boolean;
|
|
11
|
-
/**
|
|
12
|
-
* A rendered title container with no text showed the user no title, whatever the config's `hidden` flag says.
|
|
13
|
-
* @param block - The legacy recommendation block element
|
|
14
|
-
* @returns True when the legacy block renders an empty title container
|
|
15
|
-
*/
|
|
16
|
-
export declare function hasEmptyTitle(block: Element): boolean;
|
|
17
|
-
/**
|
|
18
|
-
* Reads which price the legacy card renders first. Prices sharing a `positionIdx` are ordered by this.
|
|
19
|
-
* @param block - The legacy recommendation block element
|
|
20
|
-
* @returns True only when both prices render and the original price comes first
|
|
21
|
-
*/
|
|
22
|
-
export declare function isOldPriceFirst(block: Element): boolean;
|
|
23
|
-
/**
|
|
24
|
-
* Reads the legacy "Move to next line" state from the rendered card, for blocks whose config does not carry it.
|
|
25
|
-
* @param block - The legacy recommendation block element
|
|
26
|
-
* @returns True only when both prices render in separate rows and neither row is laid out inline (`table-cell`)
|
|
27
|
-
*/
|
|
28
|
-
export declare function isPriceOnNextLine(block: Element): boolean;
|
|
29
|
-
/**
|
|
30
|
-
* Legacy keeps the text color and the name's trim toggle in the rendered `<p>`, not in the config theme.
|
|
31
|
-
* @param variables - The legacy composition variables
|
|
32
|
-
* @param block - The legacy recommendation block element
|
|
33
|
-
* @returns The variables, with `textColor` / `textTrimming` filled from the rendered HTML where the theme lacks them
|
|
34
|
-
*/
|
|
35
|
-
export declare function withRenderedTextTheme(variables: LegacyVariable[] | undefined, block: Element): LegacyVariable[] | undefined;
|
|
36
10
|
/**
|
|
37
11
|
* Card background lives on either the block (`bgcolor`/`style`) or per-card
|
|
38
12
|
* cells (`.product-card`). Returns empty string when no background is set —
|
|
@@ -40,16 +14,13 @@ export declare function withRenderedTextTheme(variables: LegacyVariable[] | unde
|
|
|
40
14
|
*/
|
|
41
15
|
export declare function extractCardBgColor(block: Element): string;
|
|
42
16
|
/**
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
* Block padding as the legacy product row renders it, for configs whose theme has no `blockPadding`.
|
|
49
|
-
* @param block - The legacy recommendation block element
|
|
50
|
-
* @returns The row's `es-p{n}{side}` padding, or undefined when the block has no product row
|
|
17
|
+
* Reads the legacy block's own `currency-*` attributes into a
|
|
18
|
+
* `currencySettings`-shaped object that `mapCurrency` understands. Used as a
|
|
19
|
+
* fallback when the external recommendationConfigs map has no entry for this
|
|
20
|
+
* block, so the migrated block keeps its real currency instead of defaulting.
|
|
21
|
+
* Returns undefined when the block carries no `currency` attribute.
|
|
51
22
|
*/
|
|
52
|
-
export declare function
|
|
23
|
+
export declare function extractCurrencyFromBlock(block: Element): Record<string, string> | undefined;
|
|
53
24
|
/**
|
|
54
25
|
* True when a PM has manually opted the legacy block out of content
|
|
55
26
|
* regeneration by adding the `ins-skip-compile` class. Detected before rebuild
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { MappedComposition } from './types';
|
|
2
2
|
import type { RecommendationNodeConfig } from '@@/Extensions/Blocks/Recommendation/types/nodeConfig';
|
|
3
3
|
export declare function buildBlockHtml(params: {
|
|
4
4
|
nodeConfig: RecommendationNodeConfig;
|
|
@@ -16,6 +16,4 @@ export declare function buildBlockHtml(params: {
|
|
|
16
16
|
preserveInnerHtml?: string;
|
|
17
17
|
/** Adds the `ins-skip-compile` opt-out class to the migrated block. */
|
|
18
18
|
skipCompile?: boolean;
|
|
19
|
-
/** Legacy desktop block padding; without it the block keeps the default `es-p20`. */
|
|
20
|
-
blockPadding?: MappedBlockPadding;
|
|
21
19
|
}): string;
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
import type { LegacyButtonTheme, LegacyImageTheme,
|
|
1
|
+
import type { LegacyButtonTheme, LegacyImageTheme, LegacyTextTheme, MappedButtonStyle, MappedImageStyle, MappedTextStyle } from './types';
|
|
2
2
|
export declare function mapTextTheme(theme: LegacyTextTheme | undefined): MappedTextStyle;
|
|
3
3
|
export declare function mapButtonTheme(theme: LegacyButtonTheme | undefined): MappedButtonStyle;
|
|
4
4
|
export declare function mapImageTheme(theme: LegacyImageTheme | undefined): MappedImageStyle;
|
|
5
|
-
/** Stripo `es-p{n}{side}` classes where a step class exists, inline `padding-{side}` otherwise; 0 needs neither. */
|
|
6
|
-
export declare function mapBlockPadding(padding: LegacyPaddingViewport | undefined): MappedBlockPadding | undefined;
|
|
7
5
|
export declare function appendStyle(existing: string | undefined, addition: string | undefined): string;
|
|
@@ -30,9 +30,7 @@ export interface LegacyPadding {
|
|
|
30
30
|
/** Border-radius shape — observed in two flavours: shorthand or per-corner. */
|
|
31
31
|
export interface LegacyBorderRadius {
|
|
32
32
|
/** Single shorthand value (e.g. `radius: 4`). */
|
|
33
|
-
radius?: number
|
|
34
|
-
/** Shorthand the legacy button theme stores under `theme.borderRadius` (e.g. `borderRadius: "4"`). */
|
|
35
|
-
borderRadius?: number | string;
|
|
33
|
+
radius?: number;
|
|
36
34
|
/** Per-corner: top-left / top-right / bottom-right / bottom-left (in px). */
|
|
37
35
|
lt?: number;
|
|
38
36
|
rt?: number;
|
|
@@ -98,7 +96,6 @@ export interface LegacyButtonTheme {
|
|
|
98
96
|
color?: LegacySides<string>;
|
|
99
97
|
};
|
|
100
98
|
buttonBorderRadius?: LegacyBorderRadius;
|
|
101
|
-
borderRadius?: LegacyBorderRadius;
|
|
102
99
|
buttonAlign?: {
|
|
103
100
|
align?: string;
|
|
104
101
|
};
|
|
@@ -170,13 +167,6 @@ export interface MappedTextStyle {
|
|
|
170
167
|
/** True if `textTrimming: true` in theme. */
|
|
171
168
|
textTrimming: boolean;
|
|
172
169
|
}
|
|
173
|
-
/** Resolved block wrapper padding. */
|
|
174
|
-
export interface MappedBlockPadding {
|
|
175
|
-
/** Space-separated `es-p{n}{side}` classes. */
|
|
176
|
-
classes: string;
|
|
177
|
-
/** Inline `padding-{side}` declarations for values without a step class. */
|
|
178
|
-
style: string;
|
|
179
|
-
}
|
|
180
170
|
/** Resolved button styles. */
|
|
181
171
|
export interface MappedButtonStyle {
|
|
182
172
|
/** Inline CSS for outer `<td>` (external padding). */
|
|
@@ -65,7 +65,6 @@ export declare class RecommendationBlock extends Block {
|
|
|
65
65
|
*/
|
|
66
66
|
onDelete(node: ImmutableHtmlNode): void;
|
|
67
67
|
private _ensureMobileFitRule;
|
|
68
|
-
private _ensureTextTrimCss;
|
|
69
68
|
private _syncHeightBound;
|
|
70
69
|
/**
|
|
71
70
|
* Warns (dark advisory toaster) when the design holds more than one live
|