@useinsider/guido 2.1.0-beta.9ba2e9d → 2.1.0-beta.a67f307

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 (51) hide show
  1. package/README.md +36 -0
  2. package/dist/@types/config/schemas.js +70 -65
  3. package/dist/components/Guido.vue.js +1 -1
  4. package/dist/components/Guido.vue2.js +69 -58
  5. package/dist/components/organisms/header/HeaderWrapper.vue.js +9 -9
  6. package/dist/composables/useBlocksConfig.js +26 -16
  7. package/dist/composables/useHtmlValidator.js +107 -119
  8. package/dist/config/compiler/utils/recommendationCompilerUtils.js +70 -96
  9. package/dist/config/migrator/itemsBlockMigrator.js +101 -97
  10. package/dist/enums/defaults.js +8 -4
  11. package/dist/enums/extensions/recommendationBlock.js +1 -1
  12. package/dist/extensions/Blocks/Recommendation/block.js +26 -23
  13. package/dist/extensions/Blocks/Recommendation/constants/defaultConfig.js +27 -26
  14. package/dist/extensions/Blocks/Recommendation/constants/layout.js +6 -4
  15. package/dist/extensions/Blocks/Recommendation/constants/selectors.js +12 -10
  16. package/dist/extensions/Blocks/Recommendation/controls/main/index.js +103 -70
  17. package/dist/extensions/Blocks/Recommendation/controls/main/productLayout.js +87 -37
  18. package/dist/extensions/Blocks/Recommendation/controls/main/utils.js +138 -117
  19. package/dist/extensions/Blocks/Recommendation/controls/mobileLayout/cssRules.js +21 -0
  20. package/dist/extensions/Blocks/Recommendation/store/recommendation.js +117 -107
  21. package/dist/extensions/Blocks/Recommendation/templates/grid/elementRenderer.js +25 -30
  22. package/dist/extensions/Blocks/Recommendation/templates/grid/template.js +27 -30
  23. package/dist/extensions/Blocks/Recommendation/templates/list/elementRenderer.js +20 -25
  24. package/dist/extensions/Blocks/Recommendation/templates/utils.js +43 -31
  25. package/dist/extensions/ModulesTabIcons/extension.js +17 -0
  26. package/dist/guido.css +1 -1
  27. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js +257 -187
  28. package/dist/services/recommendationApi.js +11 -9
  29. package/dist/src/@types/config/schemas.d.ts +8 -0
  30. package/dist/src/composables/useConfig.d.ts +4 -0
  31. package/dist/src/config/compiler/utils/recommendationCompilerUtils.d.ts +1 -1
  32. package/dist/src/enums/defaults.d.ts +4 -0
  33. package/dist/src/extensions/Blocks/Recommendation/constants/index.d.ts +2 -2
  34. package/dist/src/extensions/Blocks/Recommendation/constants/layout.d.ts +6 -0
  35. package/dist/src/extensions/Blocks/Recommendation/constants/selectors.d.ts +4 -0
  36. package/dist/src/extensions/Blocks/Recommendation/controls/main/index.d.ts +12 -1
  37. package/dist/src/extensions/Blocks/Recommendation/controls/main/productLayout.d.ts +22 -4
  38. package/dist/src/extensions/Blocks/Recommendation/controls/main/utils.d.ts +9 -2
  39. package/dist/src/extensions/Blocks/Recommendation/controls/mobileLayout/cssRules.d.ts +29 -0
  40. package/dist/src/extensions/Blocks/Recommendation/store/recommendation.d.ts +7 -0
  41. package/dist/src/extensions/Blocks/Recommendation/templates/grid/template.d.ts +1 -1
  42. package/dist/src/extensions/Blocks/Recommendation/templates/index.d.ts +2 -0
  43. package/dist/src/extensions/Blocks/Recommendation/templates/utils.d.ts +12 -3
  44. package/dist/src/extensions/Blocks/Recommendation/types/nodeConfig.d.ts +6 -0
  45. package/dist/src/extensions/ModulesTabIcons/extension.d.ts +2 -0
  46. package/dist/src/stores/config.d.ts +36 -0
  47. package/dist/static/styles/components/notification.css.js +1 -0
  48. package/dist/static/styles/components/version-history.css.js +10 -2
  49. package/dist/static/styles/components/wide-panel.css.js +18 -2
  50. package/dist/static/styles/customEditorStyle.css.js +10 -9
  51. package/package.json +2 -2
@@ -1,171 +1,159 @@
1
- import { useConfig as D } from "./useConfig.js";
2
- import { TemplateTypes as L } from "../enums/defaults.js";
3
- import { DISPLAY_CONDITIONS_REGEX as V, DISPLAY_CONDITIONS_EXCEPTIONS_REGEX as H, CampaignCouldNotBeSavedKey as M, CanNotMakeAnyChangesForRunningKey as $ } from "../enums/html-validator.js";
4
- import { ToasterTypeOptions as l } from "../enums/toaster.js";
5
- import { itemsBlockDynamicVariables as P } from "../extensions/Blocks/Items/enums/productEnums.js";
6
- import { useRecommendationExtensionStore as j } from "../extensions/Blocks/Recommendation/store/recommendation.js";
7
- import { useRecommendationStore as G } from "../stores/recommendation.js";
8
- import { base64EncodeWithSpecialChars as q } from "../utils/base64.js";
9
- import { useHttp as z } from "./useHttp.js";
10
- import { useToaster as U } from "./useToaster.js";
11
- import { useTranslations as X } from "./useTranslations.js";
12
- const K = [
13
- "img",
14
- "url",
15
- "name",
16
- "price",
17
- "currency",
18
- "original_price",
19
- "omnibus_price",
20
- "omnibus_discount"
21
- ];
22
- function Y() {
23
- const a = j();
24
- return Object.keys(a.blockStates).flatMap((d) => {
25
- const f = a.blockStates[Number(d)], i = parseInt(f.recommendationConfigs.size) || 10;
26
- return Array.from({ length: i }, (m, u) => u).flatMap((m) => K.map((u) => `${d}_${m}_${u}`));
27
- });
1
+ import { useConfig as L } from "./useConfig.js";
2
+ import { TemplateTypes as V } from "../enums/defaults.js";
3
+ import { DISPLAY_CONDITIONS_REGEX as _, DISPLAY_CONDITIONS_EXCEPTIONS_REGEX as H, CampaignCouldNotBeSavedKey as P, CanNotMakeAnyChangesForRunningKey as G } from "../enums/html-validator.js";
4
+ import { ToasterTypeOptions as c } from "../enums/toaster.js";
5
+ import { itemsBlockDynamicVariables as M } from "../extensions/Blocks/Items/enums/productEnums.js";
6
+ import { useRecommendationStore as $ } from "../stores/recommendation.js";
7
+ import { base64EncodeWithSpecialChars as X } from "../utils/base64.js";
8
+ import { useHttp as j } from "./useHttp.js";
9
+ import { useToaster as q } from "./useToaster.js";
10
+ import { useTranslations as z } from "./useTranslations.js";
11
+ const K = /recommendation-id="(\d+)"/g;
12
+ function U(i) {
13
+ return [...i.matchAll(K)].map((u) => u[1]);
28
14
  }
29
- const le = () => {
30
- var p, y;
31
- const { showToaster: a } = U(), { post: d } = z(), { config: f } = D(), i = X(), g = G(), m = ((y = (p = f.value) == null ? void 0 : p.partner) == null ? void 0 : y.messageType) === L.transactional, u = async (e) => {
32
- const t = await d(
15
+ function Y(i, u) {
16
+ return u.some((d) => i.startsWith(`${d}_`));
17
+ }
18
+ const ce = () => {
19
+ var y, h;
20
+ const { showToaster: i } = q(), { post: u } = j(), { config: d } = L(), r = z(), g = $(), p = ((h = (y = d.value) == null ? void 0 : y.partner) == null ? void 0 : h.messageType) === V.transactional, w = async (e) => {
21
+ const t = await u(
33
22
  "/newsletter/template-library/check-template-html-body",
34
- { html: q(e) }
35
- ), { status: n, message: c } = t.data;
36
- return n || a({
37
- type: l.Alert,
38
- message: n === void 0 ? c : i("newsletter.invalid-url-link-for-toaster")
39
- }), i(M), c === i($) && a({
40
- type: l.Alert,
41
- message: i("newsletter.already-in-progress")
23
+ { html: X(e) }
24
+ ), { status: n, message: l } = t.data;
25
+ return n || i({
26
+ type: c.Alert,
27
+ message: n === void 0 ? l : r("newsletter.invalid-url-link-for-toaster")
28
+ }), r(P), l === r(G) && i({
29
+ type: c.Alert,
30
+ message: r("newsletter.already-in-progress")
42
31
  }), n;
43
- }, b = (e) => !["if", "endif", "else", "elif", "now"].includes(e.toLowerCase()), S = (e) => ["if", "endif"].includes(e.toLowerCase()), w = (e, s) => {
32
+ }, b = (e) => !["if", "endif", "else", "elif", "now"].includes(e.toLowerCase()), S = (e) => ["if", "endif"].includes(e.toLowerCase()), E = (e, s) => {
44
33
  const t = e.match(/({%(.*?)%})/g);
45
34
  let n = !0;
46
- return t !== null && !m && t.forEach((c) => {
47
- const o = c.slice(2, -2).trim().match(/(".*?"|[^"\s]+)(?=\s*|\s*$)/g);
35
+ return t !== null && !p && t.forEach((l) => {
36
+ const o = l.slice(2, -2).trim().match(/(".*?"|[^"\s]+)(?=\s*|\s*$)/g);
48
37
  if (o && o.length > 0) {
49
- const [r] = o;
50
- b(r) && !s.includes(r) && (a({
51
- type: l.Warning,
52
- message: i("custom-fields.invalid-custom-fields")
38
+ const [a] = o;
39
+ b(a) && !s.includes(a) && (i({
40
+ type: c.Warning,
41
+ message: r("custom-fields.invalid-custom-fields")
53
42
  }), n = !1);
54
43
  }
55
44
  }), n;
56
- }, E = async (e, s, t) => {
57
- const n = t ? await u(e) : !0;
58
- return w(e, s) && n;
59
- }, A = (e) => e.length > 0 ? !0 : (a({
60
- type: l.Warning,
61
- message: i("newsletter.html-content-is-empty")
45
+ }, A = async (e, s, t) => {
46
+ const n = t ? await w(e) : !0;
47
+ return E(e, s) && n;
48
+ }, I = (e) => e.length > 0 ? !0 : (i({
49
+ type: c.Warning,
50
+ message: r("newsletter.html-content-is-empty")
62
51
  }), !1), k = (e) => {
63
52
  const s = (e.match(/{/gm) || []).length, t = (e.match(/}/gm) || []).length;
64
- return s > t && a({
65
- type: l.Warning,
66
- message: i("custom-fields.missing-closing-braces")
67
- }), s < t && a({
68
- type: l.Warning,
69
- message: i("custom-fields.missing-opening-braces")
53
+ return s > t && i({
54
+ type: c.Warning,
55
+ message: r("custom-fields.missing-closing-braces")
56
+ }), s < t && i({
57
+ type: c.Warning,
58
+ message: r("custom-fields.missing-opening-braces")
70
59
  }), s === t;
71
60
  }, x = (e) => {
72
61
  const s = e.match(/{{\s*(\w+\s+((\w+\|\w+)|(\w+)))\s*}}/gm) === null;
73
- return s || a({
74
- type: l.Warning,
75
- message: i("custom-fields.invalid-custom-fields")
62
+ return s || i({
63
+ type: c.Warning,
64
+ message: r("custom-fields.invalid-custom-fields")
76
65
  }), s;
77
66
  }, T = (e, s) => {
78
67
  const t = e.match(/{{([a-zA-Z0-9_\s]*)}}/gm);
79
- if (t && !m) {
80
- const n = new Set(s.map((o) => o.toLowerCase())), c = [];
81
- if (t.forEach((o) => {
82
- const r = o.slice(2, -2).trim().toLowerCase();
83
- (!n.has(r) || r === "") && c.push(r);
84
- }), c.length > 0) {
85
- const o = `
68
+ if (t && !p) {
69
+ const n = new Set(s.map((a) => a.toLowerCase())), l = U(e), o = [];
70
+ if (t.forEach((a) => {
71
+ const m = a.slice(2, -2).trim().toLowerCase();
72
+ (!n.has(m) || m === "") && !Y(m, l) && o.push(m);
73
+ }), o.length > 0) {
74
+ const a = `
86
75
  <ul>
87
- ${c.map((r) => `<li>${r}</li>`).join("")}
76
+ ${o.map((m) => `<li>${m}</li>`).join("")}
88
77
  </ul>
89
78
  `;
90
- return a({
91
- type: l.Alert,
92
- message: i("custom-fields.invalid-custom-fields") + o
79
+ return i({
80
+ type: c.Alert,
81
+ message: r("custom-fields.invalid-custom-fields") + a
93
82
  }), !1;
94
83
  }
95
84
  }
96
85
  return !0;
97
- }, I = (e) => {
86
+ }, F = (e) => {
98
87
  const s = e.match(/{%(.*?)%}/g), t = [];
99
88
  let n = !0;
100
- if (s && s.forEach((c) => {
101
- const o = c.match(V), r = c.match(H), B = (o == null ? void 0 : o.join("")) || "";
102
- (!o || c !== B) && !r && (a({
103
- type: l.Alert,
104
- message: i("newsletter.display-conditions-invalid-syntax")
105
- }), n = !1), o && o.forEach((h) => {
106
- h.trim() === "=" && (a({
107
- type: l.Alert,
108
- message: i("custom-conditions.wrong-equality-operators")
89
+ if (s && s.forEach((l) => {
90
+ const o = l.match(_), a = l.match(H), m = (o == null ? void 0 : o.join("")) || "";
91
+ (!o || l !== m) && !a && (i({
92
+ type: c.Alert,
93
+ message: r("newsletter.display-conditions-invalid-syntax")
94
+ }), n = !1), o && o.forEach((f) => {
95
+ f.trim() === "=" && (i({
96
+ type: c.Alert,
97
+ message: r("custom-conditions.wrong-equality-operators")
109
98
  }), n = !1);
110
- const C = h.match(/^[a-zA-Z]*$/g);
111
- C && C.forEach((v) => {
112
- S(v) && t.push(v);
99
+ const v = f.match(/^[a-zA-Z]*$/g);
100
+ v && v.forEach((C) => {
101
+ S(C) && t.push(C);
113
102
  });
114
103
  });
115
104
  }), t.length) {
116
- const c = t.filter((r) => r === "if"), o = t.filter((r) => r === "endif");
117
- c.length !== o.length && (a({
118
- type: l.Alert,
119
- message: i("custom-conditions.missing-if-endif-tag")
105
+ const l = t.filter((a) => a === "if"), o = t.filter((a) => a === "endif");
106
+ l.length !== o.length && (i({
107
+ type: c.Alert,
108
+ message: r("custom-conditions.missing-if-endif-tag")
120
109
  }), n = !1);
121
110
  }
122
111
  return n;
123
- }, F = (e) => {
112
+ }, W = (e) => {
124
113
  const s = (e.match(/{% /gm) || []).length, t = (e.match(/ %}/gm) || []).length, n = s === t;
125
- return n || a({
126
- type: l.Warning,
127
- message: i("custom-conditions.no-space-after-braces")
114
+ return n || i({
115
+ type: c.Warning,
116
+ message: r("custom-conditions.no-space-after-braces")
128
117
  }), n;
129
- }, _ = (e) => (e.match(/({%(.*?)%})/g) || []).filter((t) => t.includes("if")).map((t) => (t.match(/{{.*}}/gm) || []).length).reduce((t, n) => t + n, 0) > 0 ? (a({
130
- type: l.Warning,
131
- message: i("custom-conditions.no-braces-inside-if-tag")
132
- }), !1) : !0, N = () => g.recommendationConfigs && Object.values(g.recommendationConfigs).find((s) => s.filters.find((t) => t.value === "")) !== void 0 ? (a({
133
- type: l.Alert,
134
- message: i("newsletter.fill-all-necessary-fields")
135
- }), !1) : !0, O = (e) => {
118
+ }, N = (e) => (e.match(/({%(.*?)%})/g) || []).filter((t) => t.includes("if")).map((t) => (t.match(/{{.*}}/gm) || []).length).reduce((t, n) => t + n, 0) > 0 ? (i({
119
+ type: c.Warning,
120
+ message: r("custom-conditions.no-braces-inside-if-tag")
121
+ }), !1) : !0, O = () => g.recommendationConfigs && Object.values(g.recommendationConfigs).find((s) => s.filters.find((t) => t.value === "")) !== void 0 ? (i({
122
+ type: c.Alert,
123
+ message: r("newsletter.fill-all-necessary-fields")
124
+ }), !1) : !0, B = (e) => {
136
125
  const s = /src="[^"]*\.(svg|pst)"/gm;
137
- return e.match(s) === null ? !0 : (a({
138
- type: l.Alert,
139
- message: i("newsletter.invalid-image-type")
126
+ return e.match(s) === null ? !0 : (i({
127
+ type: c.Alert,
128
+ message: r("newsletter.invalid-image-type")
140
129
  }), !1);
141
- }, W = (e) => {
130
+ }, R = (e) => {
142
131
  const n = new DOMParser().parseFromString(e, "text/html").querySelectorAll(".checkbox-block-v2");
143
132
  return Array.from(n).find((o) => {
144
- var r;
145
- return !((r = o.id) != null && r.trim());
146
- }) ? (a({
147
- type: l.Alert,
148
- message: i("unsubscribe-templates.select-checkbox-groups")
133
+ var a;
134
+ return !((a = o.id) != null && a.trim());
135
+ }) ? (i({
136
+ type: c.Alert,
137
+ message: r("unsubscribe-templates.select-checkbox-groups")
149
138
  }), !1) : !0;
150
- }, R = (e) => {
139
+ }, D = (e) => {
151
140
  const n = new DOMParser().parseFromString(e, "text/html").querySelectorAll(".radio-button-v2");
152
141
  return Array.from(n).find((o) => {
153
- var r;
154
- return !((r = o.id) != null && r.trim());
155
- }) ? (a({
156
- type: l.Alert,
157
- message: i("unsubscribe-templates.select-radio-button-groups")
142
+ var a;
143
+ return !((a = o.id) != null && a.trim());
144
+ }) ? (i({
145
+ type: c.Alert,
146
+ message: r("unsubscribe-templates.select-radio-button-groups")
158
147
  }), !1) : !0;
159
148
  };
160
149
  return { validateHtml: async (e, s, t = !1) => {
161
150
  const n = [
162
151
  ...s.map((o) => o.value),
163
- ...P,
164
- ...Y()
152
+ ...M
165
153
  ];
166
- return await E(e, n, t) && A(e) && k(e) && x(e) && T(e, n) && I(e) && F(e) && _(e) && N() && O(e) && W(e) && R(e);
154
+ return await A(e, n, t) && I(e) && k(e) && x(e) && T(e, n) && F(e) && W(e) && N(e) && O() && B(e) && R(e) && D(e);
167
155
  } };
168
156
  };
169
157
  export {
170
- le as useHtmlValidator
158
+ ce as useHtmlValidator
171
159
  };
@@ -1,147 +1,121 @@
1
1
  import { useRecommendation as _ } from "../../../composables/useRecommendation.js";
2
- function m(o, n, c, e) {
3
- const s = `{{${o}_${n}_${c}}}`, t = `{{${o}_${n}_currency}}`;
4
- return e === "before" ? `${t} ${s}` : `${s} ${t}`;
2
+ function b(e, u, r, o) {
3
+ const n = `{{${e}_${u}_${r}}}`, t = `{{${e}_${u}_currency}}`;
4
+ return o === "before" ? `${t} ${n}` : `${n} ${t}`;
5
5
  }
6
- function b(o, n, c, e, s) {
7
- switch (n) {
6
+ function p(e, u, r, o, n) {
7
+ switch (u) {
8
8
  case "productImage": {
9
- const t = o.querySelector("img");
10
- t && t.setAttribute("src", `{{${c}_${e}_img}}`);
11
- const r = o.querySelector("a");
12
- r && r.setAttribute("href", `{{${c}_${e}_url}}`);
9
+ const t = e.querySelector("img");
10
+ t && (t.setAttribute("src", `{{${r}_${o}_image_url}}`), t.setAttribute("alt", `{{${r}_${o}_name}}`));
11
+ const c = e.querySelector("a");
12
+ c && c.setAttribute("href", `{{${r}_${o}_url}}`);
13
13
  break;
14
14
  }
15
15
  case "productName": {
16
- const t = o.querySelector("p");
16
+ const t = e.querySelector("p");
17
17
  if (t) {
18
- const r = t.querySelector("strong") || t;
19
- r.textContent = `{{${c}_${e}_name}}`;
18
+ const c = t.querySelector("strong") || t;
19
+ c.textContent = `{{${r}_${o}_name}}`;
20
20
  }
21
21
  break;
22
22
  }
23
23
  case "productPrice": {
24
- const t = o.querySelector("p");
24
+ const t = e.querySelector("p");
25
25
  if (t) {
26
- const r = t.querySelector("strong") || t;
27
- r.textContent = m(c, e, "price", s);
26
+ const c = t.querySelector("strong") || t;
27
+ c.textContent = b(r, o, "price", n);
28
28
  }
29
29
  break;
30
30
  }
31
31
  case "productOldPrice": {
32
- const t = o.querySelector("p");
32
+ const t = e.querySelector("p");
33
33
  if (t) {
34
- const r = t.querySelector("strong") || t;
35
- r.textContent = m(
36
- c,
37
- e,
34
+ const c = t.querySelector("strong") || t;
35
+ c.textContent = b(
36
+ r,
37
+ o,
38
38
  "original_price",
39
- s
39
+ n
40
40
  ), t.setAttribute("product-attr", "discount");
41
41
  }
42
42
  break;
43
43
  }
44
44
  case "productButton": {
45
- const t = o.querySelector("a");
46
- t && t.setAttribute("href", `{{${c}_${e}_url}}`);
45
+ const t = e.querySelector("a");
46
+ t && t.setAttribute("href", `{{${r}_${o}_url}}`);
47
47
  break;
48
48
  }
49
49
  case "productOmnibusPrice": {
50
- const t = o.querySelector(".omnibus-price-value");
50
+ const t = e.querySelector(".omnibus-price-value");
51
51
  if (t) {
52
- t.textContent = `{{${c}_${e}_omnibus_price}}`;
53
- const r = t.closest("p");
54
- r && (r.setAttribute("product-attr", "omnibus_price"), r.setAttribute("composition", "true"));
52
+ t.textContent = `{{${r}_${o}_omnibus_price}}`;
53
+ const c = t.closest("p");
54
+ c && (c.setAttribute("product-attr", "omnibus_price"), c.setAttribute("composition", "true"));
55
55
  }
56
56
  break;
57
57
  }
58
58
  case "productOmnibusDiscount": {
59
- const t = o.querySelector(".omnibus-discount-value");
59
+ const t = e.querySelector(".omnibus-discount-value");
60
60
  if (t) {
61
- t.textContent = `{{${c}_${e}_omnibus_discount}}`;
62
- const r = t.closest("p");
63
- r && (r.setAttribute("product-attr", "omnibus_discount"), r.setAttribute("composition", "true"));
61
+ t.textContent = `{{${r}_${o}_omnibus_discount}}`;
62
+ const c = t.closest("p");
63
+ c && (c.setAttribute("product-attr", "omnibus_discount"), c.setAttribute("composition", "true"));
64
64
  }
65
65
  break;
66
66
  }
67
67
  }
68
68
  }
69
- function $(o, n, c) {
70
- o.querySelectorAll(".recommendation-product-row").forEach((s, t) => {
71
- s.querySelectorAll("[data-attribute-type]").forEach((u) => {
72
- const l = u.getAttribute("data-attribute-type") || "", a = u.querySelectorAll(".attribute-cell");
73
- a.length > 0 ? a.forEach((i) => {
74
- b(i, l, n, t, c);
75
- }) : b(u, l, n, t, c);
69
+ function $(e, u, r) {
70
+ e.querySelectorAll(".recommendation-product-row").forEach((n, t) => {
71
+ n.querySelectorAll("[data-attribute-type]").forEach((s) => {
72
+ const i = s.getAttribute("data-attribute-type") || "", a = s.querySelectorAll(".attribute-cell");
73
+ a.length > 0 ? a.forEach((l) => {
74
+ p(l, i, u, t, r);
75
+ }) : p(s, i, u, t, r);
76
76
  });
77
77
  });
78
78
  }
79
- function h(o, n, c) {
80
- const e = o.querySelectorAll(".recommendation-product-row");
81
- if (!e.length)
79
+ function S(e, u, r) {
80
+ const o = e.querySelectorAll(".recommendation-product-row");
81
+ if (!o.length)
82
82
  return;
83
- const [s] = e, t = s.querySelector("[data-attribute-type]"), r = t ? t.querySelectorAll(".attribute-cell").length : 1;
84
- e.forEach((u, l) => {
85
- u.querySelectorAll("[data-attribute-type]").forEach((i) => {
86
- const f = i.getAttribute("data-attribute-type") || "";
87
- i.querySelectorAll(".attribute-cell").forEach((y, d) => {
88
- const A = l * r + d;
89
- b(y, f, n, A, c);
83
+ const [n] = o, t = n.querySelector("[data-attribute-type]"), c = t ? t.querySelectorAll(".attribute-cell").length : 1;
84
+ o.forEach((s, i) => {
85
+ s.querySelectorAll("[data-attribute-type]").forEach((l) => {
86
+ const f = l.getAttribute("data-attribute-type") || "";
87
+ l.querySelectorAll(".attribute-cell").forEach((y, m) => {
88
+ const A = i * c + m;
89
+ p(y, f, u, A, r);
90
90
  });
91
91
  });
92
92
  });
93
93
  }
94
- function S(o, n) {
95
- const c = o.getAttribute("data-layout") || "grid", e = o.getAttribute("currency-alignment") || "after";
96
- c === "list" ? $(o, n, e) : h(o, n, e);
94
+ function q(e, u, r) {
95
+ e.querySelectorAll(".ins-recommendation-product-container").forEach((n) => {
96
+ S(n, u, r);
97
+ });
97
98
  }
98
- function q(o, n, c) {
99
- let e = o;
100
- if ((n.getAttribute("data-layout") || "grid") === "list") {
101
- const t = n.querySelectorAll(".recommendation-product-row");
102
- Array.from(t).reverse().forEach((u, l) => {
103
- const a = t.length - 1 - l, i = u.outerHTML, p = `${`{% if ins_reco_total_product_kind_${c} > ${a} %}`}${i}{% endif %}`;
104
- e = e.replace(i, p);
105
- });
106
- } else {
107
- const t = n.querySelectorAll(".recommendation-product-row");
108
- if (!t.length)
109
- return e;
110
- const [r] = t, u = r.querySelector("[data-attribute-type]"), l = u ? u.querySelectorAll(".attribute-cell").length : 1, a = [];
111
- t.forEach((i, f) => {
112
- const p = i.querySelector(".product-card-wrapper") || i;
113
- a.push({
114
- element: p,
115
- productThreshold: f * l
116
- });
117
- }), a.reverse().forEach(({ element: i, productThreshold: f }) => {
118
- const p = i.outerHTML, d = `${`{% if ins_reco_total_product_kind_${c} > ${f} %}`}${p}{% endif %}`;
119
- e = e.replace(p, d);
120
- });
121
- }
122
- return e;
99
+ function d(e, u) {
100
+ const r = e.getAttribute("data-layout") || "grid", o = e.getAttribute("currency-alignment") || "after";
101
+ r === "list" ? $(e, u, o) : q(e, u, o);
123
102
  }
124
- function g(o, n) {
125
- const c = o.match(/<!DOCTYPE[^>]*>/i);
126
- return (c ? `${c[0]}
127
- ` : "") + n.documentElement.outerHTML;
103
+ function h(e, u) {
104
+ const r = e.match(/<!DOCTYPE[^>]*>/i);
105
+ return (r ? `${r[0]}
106
+ ` : "") + u.documentElement.outerHTML;
128
107
  }
129
- function E(o) {
130
- const n = o.replaceAll("{%", "<!--{%").replaceAll("%}", "%}-->"), c = new DOMParser().parseFromString(n, "text/html"), e = c.querySelectorAll(".ins-recommendation-v3-block-v2");
131
- if (!e.length)
132
- return o;
133
- const { buildCampaignUrl: s } = _();
134
- e.forEach((r) => {
135
- const u = r.getAttribute("recommendation-id");
136
- u && (s(u), S(r, u));
137
- });
138
- let t = g(n, c);
139
- return e.forEach((r) => {
140
- const u = r.getAttribute("recommendation-id");
141
- u && (t = q(t, r, u));
142
- }), t.replaceAll("<!--{%", "{%").replaceAll("%}-->", "%}").replaceAll("&lt;!--{%", "{%").replaceAll("%}--&gt;", "%}");
108
+ function w(e) {
109
+ const u = e.replaceAll("{%", "<!--{%").replaceAll("%}", "%}-->"), r = new DOMParser().parseFromString(u, "text/html"), o = r.querySelectorAll(".ins-recommendation-v3-block-v2");
110
+ if (!o.length)
111
+ return e;
112
+ const { buildCampaignUrl: n } = _();
113
+ return o.forEach((c) => {
114
+ const s = c.getAttribute("recommendation-id");
115
+ s && (n(s), d(c, s));
116
+ }), h(u, r).replaceAll("<!--{%", "{%").replaceAll("%}-->", "%}").replaceAll("&lt;!--{%", "{%").replaceAll("%}--&gt;", "%}");
143
117
  }
144
118
  export {
145
- m as formatPriceVariable,
146
- E as prepareRecommendationBlocks
119
+ b as formatPriceVariable,
120
+ w as prepareRecommendationBlocks
147
121
  };