@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,13 +1,13 @@
1
- import { preserveTextStyles as a } from "../../../../../utils/preserveTextStyles.js";
1
+ import { preserveTextStyles as m } from "../../../../../utils/preserveTextStyles.js";
2
2
  import { ModificationDescription as c } from "../../../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
3
3
  import { CommonControl as l } from "../../../common-control.js";
4
4
  import { RecommendationBlockId as d } from "../../constants/blockIds.js";
5
- import { RecommendationControlId as T } from "../../constants/controlIds.js";
6
- import { BLOCK_ROOT_SELECTOR as f } from "../../constants/selectors.js";
7
- const i = "data-text-before", u = "", p = ".omnibus-text-before";
8
- class g extends l {
5
+ import { RecommendationControlId as f } from "../../constants/controlIds.js";
6
+ import { BLOCK_ROOT_SELECTOR as T } from "../../constants/selectors.js";
7
+ const s = "data-text-before", u = "", p = ".omnibus-text-before";
8
+ class B extends l {
9
9
  getId() {
10
- return T.OMNIBUS_DISCOUNT_TEXT_BEFORE;
10
+ return f.OMNIBUS_DISCOUNT_TEXT_BEFORE;
11
11
  }
12
12
  getTemplate() {
13
13
  return `
@@ -24,7 +24,7 @@ class g extends l {
24
24
  `;
25
25
  }
26
26
  onRender() {
27
- this._setFormValues(), this._listenToFormUpdates();
27
+ this.forgetLastPanelNode(), this._listenToFormUpdates();
28
28
  }
29
29
  onTemplateNodeUpdated(t) {
30
30
  super.onTemplateNodeUpdated(t), this._setFormValues();
@@ -38,13 +38,13 @@ class g extends l {
38
38
  _getCurrentText() {
39
39
  if (!this.currentNode || !("getAttribute" in this.currentNode))
40
40
  return u;
41
- const t = this.currentNode.getAttribute(i);
41
+ const t = this.currentNode.getAttribute(s);
42
42
  return t === null ? u : t;
43
43
  }
44
44
  _onTextChange(t) {
45
45
  if (!this.currentNode || !("closest" in this.currentNode))
46
46
  return;
47
- const e = this.currentNode.closest(f);
47
+ const e = this.currentNode.closest(T);
48
48
  if (!e || !("querySelectorAll" in e))
49
49
  return;
50
50
  const n = Array.from(
@@ -53,12 +53,12 @@ class g extends l {
53
53
  if (!n.length)
54
54
  return;
55
55
  const o = this.api.getDocumentModifier();
56
- n.forEach((s) => {
57
- o.modifyHtml(s).setAttribute(i, t);
58
- const r = s.querySelector(p);
56
+ n.forEach((i) => {
57
+ o.modifyHtml(i).setAttribute(s, t);
58
+ const r = i.querySelector(p);
59
59
  if (r) {
60
- const m = a(r, t);
61
- o.modifyHtml(r).setInnerHtml(m);
60
+ const a = m(r, t);
61
+ o.modifyHtml(r).setInnerHtml(a);
62
62
  }
63
63
  }), o.apply(new c("Update omnibus discount text before"));
64
64
  }
@@ -69,5 +69,5 @@ class g extends l {
69
69
  }
70
70
  }
71
71
  export {
72
- g as OmnibusDiscountTextBeforeControl
72
+ B as OmnibusDiscountTextBeforeControl
73
73
  };
@@ -1,11 +1,11 @@
1
- import { preserveTextStyles as u } from "../../../../../utils/preserveTextStyles.js";
2
- import { ModificationDescription as c } from "../../../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
3
- import { CommonControl as l } from "../../../common-control.js";
1
+ import { preserveTextStyles as l } from "../../../../../utils/preserveTextStyles.js";
2
+ import { ModificationDescription as m } from "../../../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
3
+ import { CommonControl as u } from "../../../common-control.js";
4
4
  import { RecommendationBlockId as d } from "../../constants/blockIds.js";
5
5
  import { RecommendationControlId as T } from "../../constants/controlIds.js";
6
- import { BLOCK_ROOT_SELECTOR as p } from "../../constants/selectors.js";
7
- const s = "data-text-after", a = "", f = ".omnibus-text-after";
8
- class g extends l {
6
+ import { BLOCK_ROOT_SELECTOR as f } from "../../constants/selectors.js";
7
+ const s = "data-text-after", a = "", p = ".omnibus-text-after";
8
+ class g extends u {
9
9
  getId() {
10
10
  return T.OMNIBUS_PRICE_TEXT_AFTER;
11
11
  }
@@ -24,7 +24,7 @@ class g extends l {
24
24
  `;
25
25
  }
26
26
  onRender() {
27
- this._setFormValues(), this._listenToFormUpdates();
27
+ this.forgetLastPanelNode(), this._listenToFormUpdates();
28
28
  }
29
29
  onTemplateNodeUpdated(t) {
30
30
  super.onTemplateNodeUpdated(t), this._setFormValues();
@@ -44,7 +44,7 @@ class g extends l {
44
44
  _onTextChange(t) {
45
45
  if (!this.currentNode || !("closest" in this.currentNode))
46
46
  return;
47
- const e = this.currentNode.closest(p);
47
+ const e = this.currentNode.closest(f);
48
48
  if (!e || !("querySelectorAll" in e))
49
49
  return;
50
50
  const n = Array.from(
@@ -55,12 +55,12 @@ class g extends l {
55
55
  const r = this.api.getDocumentModifier();
56
56
  n.forEach((i) => {
57
57
  r.modifyHtml(i).setAttribute(s, t);
58
- const o = i.querySelector(f);
58
+ const o = i.querySelector(p);
59
59
  if (o) {
60
- const m = u(o, t);
61
- r.modifyHtml(o).setInnerHtml(m);
60
+ const c = l(o, t);
61
+ r.modifyHtml(o).setInnerHtml(c);
62
62
  }
63
- }), r.apply(new c("Update omnibus price text after"));
63
+ }), r.apply(new m("Update omnibus price text after"));
64
64
  }
65
65
  _listenToFormUpdates() {
66
66
  this.api.onValueChanged("omnibusPriceTextAfter", (t) => {
@@ -1,10 +1,10 @@
1
- import { preserveTextStyles as u } from "../../../../../utils/preserveTextStyles.js";
2
- import { ModificationDescription as c } from "../../../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
1
+ import { preserveTextStyles as m } from "../../../../../utils/preserveTextStyles.js";
2
+ import { ModificationDescription as u } from "../../../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
3
3
  import { CommonControl as l } from "../../../common-control.js";
4
4
  import { RecommendationBlockId as d } from "../../constants/blockIds.js";
5
5
  import { RecommendationControlId as p } from "../../constants/controlIds.js";
6
- import { BLOCK_ROOT_SELECTOR as T } from "../../constants/selectors.js";
7
- const s = "data-text-before", a = "", f = ".omnibus-text-before";
6
+ import { BLOCK_ROOT_SELECTOR as f } from "../../constants/selectors.js";
7
+ const s = "data-text-before", a = "", T = ".omnibus-text-before";
8
8
  class g extends l {
9
9
  getId() {
10
10
  return p.OMNIBUS_PRICE_TEXT_BEFORE;
@@ -24,7 +24,7 @@ class g extends l {
24
24
  `;
25
25
  }
26
26
  onRender() {
27
- this._setFormValues(), this._listenToFormUpdates();
27
+ this.forgetLastPanelNode(), this._listenToFormUpdates();
28
28
  }
29
29
  onTemplateNodeUpdated(e) {
30
30
  super.onTemplateNodeUpdated(e), this._setFormValues();
@@ -44,7 +44,7 @@ class g extends l {
44
44
  _onTextChange(e) {
45
45
  if (!this.currentNode || !("closest" in this.currentNode))
46
46
  return;
47
- const t = this.currentNode.closest(T);
47
+ const t = this.currentNode.closest(f);
48
48
  if (!t || !("querySelectorAll" in t))
49
49
  return;
50
50
  const n = Array.from(
@@ -55,12 +55,12 @@ class g extends l {
55
55
  const o = this.api.getDocumentModifier();
56
56
  n.forEach((i) => {
57
57
  o.modifyHtml(i).setAttribute(s, e);
58
- const r = i.querySelector(f);
58
+ const r = i.querySelector(T);
59
59
  if (r) {
60
- const m = u(r, e);
61
- o.modifyHtml(r).setInnerHtml(m);
60
+ const c = m(r, e);
61
+ o.modifyHtml(r).setInnerHtml(c);
62
62
  }
63
- }), o.apply(new c("Update omnibus price text before"));
63
+ }), o.apply(new u("Update omnibus price text before"));
64
64
  }
65
65
  _listenToFormUpdates() {
66
66
  this.api.onValueChanged("omnibusPriceTextBefore", (e) => {
@@ -84,7 +84,7 @@ class j extends E {
84
84
  `;
85
85
  }
86
86
  onRender() {
87
- this._setFormValues(), this._updateSpacingVisibility(), this._listenToFormUpdates(), this._subscribeToOrientationChanges();
87
+ this.forgetLastPanelNode(), this._listenToFormUpdates(), this._subscribeToOrientationChanges();
88
88
  }
89
89
  onTemplateNodeUpdated(t) {
90
90
  super.onTemplateNodeUpdated(t), this._setFormValues(), this._updateSpacingVisibility();
@@ -1,7 +1,8 @@
1
- import { ATTR_PRODUCT_PRICE as f, ATTR_PRODUCT_OLD_PRICE as O } from "../../constants/selectors.js";
1
+ import { ATTR_PRODUCT_PRICE as D, ATTR_PRODUCT_OLD_PRICE as O } from "../../constants/selectors.js";
2
2
  import { DEFAULT_PRODUCTS_PER_ROW as w } from "../../constants/layout.js";
3
- import { createBlockTemplate as A, getDefaultProducts as g, DEFAULTS as U, buildSpacer as h, DEFAULT_CARD_COMPOSITION as Y, buildElementRenderer as B, resolveInlinePriceOrder as F, buildCellOptions as I, DEFAULT_CARD_VISIBILITY as W } from "../utils.js";
4
- import { DEFAULT_CELL_PADDING as k, renderInlineGridPriceCell as H, buildFillerCell as x, gridElementRenderer as y } from "./elementRenderer.js";
3
+ import { createBlockTemplate as A, getDefaultProducts as g, DEFAULTS as U, buildSpacer as h, DEFAULT_CARD_COMPOSITION as Y, buildElementRenderer as B, buildCellOptions as m, DEFAULT_CARD_VISIBILITY as F } from "../utils.js";
4
+ import { DEFAULT_CELL_PADDING as W, renderInlineGridPriceCell as k, buildFillerCell as H, gridElementRenderer as x } from "./elementRenderer.js";
5
+ import { resolveInlinePriceOrder as y } from "../../utils/inlinePriceOrder.js";
5
6
  const G = `
6
7
  <tr class="recommendation-product-row">
7
8
  <td>
@@ -28,29 +29,29 @@ const G = `
28
29
  {-{-CELLS-}-}
29
30
  </tr>
30
31
  `;
31
- function j(t, r, o, e = Y, c = {}, i = {}) {
32
- const { cellPadding: s = k, cardBackgroundColor: u, visibility: a, priceInline: n = !1 } = i, d = (100 / r).toFixed(2), p = r - t.length, T = p > 0 ? x(d, s).repeat(p) : "", m = B(o, e, c), R = F(e), L = n ? e.filter((l) => l !== R.skip) : e, C = I(f, i), P = I(O, i);
33
- return L.filter((l) => m[l]).map((l) => {
34
- const _ = (a == null ? void 0 : a[l]) ?? W[l] ?? !0, b = _ ? "" : 'style="display: none;"', S = I(l, i, e), D = t.map((E) => (n && l === R.anchor ? H(
32
+ function j(t, r, n, e = Y, c = {}, i = {}) {
33
+ const { cellPadding: s = W, cardBackgroundColor: u, visibility: a, priceInline: o = !1 } = i, d = (100 / r).toFixed(2), p = r - t.length, T = p > 0 ? H(d, s).repeat(p) : "", I = B(n, e, c), R = y(e), L = o ? e.filter((l) => l !== R.skip) : e, C = m(D, i), P = m(O, i);
34
+ return L.filter((l) => I[l]).map((l) => {
35
+ const _ = (a == null ? void 0 : a[l]) ?? F[l] ?? !0, b = _ ? "" : 'style="display: none;"', S = m(l, i, e), f = t.map((E) => (o && l === R.anchor ? k(
35
36
  E,
36
37
  R.originalFirst,
37
38
  C,
38
39
  P,
39
40
  u
40
- ) : m[l](E, S)).replace("<td", `<td width="${d}%"`)).join("");
41
- return V.replace("{-{-ATTR_TYPE-}-}", l).replace("{-{-VISIBILITY-}-}", _ ? "1" : "0").replace("{-{-DISPLAY_STYLE-}-}", b).replace("{-{-CELLS-}-}", D + T);
41
+ ) : I[l](E, S)).replace("<td", `<td width="${d}%"`)).join("");
42
+ return V.replace("{-{-ATTR_TYPE-}-}", l).replace("{-{-VISIBILITY-}-}", _ ? "1" : "0").replace("{-{-DISPLAY_STYLE-}-}", b).replace("{-{-CELLS-}-}", f + T);
42
43
  }).join("");
43
44
  }
44
- function v(t, r, o, e, c = {}, i = {}) {
45
+ function v(t, r, n, e, c = {}, i = {}) {
45
46
  const s = [];
46
- for (let n = 0; n < t.length; n += r)
47
- s.push(t.slice(n, n + r));
47
+ for (let o = 0; o < t.length; o += r)
48
+ s.push(t.slice(o, o + r));
48
49
  const u = h(i.rowSpacingPx);
49
- return s.map((n, d) => {
50
+ return s.map((o, d) => {
50
51
  const p = j(
51
- n,
52
- r,
53
52
  o,
53
+ r,
54
+ n,
54
55
  e,
55
56
  c,
56
57
  i
@@ -58,22 +59,22 @@ function v(t, r, o, e, c = {}, i = {}) {
58
59
  return d > 0 ? u + T : T;
59
60
  }).join("");
60
61
  }
61
- function M(t, r, o, e = {}, c = {}) {
62
+ function M(t, r, n, e = {}, c = {}) {
62
63
  return v(
63
64
  t,
64
65
  r,
65
- y,
66
- o,
66
+ x,
67
+ n,
67
68
  e,
68
69
  c
69
70
  );
70
71
  }
71
- function Q(t) {
72
- const r = t ? `ins-recommendation-v3-block-${t}` : void 0, o = A("grid", r), e = g(), c = M(e, w);
73
- return o.replace("{-{-TITLE-}-}", U.TITLE).replace("{-{-PRODUCT_ROWS-}-}", c).replace("{-{-MOBILE_PRODUCT_ROWS-}-}", "");
72
+ function X(t) {
73
+ const r = t ? `ins-recommendation-v3-block-${t}` : void 0, n = A("grid", r), e = g(), c = M(e, w);
74
+ return n.replace("{-{-TITLE-}-}", U.TITLE).replace("{-{-PRODUCT_ROWS-}-}", c).replace("{-{-MOBILE_PRODUCT_ROWS-}-}", "");
74
75
  }
75
76
  export {
76
- Q as getDefaultTemplate,
77
+ X as getDefaultTemplate,
77
78
  j as prepareGridAttributeRows,
78
79
  v as prepareGridProductRows,
79
80
  M as prepareProductRows
@@ -1,13 +1,14 @@
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";
1
+ import { ATTR_PRODUCT_IMAGE as p, ATTR_PRODUCT_BUTTON as C, ATTR_PRODUCT_OLD_PRICE as A, ATTR_PRODUCT_PRICE as m } from "../../constants/selectors.js";
2
+ import { buildSpacer as I, DEFAULT_CARD_COMPOSITION as g, buildElementRenderer as E, buildCellOptions as i, DEFAULT_CARD_VISIBILITY as w } from "../utils.js";
3
+ import { listElementRenderer as y, renderInlineListPriceRow as L } from "./elementRenderer.js";
4
+ import { resolveInlinePriceOrder as O } from "../../utils/inlinePriceOrder.js";
4
5
  const S = "0 5px";
5
6
  function U(l, r, n) {
6
- const t = n ? "" : ' style="display: none;"', o = l.replace(/<tr>/, "").replace(/<\/tr>/, "");
7
+ const e = n ? "" : ' style="display: none;"', o = l.replace(/<tr>/, "").replace(/<\/tr>/, "");
7
8
  return `<tr
8
9
  class="recommendation-attribute-row"
9
10
  data-attribute-type="${r}"
10
- data-visibility="${n ? "1" : "0"}"${t}>${o}</tr>`;
11
+ data-visibility="${n ? "1" : "0"}"${e}>${o}</tr>`;
11
12
  }
12
13
  const N = `
13
14
  <tr class="recommendation-product-row">
@@ -27,40 +28,40 @@ const N = `
27
28
  </td>
28
29
  </tr>
29
30
  `;
30
- function x(l, r = g, n = {}, t = {}) {
31
+ function x(l, r = g, n = {}, e = {}) {
31
32
  const {
32
33
  cellPadding: o = S,
33
34
  cardBackgroundColor: d,
34
35
  visibility: c,
35
36
  priceInline: a = !1
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 = `
37
+ } = e, u = d ? ` style="table-layout: fixed; background-color: ${d};"` : ' style="table-layout: fixed;"', s = E(y, r, n), P = s[p](l, i(p, e)), R = O(r), T = `
37
38
  <td class="product-info-cell" valign="middle" style="padding: 15px;">
38
39
  <table cellpadding="0" cellspacing="0" role="presentation" width="100%" style="table-layout: fixed;">
39
40
  <tbody>
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(
41
+ ${r.filter((t) => t !== p && t !== C).filter((t) => !(a && t === R.skip)).filter((t) => s[t]).map((t) => {
42
+ const b = (c == null ? void 0 : c[t]) ?? w[t] ?? !0, f = a && t === R.anchor ? L(
42
43
  l,
43
44
  R.originalFirst,
44
- i(I, t),
45
- i(A, t)
46
- ) : s[e](l, i(e, t, r));
47
- return U(f, e, b);
45
+ i(m, e),
46
+ i(A, e)
47
+ ) : s[t](l, i(t, e, r));
48
+ return U(f, t, b);
48
49
  }).join(`
49
50
  `)}
50
51
  </tbody>
51
52
  </table>
52
53
  </td>
53
- `, _ = s[C](l, i(C, t)), D = P + T + _;
54
+ `, _ = s[C](l, i(C, e)), D = P + T + _;
54
55
  return N.replace("{-{-CARD_PADDING-}-}", o).replace("{-{-WRAPPER_STYLE-}-}", u).replace("{-{-PRODUCT_CONTENT-}-}", D);
55
56
  }
56
- function W(l, r, n = {}, t = {}) {
57
- const o = m(t.rowSpacingPx);
57
+ function k(l, r, n = {}, e = {}) {
58
+ const o = I(e.rowSpacingPx);
58
59
  return l.map((d, c) => {
59
- const a = x(d, r, n, t);
60
+ const a = x(d, r, n, e);
60
61
  return c > 0 ? o + a : a;
61
62
  }).join("");
62
63
  }
63
64
  export {
64
65
  x as getListProductCard,
65
- W as prepareProductRows
66
+ k as prepareProductRows
66
67
  };
@@ -1,9 +1,9 @@
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";
1
+ import { ATTR_CUSTOM_PREFIX as f, ATTR_PRODUCT_IMAGE as m, ATTR_PRODUCT_NAME as T, ATTR_PRODUCT_OLD_PRICE as b, ATTR_PRODUCT_PRICE as _, ATTR_PRODUCT_OMNIBUS_PRICE as C, ATTR_PRODUCT_OMNIBUS_DISCOUNT as A, ATTR_PRODUCT_BUTTON as y, PRODUCT_ATTRIBUTE_PREFIX as I } from "../constants/selectors.js";
2
2
  import { useRecommendationExtensionStore as L } from "../store/recommendation.js";
3
- import { compositionKeyToProductAttr as y, isDefaultProductAttr as f, bareAttributeName as S, findFilterByBareName as $, productAttrToCompositionKey as P } from "../utils/compositionKeys.js";
3
+ import { compositionKeyToProductAttr as p, isDefaultProductAttr as d, bareAttributeName as S, findFilterByBareName as $, productAttrToCompositionKey as R } 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 x() {
6
+ function N() {
7
7
  const t = L(), { currencySettings: e } = t.recommendationConfigs;
8
8
  return {
9
9
  code: e.value,
@@ -14,91 +14,83 @@ function x() {
14
14
  thousandSeparator: e.thousandSeparator
15
15
  };
16
16
  }
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;
17
+ function g(t, e = "price") {
18
+ const o = N(), 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 m(t, "price") === m(t, "original_price");
25
+ return g(t, "price") === g(t, "original_price");
26
26
  }
27
- function N(t) {
27
+ function w(t) {
28
28
  return t.replace(/_/g, " ").replace(/\b\w/g, (e) => e.toUpperCase());
29
29
  }
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) {
30
+ function x(t) {
39
31
  const e = Array.isArray(t) ? t[t.length - 1] : t;
40
32
  if (typeof e == "string")
41
33
  return e;
42
34
  if (typeof e == "number")
43
35
  return String(e);
44
36
  }
45
- function v(t, e) {
37
+ function F(t, e) {
46
38
  var o;
47
39
  return ((o = $(t, e)) == null ? void 0 : o.type) === "defaultAttribute";
48
40
  }
49
- function w(t, e) {
50
- return v(t, e) ? t : `${I}${t}`;
41
+ function M(t, e) {
42
+ return F(t, e) ? t : `${I}${t}`;
51
43
  }
52
- function Q(t) {
53
- return P(t);
44
+ function J(t) {
45
+ return R(t);
54
46
  }
55
- const M = Symbol("customCellHtml");
56
- function Z(t, e, o = {}) {
57
- const n = t[M];
47
+ const v = Symbol("customCellHtml");
48
+ function Q(t, e, o = {}) {
49
+ const n = t[v];
58
50
  if (!n)
59
51
  return { ...t };
60
52
  const c = { ...t };
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);
53
+ return e.filter((s) => s.startsWith(f) && !c[s]).forEach((s) => {
54
+ const i = p(s), r = d(i) ? M(i, o) : i, l = S(r), h = w(l), D = d(r);
55
+ c[s] = (a, U) => {
56
+ var u;
57
+ const E = D ? a[l] : (u = a.product_attributes) == null ? void 0 : u[l], O = x(E) ?? h;
58
+ return n(r, O, U);
67
59
  };
68
60
  }), c;
69
61
  }
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]);
62
+ function Z(t, e, o = []) {
63
+ const n = t.startsWith(f) ? R(S(p(t))) : t, s = n !== t && !o.includes(n) ? n : t, i = (r) => (r == null ? void 0 : r[t]) ?? (r == null ? void 0 : r[s]);
72
64
  return {
73
65
  cellPadding: e.cellPadding,
74
66
  cardBackgroundColor: e.cardBackgroundColor,
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)
67
+ cellBackgroundColor: i(e.cellBackgroundColors),
68
+ cellAlignment: i(e.cellAlignments),
69
+ cellClasses: i(e.cellClasses),
70
+ omnibusText: i(e.omnibusTexts),
71
+ styleTemplate: i(e.styleTemplates)
80
72
  };
81
73
  }
82
- const et = {
74
+ const tt = {
83
75
  TITLE: "You May Also Like!"
84
- }, ot = [
76
+ }, et = [
77
+ m,
78
+ T,
85
79
  b,
86
80
  _,
87
- a,
88
- l,
89
81
  C,
90
82
  A,
91
- p
92
- ], nt = {
93
- [b]: !0,
83
+ y
84
+ ], ot = {
85
+ [m]: !0,
86
+ [T]: !0,
94
87
  [_]: !0,
95
- [l]: !0,
96
- [a]: !0,
88
+ [b]: !0,
97
89
  [C]: !1,
98
90
  [A]: !1,
99
- [p]: !0
91
+ [y]: !0
100
92
  }, W = 10;
101
- function rt(t = W) {
93
+ function nt(t = W) {
102
94
  return `
103
95
  <tr>
104
96
  <td class="spacer" style="height: ${t}px;"></td>
@@ -108,9 +100,9 @@ function rt(t = W) {
108
100
  function H(t, e) {
109
101
  return e ? e.pStyle ?? "" : t;
110
102
  }
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>`;
103
+ function rt(t, e, o) {
104
+ const n = H(e.pStyle, o), c = o ? o.openTags ?? "" : e.openTags, s = o ? o.closeTags ?? "" : e.closeTags;
105
+ return `<p contenteditable="false" style="${n}">${c}${t}${s}</p>`;
114
106
  }
115
107
  function st(t, e) {
116
108
  const o = [];
@@ -119,30 +111,30 @@ function st(t, e) {
119
111
  function V(t) {
120
112
  return t ? ` background-color: ${t};` : "";
121
113
  }
122
- function ct(t) {
114
+ function it(t) {
123
115
  const e = V(t);
124
116
  return e ? ` style="${e.trim()}"` : "";
125
117
  }
126
- function lt(t, e = "") {
118
+ function ct(t, e = "") {
127
119
  return {
128
120
  before: (t == null ? void 0 : t.before) ?? e,
129
121
  after: (t == null ? void 0 : t.after) ?? ""
130
122
  };
131
123
  }
132
- function at(t, e) {
124
+ function lt(t, e) {
133
125
  return `${(e == null ? void 0 : e.openTags) ?? ""}${t}${(e == null ? void 0 : e.closeTags) ?? ""}`;
134
126
  }
135
- function ut(t) {
127
+ function at(t) {
136
128
  return t != null && t.buttonFitToContainer ? "es-button-border es-fw" : "es-button-border";
137
129
  }
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;
130
+ const ut = "display: block; max-width: 100%; height: auto;", dt = "border-width: 1px; background: rgb(217, 234, 211); border-color: rgb(106, 168, 79);", gt = "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;", P = "https://email-static.useinsider.com/stripo/modules/email-recommendation-v3/assets/images/image-placeholder.png";
131
+ function ft(t) {
132
+ return !t || typeof t != "string" || t.trim() === "" ? P : t.startsWith("http://") ? t.replace("http://", "https://") : t;
141
133
  }
142
134
  function Y(t) {
143
135
  return {
144
136
  name: "Product Name",
145
- image_url: R,
137
+ image_url: P,
146
138
  price: { USD: 18 },
147
139
  original_price: { USD: 20 },
148
140
  discount: { USD: 2 },
@@ -154,20 +146,20 @@ function Y(t) {
154
146
  category: []
155
147
  };
156
148
  }
157
- function Tt(t = 6) {
149
+ function mt(t = 6) {
158
150
  return Array.from(
159
151
  { length: t },
160
152
  (e, o) => Y(String(o + 1))
161
153
  );
162
154
  }
163
- function bt(t = "grid", e) {
155
+ function Tt(t = "grid", e) {
164
156
  const o = t === "list" ? `
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" ? "" : `
157
+ data-layout="list"` : "", n = e ? ` ${e}` : "", s = `recommendation-block-v2 esd-block-recommendation-v3-block es-p20${t === "list" ? " es-m-p0 ins-recommendation-list-layout" : ""}${n}`, i = t === "list" ? "" : `
166
158
  {-{-MOBILE_PRODUCT_ROWS-}-}`, r = t === "list" ? ' style="display: none;"' : "";
167
159
  return `
168
160
  <td
169
161
  align="left"
170
- class="${i}"${o}>
162
+ class="${s}"${o}>
171
163
  <table width="100%" cellpadding="0" cellspacing="0" border="0">
172
164
  <tr>
173
165
  <td align="center">
@@ -203,7 +195,7 @@ function bt(t = "grid", e) {
203
195
  cellspacing="0"
204
196
  border="0"
205
197
  style="display: none;"
206
- >${s}
198
+ >${i}
207
199
  </table>
208
200
  </td>
209
201
  </tr>
@@ -216,36 +208,35 @@ function bt(t = "grid", e) {
216
208
  `;
217
209
  }
218
210
  export {
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,
211
+ v as CUSTOM_CELL_HTML,
212
+ tt as DEFAULTS,
213
+ gt as DEFAULT_BUTTON_ANCHOR_STYLE,
214
+ dt as DEFAULT_BUTTON_BORDER_STYLE,
215
+ et as DEFAULT_CARD_COMPOSITION,
216
+ ot as DEFAULT_CARD_VISIBILITY,
217
+ ut as DEFAULT_IMG_STYLE,
226
218
  W as DEFAULT_ROW_SPACING_PX,
227
- R as PLACEHOLDER_IMAGE,
219
+ P as PLACEHOLDER_IMAGE,
228
220
  V as bgColorFragment,
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,
221
+ Z as buildCellOptions,
222
+ Q as buildElementRenderer,
223
+ nt as buildSpacer,
224
+ it as cellBgStyleAttr,
225
+ Tt as createBlockTemplate,
226
+ g as formatProductPrice,
227
+ N as getCurrentCurrencyConfig,
228
+ mt as getDefaultProducts,
229
+ F as isDefaultAttribute,
238
230
  q as isSamePrice,
239
- at as renderButtonLabel,
240
- it as renderStyledParagraph,
241
- ut as resolveButtonBorderClass,
242
- J as resolveInlinePriceOrder,
243
- lt as resolveOmnibusText,
231
+ lt as renderButtonLabel,
232
+ rt as renderStyledParagraph,
233
+ at as resolveButtonBorderClass,
234
+ ct as resolveOmnibusText,
244
235
  H as resolvePStyle,
245
- w as resolveProductAttrValue,
236
+ M as resolveProductAttrValue,
246
237
  st as resolveSegmentBgStyle,
247
- mt as sanitizeImageUrl,
248
- Q as toCustomCompositionKey,
249
- N as toDisplayName,
250
- F as toDisplayableAttributeValue
238
+ ft as sanitizeImageUrl,
239
+ J as toCustomCompositionKey,
240
+ w as toDisplayName,
241
+ x as toDisplayableAttributeValue
251
242
  };
@@ -0,0 +1,12 @@
1
+ import { ATTR_PRODUCT_PRICE as n, ATTR_PRODUCT_OLD_PRICE as e } from "../constants/selectors.js";
2
+ function d(i) {
3
+ const o = i.indexOf(n), t = i.indexOf(e), r = t !== -1 && (o === -1 || t < o);
4
+ return {
5
+ originalFirst: r,
6
+ anchor: r ? e : n,
7
+ skip: r ? n : e
8
+ };
9
+ }
10
+ export {
11
+ d as resolveInlinePriceOrder
12
+ };