@useinsider/guido 3.22.0 → 3.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/README.md +35 -4
  2. package/dist/components/Guido.vue.js +1 -1
  3. package/dist/components/Guido.vue2.js +118 -108
  4. package/dist/components/organisms/unsubscribe/UnsubscribePageSelection.vue.js +11 -11
  5. package/dist/components/organisms/unsubscribe/UnsubscribePageSelection.vue2.js +9 -9
  6. package/dist/composables/useEditorOpenMetrics.js +167 -0
  7. package/dist/composables/useStripo.js +93 -82
  8. package/dist/config/compiler/utils/recommendationCompilerUtils.js +22 -22
  9. package/dist/config/migrator/recommendation/compositionMapper.js +56 -49
  10. package/dist/config/migrator/recommendation/extractors.js +100 -40
  11. package/dist/config/migrator/recommendation/htmlBuilder.js +285 -207
  12. package/dist/config/migrator/recommendation/settingsMapper.js +37 -36
  13. package/dist/config/migrator/recommendation/themeMapper.js +53 -41
  14. package/dist/config/migrator/recommendationMigrator.js +68 -61
  15. package/dist/extensions/Blocks/Items/controls/button/link.js +14 -17
  16. package/dist/extensions/Blocks/Items/controls/cardComposition.js +14 -17
  17. package/dist/extensions/Blocks/Items/controls/image/link.js +14 -17
  18. package/dist/extensions/Blocks/Items/controls/name/trimming.js +9 -10
  19. package/dist/extensions/Blocks/Items/controls/price/currencyLocation.js +24 -25
  20. package/dist/extensions/Blocks/Items/controls/price/currencySymbol.js +12 -13
  21. package/dist/extensions/Blocks/Items/controls/price/formattedPrice.js +29 -30
  22. package/dist/extensions/Blocks/Items/controls/price/hideDiscount.js +15 -16
  23. package/dist/extensions/Blocks/Items/controls/price/priceOrientation.js +25 -26
  24. package/dist/extensions/Blocks/Items/controls/price/singlePrice.js +27 -28
  25. package/dist/extensions/Blocks/Items/controls/settingsControl.js +75 -80
  26. package/dist/extensions/Blocks/Recommendation/block.js +33 -24
  27. package/dist/extensions/Blocks/Recommendation/controls/cardBackground/index.js +3 -3
  28. package/dist/extensions/Blocks/Recommendation/controls/cardComposition/index.js +27 -26
  29. package/dist/extensions/Blocks/Recommendation/controls/customAttribute/textTrim.js +13 -13
  30. package/dist/extensions/Blocks/Recommendation/controls/main/index.js +165 -175
  31. package/dist/extensions/Blocks/Recommendation/controls/name/textTrim.js +5 -5
  32. package/dist/extensions/Blocks/Recommendation/controls/omnibusDiscount/textAfter.js +8 -8
  33. package/dist/extensions/Blocks/Recommendation/controls/omnibusDiscount/textBefore.js +15 -15
  34. package/dist/extensions/Blocks/Recommendation/controls/omnibusPrice/textAfter.js +12 -12
  35. package/dist/extensions/Blocks/Recommendation/controls/omnibusPrice/textBefore.js +10 -10
  36. package/dist/extensions/Blocks/Recommendation/controls/spacing/index.js +1 -1
  37. package/dist/extensions/Blocks/Recommendation/templates/grid/template.js +23 -22
  38. package/dist/extensions/Blocks/Recommendation/templates/list/template.js +19 -18
  39. package/dist/extensions/Blocks/Recommendation/templates/utils.js +82 -91
  40. package/dist/extensions/Blocks/Recommendation/utils/inlinePriceOrder.js +12 -0
  41. package/dist/extensions/Blocks/Recommendation/utils/legacyStrategyMap.js +3 -2
  42. package/dist/extensions/Blocks/common-control.js +62 -55
  43. package/dist/guido.css +1 -1
  44. package/dist/library.js +12 -10
  45. package/dist/package.json.js +6 -4
  46. package/dist/public/prefetchRuntime.js +4 -0
  47. package/dist/src/composables/useEditorOpenMetrics.d.ts +27 -0
  48. package/dist/src/composables/useStripo.d.ts +2 -1
  49. package/dist/src/config/migrator/recommendation/compositionMapper.d.ts +3 -1
  50. package/dist/src/config/migrator/recommendation/extractors.d.ts +35 -6
  51. package/dist/src/config/migrator/recommendation/htmlBuilder.d.ts +3 -1
  52. package/dist/src/config/migrator/recommendation/themeMapper.d.ts +3 -1
  53. package/dist/src/config/migrator/recommendation/types.d.ts +11 -1
  54. package/dist/src/extensions/Blocks/Items/controls/cardComposition.d.ts +0 -1
  55. package/dist/src/extensions/Blocks/Recommendation/block.d.ts +1 -0
  56. package/dist/src/extensions/Blocks/Recommendation/controls/main/index.d.ts +5 -10
  57. package/dist/src/extensions/Blocks/Recommendation/templates/utils.d.ts +1 -13
  58. package/dist/src/extensions/Blocks/Recommendation/utils/inlinePriceOrder.d.ts +9 -0
  59. package/dist/src/extensions/Blocks/Recommendation/utils/legacyStrategyMap.d.ts +2 -19
  60. package/dist/src/extensions/Blocks/common-control.d.ts +2 -0
  61. package/dist/src/library.d.ts +1 -0
  62. package/dist/src/public/prefetchRuntime.d.ts +1 -0
  63. package/dist/src/stores/unsubscribe.d.ts +10 -0
  64. package/dist/src/utils/runtimePrefetch.d.ts +4 -0
  65. package/dist/src/utils/stripoRuntime.d.ts +3 -0
  66. package/dist/static/stripo-runtime-manifest.json.js +9 -0
  67. package/dist/stores/unsubscribe.js +33 -29
  68. package/dist/utils/runtimePrefetch.js +26 -0
  69. package/dist/utils/stripoRuntime.js +13 -0
  70. package/package.json +7 -2
@@ -1,10 +1,10 @@
1
- import { PRE_RRS_CONFIG_VERSION as s, DEFAULT_CURRENCY as i } from "../../../extensions/Blocks/Recommendation/constants/defaultConfig.js";
2
- import { DEFAULT_CARDS_IN_ROW as m, DEFAULT_MOBILE_ROW_SPACING as p, DEFAULT_MOBILE_COLUMN_SPACING as d, DEFAULT_ROW_SPACING as S, DEFAULT_COLUMN_SPACING as f, DEFAULT_MOBILE_CARDS_IN_ROW as a } from "../../../extensions/Blocks/Recommendation/constants/layout.js";
3
- import { mapLegacyStrategy as l } from "../../../extensions/Blocks/Recommendation/utils/legacyStrategyMap.js";
4
- function c(t) {
1
+ import { PRE_RRS_CONFIG_VERSION as p, DEFAULT_CURRENCY as i } from "../../../extensions/Blocks/Recommendation/constants/defaultConfig.js";
2
+ import { DEFAULT_CARDS_IN_ROW as d, DEFAULT_MOBILE_ROW_SPACING as S, DEFAULT_MOBILE_COLUMN_SPACING as c, DEFAULT_ROW_SPACING as f, DEFAULT_COLUMN_SPACING as l, DEFAULT_MOBILE_CARDS_IN_ROW as s } from "../../../extensions/Blocks/Recommendation/constants/layout.js";
3
+ import { mapLegacyStrategy as _ } from "../../../extensions/Blocks/Recommendation/utils/legacyStrategyMap.js";
4
+ function I(t) {
5
5
  return t === "0" || t === 0 ? "before" : "after";
6
6
  }
7
- function _(t) {
7
+ function A(t) {
8
8
  if (typeof t == "number" && Number.isFinite(t))
9
9
  return t;
10
10
  if (typeof t == "string") {
@@ -14,51 +14,52 @@ function _(t) {
14
14
  }
15
15
  return i.decimalCount;
16
16
  }
17
- function I(t) {
17
+ function L(t) {
18
18
  return t === "." || t === "," || t === " " || t === "" ? t : ",";
19
19
  }
20
- function A(t) {
20
+ function N(t) {
21
21
  return t === "." || t === "," || t === " " ? t : ".";
22
22
  }
23
- function L(t) {
23
+ function R(t) {
24
24
  if (!t || typeof t != "object")
25
25
  return { ...i };
26
- const o = t, n = o.value ?? o.name ?? i.code, r = o.symbol ?? n;
26
+ const o = t, n = o.value ?? o.name ?? i.code, e = o.symbol ?? n;
27
27
  return {
28
28
  code: n,
29
- symbol: r,
30
- alignment: c(o.alignment),
31
- decimalCount: _(o.decimalCount),
32
- decimalSeparator: A(o.decimalSeparator),
33
- thousandSeparator: I(o.thousandSeparator)
29
+ symbol: e,
30
+ alignment: I(o.alignment),
31
+ decimalCount: A(o.decimalCount),
32
+ decimalSeparator: N(o.decimalSeparator),
33
+ thousandSeparator: L(o.thousandSeparator)
34
34
  };
35
35
  }
36
- function N(t) {
36
+ function b(t) {
37
37
  return t === "horizontal" || t === "list" ? "list" : "grid";
38
38
  }
39
- function R(t) {
40
- return l(t) || "mostPopular";
39
+ function D(t) {
40
+ return _(t) || "mostPopular";
41
41
  }
42
- function O(t, o, n) {
43
- const r = o.rowCount ?? t.cardsInRow ?? m, u = o.totalCount ?? (typeof t.size == "string" ? parseInt(t.size) : t.size) ?? 6;
42
+ function U(t, o, n) {
43
+ var a, u;
44
+ const e = o.rowCount ?? t.cardsInRow ?? d, m = o.totalCount ?? (typeof t.size == "string" ? parseInt(t.size) : t.size) ?? 6;
44
45
  return {
45
46
  recommendationId: n,
46
- strategy: R(t.strategy),
47
- productIds: (t.productIds ?? []).map((e) => String(e)),
48
- size: String(u),
47
+ strategy: D(t.strategy),
48
+ productIds: (t.productIds ?? []).map((r) => String(r)),
49
+ size: String(m),
49
50
  shuffleProducts: !!t.shuffleProducts,
50
51
  language: t.language ?? "en_US",
51
- currency: L(t.currencySettings),
52
- filters: (t.filters ?? []).map((e) => ({ ...e })),
53
- layout: N(t.orientation ?? o.orientation),
54
- cardsInRow: r,
55
- mobileCardsInRow: a,
56
- mobileLayoutEnabled: !1,
57
- previousMobileCardsInRow: a,
58
- columnSpacing: f,
59
- rowSpacing: S,
60
- mobileColumnSpacing: d,
61
- mobileRowSpacing: p,
52
+ currency: R(t.currencySettings),
53
+ filters: (t.filters ?? []).map((r) => ({ ...r })),
54
+ layout: b(t.orientation ?? o.orientation),
55
+ cardsInRow: e,
56
+ mobileCardsInRow: s,
57
+ mobileLayoutEnabled: ((u = (a = o.theme) == null ? void 0 : a.blockAdapt) == null ? void 0 : u.adapt) === !0,
58
+ previousMobileCardsInRow: s,
59
+ columnSpacing: l,
60
+ rowSpacing: f,
61
+ mobileColumnSpacing: c,
62
+ mobileRowSpacing: S,
62
63
  omnibusPrice: { textBefore: "", textAfter: "" },
63
64
  omnibusDiscount: { textBefore: "", textAfter: "" },
64
65
  // Preserve the legacy price-placement toggles. Absent legacy keys map to
@@ -66,10 +67,10 @@ function O(t, o, n) {
66
67
  // gated). New Guido blocks default differently (see DEFAULT_NODE_CONFIG).
67
68
  priceMovedToNextLine: !!t.isPriceMovedToNextLine,
68
69
  priceHideIfSameAsDiscounted: !!t.isPriceDeletedForZeroSale,
69
- configVersion: s
70
+ configVersion: p
70
71
  };
71
72
  }
72
73
  export {
73
- L as mapCurrency,
74
- O as mapSettings
74
+ R as mapCurrency,
75
+ U as mapSettings
75
76
  };
@@ -1,34 +1,44 @@
1
1
  function r(n, t, o) {
2
2
  o != null && o !== "" && n.push(`${t}: ${o}`);
3
3
  }
4
- function $(n) {
4
+ function x(n) {
5
+ if (typeof n == "number" && Number.isFinite(n) && n >= 0)
6
+ return Math.trunc(n);
7
+ if (typeof n == "string" && /^\d+$/.test(n.trim())) {
8
+ const t = Number(n.trim());
9
+ if (Number.isFinite(t) && t >= 0)
10
+ return t;
11
+ }
12
+ }
13
+ function P(n) {
5
14
  if (!n)
6
15
  return null;
7
16
  const t = n.top ?? n.all ?? 0, o = n.right ?? n.all ?? 0, i = n.bottom ?? n.all ?? 0, l = n.left ?? n.all ?? 0;
8
17
  return t === 0 && o === 0 && i === 0 && l === 0 ? null : `${t}px ${o}px ${i}px ${l}px`;
9
18
  }
10
- function j(n) {
19
+ function z(n) {
11
20
  if (!n)
12
21
  return null;
13
22
  const { top: t, right: o, bottom: i, left: l } = n;
14
23
  return t === void 0 ? null : t === o && t === i && t === l ? t : null;
15
24
  }
16
- function S(n, t, o, i) {
17
- const l = j(o);
25
+ function $(n, t, o, i) {
26
+ const l = z(o);
18
27
  if (l !== null) {
19
28
  r(n, `border-${t}`, i(l));
20
29
  return;
21
30
  }
22
31
  o && (r(n, `border-top-${t}`, o.top !== void 0 ? i(o.top) : null), r(n, `border-right-${t}`, o.right !== void 0 ? i(o.right) : null), r(n, `border-bottom-${t}`, o.bottom !== void 0 ? i(o.bottom) : null), r(n, `border-left-${t}`, o.left !== void 0 ? i(o.left) : null));
23
32
  }
24
- function C(n) {
33
+ function D(n) {
25
34
  if (!n)
26
35
  return null;
27
- if (typeof n.radius == "number")
28
- return `${n.radius}px`;
36
+ const t = x(n.radius ?? n.borderRadius);
37
+ if (t !== void 0)
38
+ return `${t}px`;
29
39
  if (typeof n.lt == "number" || typeof n.rt == "number" || typeof n.rb == "number" || typeof n.lb == "number") {
30
- const t = n.lt ?? 0, o = n.rt ?? 0, i = n.rb ?? 0, l = n.lb ?? 0;
31
- return `${t}px ${o}px ${i}px ${l}px`;
40
+ const o = n.lt ?? 0, i = n.rt ?? 0, l = n.rb ?? 0, f = n.lb ?? 0;
41
+ return `${o}px ${i}px ${l}px ${f}px`;
32
42
  }
33
43
  return null;
34
44
  }
@@ -36,58 +46,60 @@ function I(n) {
36
46
  var t, o;
37
47
  return ((t = n.textLineSpacing) == null ? void 0 : t.lineSpacing) ?? ((o = n.textLineSpacing) == null ? void 0 : o["font-lineSpacing"]);
38
48
  }
39
- function L(n) {
40
- var f, u, a, g, d, b, p, s;
41
- const t = [], o = [], i = (f = n == null ? void 0 : n.textAlign) == null ? void 0 : f.align, l = $((u = n == null ? void 0 : n.textPadding) == null ? void 0 : u.desktop), x = (a = n == null ? void 0 : n.textStyle) == null ? void 0 : a["font-weight"], c = (g = n == null ? void 0 : n.textStyle) == null ? void 0 : g["font-style"];
42
- return r(t, "background-color", (d = n == null ? void 0 : n.textBackgroundColor) == null ? void 0 : d.color), r(t, "padding", l), r(o, "font-family", (b = n == null ? void 0 : n.textStyle) == null ? void 0 : b["font-family"]), r(o, "font-size", (p = n == null ? void 0 : n.textStyle) == null ? void 0 : p["font-size"]), r(o, "font-weight", x), r(o, "font-style", c), r(o, "color", (s = n == null ? void 0 : n.textColor) == null ? void 0 : s.color), r(o, "line-height", I(n ?? {})), r(o, "text-align", i), {
49
+ function N(n) {
50
+ var u, s, a, d, g, b, p, y;
51
+ const t = [], o = [], i = (u = n == null ? void 0 : n.textAlign) == null ? void 0 : u.align, l = P((s = n == null ? void 0 : n.textPadding) == null ? void 0 : s.desktop), f = (a = n == null ? void 0 : n.textStyle) == null ? void 0 : a["font-weight"], c = (d = n == null ? void 0 : n.textStyle) == null ? void 0 : d["font-style"];
52
+ return r(t, "background-color", (g = n == null ? void 0 : n.textBackgroundColor) == null ? void 0 : g.color), r(t, "padding", l), r(o, "font-family", (b = n == null ? void 0 : n.textStyle) == null ? void 0 : b["font-family"]), r(o, "font-size", (p = n == null ? void 0 : n.textStyle) == null ? void 0 : p["font-size"]), r(o, "font-weight", f), r(o, "font-style", c), r(o, "color", (y = n == null ? void 0 : n.textColor) == null ? void 0 : y.color), r(o, "line-height", I(n ?? {})), r(o, "text-align", i), {
43
53
  tdStyle: t.join("; "),
44
54
  pStyle: o.join("; "),
45
55
  align: i || void 0,
46
- wrapBold: x === "bold",
56
+ wrapBold: f === "bold",
47
57
  wrapItalic: c === "italic",
48
58
  textTrimming: (n == null ? void 0 : n.textTrimming) === !0
49
59
  };
50
60
  }
51
- function N(n) {
52
- var u, a, g, d, b, p, s, k, w, P, B, z;
61
+ function E(n) {
62
+ var s, a, d, g, b, p, y, k, w, B, T, j;
53
63
  const t = [], o = [], i = [];
54
- r(t, "padding", $((u = n == null ? void 0 : n.buttonExternalPadding) == null ? void 0 : u.desktop)), r(i, "padding", $((a = n == null ? void 0 : n.buttonInternalPadding) == null ? void 0 : a.desktop)), r(i, "font-family", (g = n == null ? void 0 : n.buttonStyle) == null ? void 0 : g["font-family"]), r(i, "font-size", (d = n == null ? void 0 : n.buttonStyle) == null ? void 0 : d["font-size"]), r(i, "font-weight", (b = n == null ? void 0 : n.buttonStyle) == null ? void 0 : b["font-weight"]), r(i, "font-style", (p = n == null ? void 0 : n.buttonStyle) == null ? void 0 : p["font-style"]);
55
- const l = (s = n == null ? void 0 : n.buttonColor) == null ? void 0 : s.color, x = (k = n == null ? void 0 : n.textButtonColor) == null ? void 0 : k.color;
56
- r(o, "background", l), r(i, "background", l), r(i, "color", x);
64
+ r(t, "padding", P((s = n == null ? void 0 : n.buttonExternalPadding) == null ? void 0 : s.desktop)), r(i, "padding", P((a = n == null ? void 0 : n.buttonInternalPadding) == null ? void 0 : a.desktop)), r(i, "font-family", (d = n == null ? void 0 : n.buttonStyle) == null ? void 0 : d["font-family"]), r(i, "font-size", (g = n == null ? void 0 : n.buttonStyle) == null ? void 0 : g["font-size"]), r(i, "font-weight", (b = n == null ? void 0 : n.buttonStyle) == null ? void 0 : b["font-weight"]), r(i, "font-style", (p = n == null ? void 0 : n.buttonStyle) == null ? void 0 : p["font-style"]);
65
+ const l = (y = n == null ? void 0 : n.buttonColor) == null ? void 0 : y.color, f = (k = n == null ? void 0 : n.textButtonColor) == null ? void 0 : k.color;
66
+ r(o, "background", l), r(i, "background", l), r(i, "color", f);
57
67
  const c = n == null ? void 0 : n.buttonBorder;
58
- S(o, "width", c == null ? void 0 : c.width, (y) => `${y}px`), S(o, "style", c == null ? void 0 : c.style, (y) => y), S(o, "color", c == null ? void 0 : c.color, (y) => y);
59
- const f = C(n == null ? void 0 : n.buttonBorderRadius);
60
- return f && (r(o, "border-radius", f), r(i, "border-radius", f)), ((w = n == null ? void 0 : n.buttonStretch) == null ? void 0 : w.stretched) === !1 ? (r(o, "display", "inline-block"), r(i, "display", "inline-block")) : ((P = n == null ? void 0 : n.buttonStretch) == null ? void 0 : P.stretched) === !0 && (r(o, "display", "block"), r(i, "display", "block")), {
68
+ $(o, "width", c == null ? void 0 : c.width, (S) => `${S}px`), $(o, "style", c == null ? void 0 : c.style, (S) => S), $(o, "color", c == null ? void 0 : c.color, (S) => S);
69
+ const u = D((n == null ? void 0 : n.buttonBorderRadius) ?? (n == null ? void 0 : n.borderRadius));
70
+ return u && (r(o, "border-radius", u), r(i, "border-radius", u)), ((w = n == null ? void 0 : n.buttonStretch) == null ? void 0 : w.stretched) === !1 ? (r(o, "display", "inline-block"), r(i, "display", "inline-block")) : ((B = n == null ? void 0 : n.buttonStretch) == null ? void 0 : B.stretched) === !0 && (r(o, "display", "block"), r(i, "display", "block")), {
61
71
  tdStyle: t.join("; "),
62
- align: ((B = n == null ? void 0 : n.buttonAlign) == null ? void 0 : B.align) || void 0,
72
+ align: ((T = n == null ? void 0 : n.buttonAlign) == null ? void 0 : T.align) || void 0,
63
73
  spanStyle: o.join("; "),
64
74
  aStyle: i.join("; "),
65
- text: (z = n == null ? void 0 : n.buttonText) == null ? void 0 : z.text
75
+ text: (j = n == null ? void 0 : n.buttonText) == null ? void 0 : j.text
66
76
  };
67
77
  }
68
- function T(n) {
69
- if (typeof n == "number" && Number.isFinite(n) && n >= 0)
70
- return Math.trunc(n);
71
- if (typeof n == "string" && /^\d+$/.test(n.trim())) {
72
- const t = Number(n.trim());
73
- if (Number.isFinite(t) && t >= 0)
74
- return t;
75
- }
76
- }
77
- function A(n) {
78
+ function L(n) {
78
79
  var t, o;
79
80
  return {
80
- width: T((t = n == null ? void 0 : n.imageSize) == null ? void 0 : t.width),
81
- height: T((o = n == null ? void 0 : n.imageSize) == null ? void 0 : o.height)
81
+ width: x((t = n == null ? void 0 : n.imageSize) == null ? void 0 : t.width),
82
+ height: x((o = n == null ? void 0 : n.imageSize) == null ? void 0 : o.height)
82
83
  };
83
84
  }
84
- function F(n, t) {
85
+ const A = /* @__PURE__ */ new Set([5, 10, 15, 20, 25, 30, 35, 40]), C = [["t", "top"], ["r", "right"], ["b", "bottom"], ["l", "left"]];
86
+ function R(n) {
87
+ if (!n)
88
+ return;
89
+ const t = [], o = [];
90
+ return C.forEach(([i, l]) => {
91
+ const f = x(n[l] ?? n.all) ?? 0;
92
+ A.has(f) ? t.push(`es-p${f}${i}`) : f > 0 && o.push(`padding-${l}: ${f}px`);
93
+ }), { classes: t.join(" "), style: o.join("; ") };
94
+ }
95
+ function v(n, t) {
85
96
  const o = (n ?? "").trim().replace(/;$/, "").trim(), i = (t ?? "").trim().replace(/;$/, "").trim();
86
97
  return o ? i ? `${o}; ${i}` : o : i;
87
98
  }
88
99
  export {
89
- F as appendStyle,
90
- N as mapButtonTheme,
91
- A as mapImageTheme,
92
- L as mapTextTheme
100
+ v as appendStyle,
101
+ R as mapBlockPadding,
102
+ E as mapButtonTheme,
103
+ L as mapImageTheme,
104
+ N as mapTextTheme
93
105
  };
@@ -1,52 +1,59 @@
1
- import { BlockId as f } from "../../enums/block.js";
2
- import { DEFAULT_NODE_CONFIG as y } from "../../extensions/Blocks/Recommendation/constants/defaultConfig.js";
3
- import { ATTR_RECOMMENDATION_TITLE as b } from "../../extensions/Blocks/Recommendation/constants/selectors.js";
4
- import { useTemplateStore as T } from "../../stores/template.js";
5
- import { mapComposition as v } from "./recommendation/compositionMapper.js";
6
- import { extractCurrencyFromBlock as C, extractTitleText as M, hasVisibleTitle as R, extractCardBgColor as S, isPartnerManagedBlock as h } from "./recommendation/extractors.js";
7
- import { buildBlockHtml as w } from "./recommendation/htmlBuilder.js";
8
- import { parseRecommendationId as x, parseLegacyConfig as E } from "./recommendation/parseLegacyConfig.js";
9
- import { mapSettings as A } from "./recommendation/settingsMapper.js";
10
- const H = 'td[esd-dev-product-config][class*="ins-recommendation-v3-block-"]:not(.recommendation-block-v2), td.product-block[esd-handler-name*="EmailRecommendationV3"][esd-dev-product-config]:not(.recommendation-block-v2)';
11
- function B(n, t, c) {
12
- var l;
13
- const r = x(t);
14
- if (r === null)
1
+ import { BlockId as b } from "../../enums/block.js";
2
+ import { DEFAULT_NODE_CONFIG as C } from "../../extensions/Blocks/Recommendation/constants/defaultConfig.js";
3
+ import { ATTR_RECOMMENDATION_TITLE as f } from "../../extensions/Blocks/Recommendation/constants/selectors.js";
4
+ import { useTemplateStore as M } from "../../stores/template.js";
5
+ import { mapComposition as x } from "./recommendation/compositionMapper.js";
6
+ import { isPriceOnNextLine as R, extractCurrencyFromBlock as h, isOldPriceFirst as S, withRenderedTextTheme as w, extractTitleText as E, hasEmptyTitle as L, hasVisibleTitle as B, extractCardBgColor as P, isPartnerManagedBlock as A, extractRenderedBlockPadding as H } from "./recommendation/extractors.js";
7
+ import { buildBlockHtml as N } from "./recommendation/htmlBuilder.js";
8
+ import { parseRecommendationId as O, parseLegacyConfig as F } from "./recommendation/parseLegacyConfig.js";
9
+ import { mapSettings as I } from "./recommendation/settingsMapper.js";
10
+ import { mapBlockPadding as _ } from "./recommendation/themeMapper.js";
11
+ const k = 'td[esd-dev-product-config][class*="ins-recommendation-v3-block-"]:not(.recommendation-block-v2), td.product-block[esd-handler-name*="EmailRecommendationV3"][esd-dev-product-config]:not(.recommendation-block-v2)';
12
+ function $(c, e, m) {
13
+ var l, g, p;
14
+ const t = O(e);
15
+ if (t === null)
15
16
  return console.warn(
16
17
  "[RecommendationMigrator] Skipping block — missing/invalid `ins-recommendation-v3-campaign-id`"
17
18
  ), !1;
18
- const o = E(t);
19
- if (!o)
19
+ const r = F(e);
20
+ if (!r)
20
21
  return console.warn(
21
- `[RecommendationMigrator] Aborting block id=${r} — \`esd-dev-product-config\` missing or unable to be parsed`
22
+ `[RecommendationMigrator] Aborting block id=${t} — \`esd-dev-product-config\` missing or unable to be parsed`
22
23
  ), !1;
23
- const a = c[String(r)] ?? {
24
- currencySettings: C(t)
25
- }, i = A(a, o, r), e = v((l = o.composition) == null ? void 0 : l.variables), d = M(t);
26
- e.titleVariable || (e.visibility[b] = R(t));
27
- const p = S(t), g = {
28
- ...i,
24
+ const o = m[String(t)] ?? {}, n = {
25
+ ...o,
26
+ currencySettings: o.currencySettings ?? h(e),
27
+ isPriceMovedToNextLine: o.isPriceMovedToNextLine ?? R(e)
28
+ }, a = I(n, r, t), i = x(
29
+ w((l = r.composition) == null ? void 0 : l.variables, e),
30
+ { oldPriceFirst: S(e) }
31
+ ), u = E(e);
32
+ L(e) ? i.visibility[f] = !1 : i.titleVariable || (i.visibility[f] = B(e));
33
+ const y = P(e), T = {
34
+ ...a,
29
35
  strategyId: "",
30
- composition: e.composition,
31
- visibility: e.visibility,
32
- previousTitleHtml: y.previousTitleHtml,
33
- textTrimming: e.anyTextTrimming
34
- }, m = h(t), u = `
36
+ composition: i.composition,
37
+ visibility: i.visibility,
38
+ previousTitleHtml: C.previousTitleHtml,
39
+ textTrimming: i.anyTextTrimming
40
+ }, s = A(e), v = `
35
41
  <table>
36
42
  <tbody>
37
43
  <tr>
38
44
  <td class="esd-structure" align="left">
39
45
  <table width="100%" cellpadding="0" cellspacing="0">
40
46
  <tbody>
41
- <tr>${w({
42
- nodeConfig: g,
43
- composition: e,
44
- cardBg: p,
45
- titleText: d,
46
- legacyId: t.getAttribute("id") ?? void 0,
47
- legacyBgColor: t.getAttribute("bgcolor") ?? void 0,
48
- preserveInnerHtml: m ? t.innerHTML : void 0,
49
- skipCompile: m
47
+ <tr>${N({
48
+ nodeConfig: T,
49
+ composition: i,
50
+ cardBg: y,
51
+ titleText: u,
52
+ legacyId: e.getAttribute("id") ?? void 0,
53
+ legacyBgColor: e.getAttribute("bgcolor") ?? void 0,
54
+ preserveInnerHtml: s ? e.innerHTML : void 0,
55
+ skipCompile: s,
56
+ blockPadding: _(((p = (g = r.theme) == null ? void 0 : g.blockPadding) == null ? void 0 : p.desktop) ?? H(e))
50
57
  })}</tr>
51
58
  </tbody>
52
59
  </table>
@@ -54,40 +61,40 @@ function B(n, t, c) {
54
61
  </tr>
55
62
  </tbody>
56
63
  </table>
57
- `, s = n.parseFromString(u, "text/html").querySelector("td.esd-structure");
58
- return !s || !t.parentNode ? (console.warn(
59
- `[RecommendationMigrator] Aborting block id=${r} — failed to construct new HTML element`
60
- ), !1) : (t.parentNode.replaceChild(s, t), !0);
64
+ `, d = c.parseFromString(v, "text/html").querySelector("td.esd-structure");
65
+ return !d || !e.parentNode ? (console.warn(
66
+ `[RecommendationMigrator] Aborting block id=${t} — failed to construct new HTML element`
67
+ ), !1) : (e.parentNode.replaceChild(d, e), !0);
61
68
  }
62
- function G(n, t = {}) {
63
- const c = new DOMParser();
64
- let r;
69
+ function X(c, e = {}) {
70
+ const m = new DOMParser();
71
+ let t;
65
72
  try {
66
- r = c.parseFromString(n, "text/html");
67
- } catch (i) {
68
- return console.error("[RecommendationMigrator] Failed to parse template:", i), n;
73
+ t = m.parseFromString(c, "text/html");
74
+ } catch (n) {
75
+ return console.error("[RecommendationMigrator] Failed to parse template:", n), c;
69
76
  }
70
- const o = Array.from(r.querySelectorAll(H));
77
+ const r = Array.from(t.querySelectorAll(k));
71
78
  try {
72
- T().$patch((e) => {
73
- e.migrations = {
74
- ...e.migrations,
75
- [f.Recommendation]: o.length
79
+ M().$patch((a) => {
80
+ a.migrations = {
81
+ ...a.migrations,
82
+ [b.Recommendation]: r.length
76
83
  };
77
84
  });
78
85
  } catch {
79
86
  }
80
- if (o.length === 0)
81
- return n;
82
- let a = 0;
83
- return o.forEach((i) => {
87
+ if (r.length === 0)
88
+ return c;
89
+ let o = 0;
90
+ return r.forEach((n) => {
84
91
  try {
85
- B(c, i, t) && (a += 1);
86
- } catch (e) {
87
- console.error("[RecommendationMigrator] Unexpected error migrating block:", e);
92
+ $(m, n, e) && (o += 1);
93
+ } catch (a) {
94
+ console.error("[RecommendationMigrator] Unexpected error migrating block:", a);
88
95
  }
89
- }), a > 0 && console.info(`[RecommendationMigrator] Migrated ${a} legacy Recommendation block(s)`), r.documentElement.outerHTML;
96
+ }), o > 0 && console.info(`[RecommendationMigrator] Migrated ${o} legacy Recommendation block(s)`), t.documentElement.outerHTML;
90
97
  }
91
98
  export {
92
- G as migrateRecommendation
99
+ X as migrateRecommendation
93
100
  };
@@ -1,31 +1,28 @@
1
- import { CommonControl as r } from "../../../common-control.js";
2
- import { ItemsBlockControlId as i } from "../../enums/controlEnums.js";
3
- import { getItemsBlockConfig as o } from "../../utils/nodeConfigUtils.js";
4
- const s = i.BUTTON_LINK, n = {
1
+ import { CommonControl as s } from "../../../common-control.js";
2
+ import { ItemsBlockControlId as r } from "../../enums/controlEnums.js";
3
+ import { getItemsBlockConfig as a } from "../../utils/nodeConfigUtils.js";
4
+ const e = r.BUTTON_LINK, n = {
5
5
  LINK: "link"
6
6
  };
7
- class m extends r {
7
+ class L extends s {
8
8
  getId() {
9
- return s;
9
+ return e;
10
10
  }
11
11
  getTemplate() {
12
12
  return `
13
- <div class="container ${s}">
13
+ <div class="container ${e}">
14
14
  ${this._getLink()}
15
15
  </div>
16
16
  `;
17
17
  }
18
18
  onRender() {
19
- const t = o(this.currentNode);
20
- this.api.updateValues({
21
- [n.LINK]: (t == null ? void 0 : t.buttonLink) ?? ""
22
- });
19
+ this.forgetLastPanelNode();
23
20
  }
24
- onTemplateNodeUpdated(t) {
25
- super.onTemplateNodeUpdated(t), this.handleBlockInstanceChange(() => {
26
- const e = o(this.currentNode);
21
+ onTemplateNodeUpdated(o) {
22
+ super.onTemplateNodeUpdated(o), this.handleBlockInstanceChange(() => {
23
+ const t = a(this.currentNode);
27
24
  this.api.updateValues({
28
- [n.LINK]: (e == null ? void 0 : e.buttonLink) ?? ""
25
+ [n.LINK]: (t == null ? void 0 : t.buttonLink) ?? ""
29
26
  });
30
27
  });
31
28
  }
@@ -44,6 +41,6 @@ class m extends r {
44
41
  }
45
42
  }
46
43
  export {
47
- m as ButtonLinkControl,
48
- s as CONTROL_BLOCK_ID
44
+ L as ButtonLinkControl,
45
+ e as CONTROL_BLOCK_ID
49
46
  };
@@ -1,12 +1,12 @@
1
1
  var I = Object.defineProperty;
2
2
  var U = (d, a, t) => a in d ? I(d, a, { enumerable: !0, configurable: !0, writable: !0, value: t }) : d[a] = t;
3
- var p = (d, a, t) => U(d, typeof a != "symbol" ? a + "" : a, t);
3
+ var y = (d, a, t) => U(d, typeof a != "symbol" ? a + "" : a, t);
4
4
  import { ModificationDescription as c } from "../../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
5
5
  import { CommonControl as b } from "../../common-control.js";
6
6
  import { ItemsBlockId as r } from "../enums/controlEnums.js";
7
7
  import { SETTINGS_ENUMS as h } from "../enums/settingsEnums.js";
8
8
  import { getItemsBlockConfig as R, setItemsBlockConfig as m } from "../utils/nodeConfigUtils.js";
9
- const g = "ui-elements-items-card-composition-block", i = {
9
+ const N = "ui-elements-items-card-composition-block", i = {
10
10
  PRODUCT_IMAGE: "image",
11
11
  PRODUCT_NAME: "name",
12
12
  PRODUCT_QUANTITY: "quantity",
@@ -17,7 +17,7 @@ const g = "ui-elements-items-card-composition-block", i = {
17
17
  class M extends b {
18
18
  constructor() {
19
19
  super(...arguments);
20
- p(this, "visibilityState", {
20
+ y(this, "visibilityState", {
21
21
  [i.PRODUCT_IMAGE]: !0,
22
22
  [i.PRODUCT_NAME]: !0,
23
23
  [i.PRODUCT_QUANTITY]: !0,
@@ -27,7 +27,7 @@ class M extends b {
27
27
  });
28
28
  }
29
29
  getId() {
30
- return g;
30
+ return N;
31
31
  }
32
32
  getTemplate() {
33
33
  return `
@@ -44,7 +44,7 @@ class M extends b {
44
44
  `;
45
45
  }
46
46
  onRender() {
47
- this._syncVisibilityFromAttributes(), this._handleBrowsedItemsQuantity(), this._initializeToggles(), this._listenToFormUpdates();
47
+ this.forgetLastPanelNode(), this._listenToFormUpdates();
48
48
  }
49
49
  onTemplateNodeUpdated(t) {
50
50
  super.onTemplateNodeUpdated(t), this.handleBlockInstanceChange(() => {
@@ -61,9 +61,6 @@ class M extends b {
61
61
  </div>
62
62
  `;
63
63
  }
64
- _initializeToggles() {
65
- this._updateTogglesFromState();
66
- }
67
64
  _updateTogglesFromState() {
68
65
  this.api.updateValues({
69
66
  [i.PRODUCT_IMAGE]: this.visibilityState[i.PRODUCT_IMAGE],
@@ -224,21 +221,21 @@ class M extends b {
224
221
  * - When both are visible, they share 50% each
225
222
  */
226
223
  _updatePriceCellWidthsForVerticalLayout(t) {
227
- var O, y;
224
+ var O, p;
228
225
  const e = R(this.currentNode);
229
226
  if (!((e == null ? void 0 : e.orientation) === h.ORIENTATION.VERTICAL))
230
227
  return;
231
- const n = (O = this.currentNode) == null ? void 0 : O.querySelectorAll(".product-price-class"), s = (y = this.currentNode) == null ? void 0 : y.querySelectorAll(".product-original-price-class"), l = (e == null ? void 0 : e.priceOrientation) === "vertical", P = this.visibilityState[i.PRODUCT_PRICE], C = this.visibilityState[i.PRODUCT_ORIGINAL_PRICE], T = t ?? this.api.getDocumentModifier();
228
+ const n = (O = this.currentNode) == null ? void 0 : O.querySelectorAll(".product-price-class"), s = (p = this.currentNode) == null ? void 0 : p.querySelectorAll(".product-original-price-class"), l = (e == null ? void 0 : e.priceOrientation) === "vertical", P = this.visibilityState[i.PRODUCT_PRICE], C = this.visibilityState[i.PRODUCT_ORIGINAL_PRICE], T = t ?? this.api.getDocumentModifier();
232
229
  if (n && n.length > 0) {
233
- const _ = l || !C ? "100%" : "50%";
234
- n.forEach((u) => {
235
- T.modifyHtml(u).setStyle("width", _);
230
+ const u = l || !C ? "100%" : "50%";
231
+ n.forEach((_) => {
232
+ T.modifyHtml(_).setStyle("width", u);
236
233
  });
237
234
  }
238
235
  if (s && s.length > 0) {
239
- const _ = l || !P ? "100%" : "50%";
240
- s.forEach((u) => {
241
- T.modifyHtml(u).setStyle("width", _);
236
+ const u = l || !P ? "100%" : "50%";
237
+ s.forEach((_) => {
238
+ T.modifyHtml(_).setStyle("width", u);
242
239
  });
243
240
  }
244
241
  t || T.apply(new c("Updated price cell widths for vertical layout"));
@@ -256,6 +253,6 @@ class M extends b {
256
253
  }
257
254
  }
258
255
  export {
259
- g as COMPOSITION_CONTROL_BLOCK_ID,
256
+ N as COMPOSITION_CONTROL_BLOCK_ID,
260
257
  M as ItemsBlockCardCompositionControl
261
258
  };
@@ -1,31 +1,28 @@
1
- import { CommonControl as a } from "../../../common-control.js";
2
- import { ItemsBlockControlId as i } from "../../enums/controlEnums.js";
3
- import { getItemsBlockConfig as o } from "../../utils/nodeConfigUtils.js";
4
- const s = i.IMAGE_LINK, n = {
1
+ import { CommonControl as s } from "../../../common-control.js";
2
+ import { ItemsBlockControlId as r } from "../../enums/controlEnums.js";
3
+ import { getItemsBlockConfig as a } from "../../utils/nodeConfigUtils.js";
4
+ const t = r.IMAGE_LINK, n = {
5
5
  LINK: "link"
6
6
  };
7
- class p extends a {
7
+ class L extends s {
8
8
  getId() {
9
- return s;
9
+ return t;
10
10
  }
11
11
  getTemplate() {
12
12
  return `
13
- <div class="container ${s}">
13
+ <div class="container ${t}">
14
14
  ${this._getLink()}
15
15
  </div>
16
16
  `;
17
17
  }
18
18
  onRender() {
19
- const e = o(this.currentNode);
20
- this.api.updateValues({
21
- [n.LINK]: (e == null ? void 0 : e.imageLink) ?? ""
22
- });
19
+ this.forgetLastPanelNode();
23
20
  }
24
- onTemplateNodeUpdated(e) {
25
- super.onTemplateNodeUpdated(e), this.handleBlockInstanceChange(() => {
26
- const t = o(this.currentNode);
21
+ onTemplateNodeUpdated(o) {
22
+ super.onTemplateNodeUpdated(o), this.handleBlockInstanceChange(() => {
23
+ const e = a(this.currentNode);
27
24
  this.api.updateValues({
28
- [n.LINK]: (t == null ? void 0 : t.imageLink) ?? ""
25
+ [n.LINK]: (e == null ? void 0 : e.imageLink) ?? ""
29
26
  });
30
27
  });
31
28
  }
@@ -44,6 +41,6 @@ class p extends a {
44
41
  }
45
42
  }
46
43
  export {
47
- s as CONTROL_BLOCK_ID,
48
- p as ImageLinkControl
44
+ t as CONTROL_BLOCK_ID,
45
+ L as ImageLinkControl
49
46
  };