@useinsider/guido 3.2.0-beta.8b4780a → 3.2.0-beta.9d2b444

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.
@@ -89,11 +89,11 @@ const v = () => {
89
89
  updateHtmlAndCss: (t, e) => {
90
90
  window.StripoEditorApi.actionsApi.updateHtmlAndCss(t, e);
91
91
  },
92
- editorSave: () => new Promise((t) => {
93
- window.StripoEditorApi.actionsApi.save((e) => {
94
- e && n(e, "Failed to save template"), t();
92
+ editorSave: () => {
93
+ window.StripoEditorApi.actionsApi.save((t) => {
94
+ t && n(t, "Failed to save template");
95
95
  });
96
- })
96
+ }
97
97
  };
98
98
  };
99
99
  export {
@@ -19,7 +19,7 @@ const F = () => {
19
19
  return;
20
20
  if ((i = a.value) != null && i.externalValidation && !await a.value.externalValidation(t))
21
21
  return;
22
- await c();
22
+ c();
23
23
  const { unsubscribePayload: f, stripoModules: v } = d(t.rawHtml);
24
24
  return await u(f), t.modules = v, m || s(t), t;
25
25
  } };
@@ -1,16 +1,16 @@
1
- import { useRecommendation as C } from "../../composables/useRecommendation.js";
2
- import { DUMMY_IMAGE_MAPPINGS as h, REGEX as T, VerticalOrientation as M, CSS as E, ATTRIBUTES as A, CONDITIONS as g, HTML as N } from "../../enums/recommendation.js";
1
+ import { useRecommendation as N } from "../../composables/useRecommendation.js";
2
+ import { DUMMY_IMAGE_MAPPINGS as C, REGEX as T, VerticalOrientation as M, CSS as E, ATTRIBUTES as R, CONDITIONS as $, HTML as h } from "../../enums/recommendation.js";
3
3
  import { prepareRecommendationBlocks as x } from "./utils/recommendationCompilerUtils.js";
4
4
  const w = [
5
5
  {
6
6
  id: "replace-images-with-variable-names",
7
7
  description: "Replacing dummy images with variable names in recommendation module",
8
8
  type: "custom",
9
- processor: (c) => {
10
- let e = c;
11
- return Object.entries(h).forEach(([, l]) => {
12
- Object.entries(l).forEach(([n, s]) => {
13
- e = e.replaceAll(s, `{{${n}}}`);
9
+ processor: (i) => {
10
+ let e = i;
11
+ return Object.entries(C).forEach(([, p]) => {
12
+ Object.entries(p).forEach(([c, n]) => {
13
+ e = e.replaceAll(n, `{{${c}}}`);
14
14
  });
15
15
  }), e;
16
16
  },
@@ -29,21 +29,21 @@ const w = [
29
29
  id: "add-recommendation-unresponsive-css",
30
30
  description: "Adding recommendation unresponsive css",
31
31
  type: "custom",
32
- processor: (c) => {
33
- const { calculateCardWidth: e, getRecommendationCampaignData: l } = C();
34
- let n = c;
35
- const s = n.match(T.ID);
36
- if (s) {
32
+ processor: (i) => {
33
+ const { calculateCardWidth: e, getRecommendationCampaignData: p } = N();
34
+ let c = i;
35
+ const n = c.match(T.ID);
36
+ if (n) {
37
37
  const a = [];
38
- if (s.forEach((i) => {
39
- const d = /recommendation-id="(.*?)"/i.exec(i), _ = d ? d[1].trim() : "", R = l(_);
40
- R.textTrimming && R.orientation === M && a.push(e(R));
38
+ if (n.forEach((s) => {
39
+ const d = /recommendation-id="(.*?)"/i.exec(s), _ = d ? d[1].trim() : "", A = p(_);
40
+ A.textTrimming && A.orientation === M && a.push(e(A));
41
41
  }), a.length) {
42
- const i = `width:${Math.min(...a)}px!important;`;
43
- n = n.replace(E.REGULAR_NAME_HEIGHT, `${E.TRIMMED_NAME_HEIGHT} ${i} ${E.ELLIPSIS}`).replace(E.REGULAR_NAME_CONTAINER_HEIGHT, E.TRIMMED_NAME_CONTAINER_CSS).replace(E.RESPONSIVE_NAME_SIZE, `${E.RESPONSIVE_NAME_HEIGHT} ${i} ${E.ELLIPSIS}`).replace(E.RESPONSIVE_NAME_CONTAINER_HEIGHT, E.TRIMMED_RESPONSIVE_NAME_CONTAINER_CSS);
42
+ const s = `width:${Math.min(...a)}px!important;`;
43
+ c = c.replace(E.REGULAR_NAME_HEIGHT, `${E.TRIMMED_NAME_HEIGHT} ${s} ${E.ELLIPSIS}`).replace(E.REGULAR_NAME_CONTAINER_HEIGHT, E.TRIMMED_NAME_CONTAINER_CSS).replace(E.RESPONSIVE_NAME_SIZE, `${E.RESPONSIVE_NAME_HEIGHT} ${s} ${E.ELLIPSIS}`).replace(E.RESPONSIVE_NAME_CONTAINER_HEIGHT, E.TRIMMED_RESPONSIVE_NAME_CONTAINER_CSS);
44
44
  }
45
45
  }
46
- return n;
46
+ return c;
47
47
  },
48
48
  priority: 52
49
49
  },
@@ -51,34 +51,34 @@ const w = [
51
51
  id: "prepare-recommendations",
52
52
  description: "Replacing product data with template variables in recommendation blocks",
53
53
  type: "custom",
54
- processor: (c) => x(c),
54
+ processor: (i) => x(i),
55
55
  priority: 48
56
56
  },
57
57
  {
58
58
  id: "add-discount-conditions",
59
59
  description: "Adding discount conditions to the recommendation block",
60
60
  type: "custom",
61
- processor: (c) => {
62
- let e = c;
63
- const l = e.match(T.ATTRIBUTE_PARAGRAPH), { getRecommendationCampaignData: n } = C();
64
- return l !== null && l.forEach((s) => {
65
- const a = s.match(T.CUSTOM_FIELD);
61
+ processor: (i) => {
62
+ let e = i;
63
+ const p = e.match(T.ATTRIBUTE_PARAGRAPH), { getRecommendationCampaignData: c } = N();
64
+ return p !== null && p.forEach((n) => {
65
+ const a = n.match(T.CUSTOM_FIELD);
66
66
  if (!a)
67
67
  return;
68
- const [i] = a, d = i.match(T.CUSTOM_FIELD_INDEXES_PART), _ = i.match(T.CUSTOM_FIELD_NAME_PART), R = s.match(T.ATTRIBUTE_PARAGRAPH_START_TAG);
69
- if (!d || !_ || !R)
68
+ const [s] = a, d = s.match(T.CUSTOM_FIELD_INDEXES_PART), _ = s.match(T.CUSTOM_FIELD_NAME_PART), A = n.match(T.ATTRIBUTE_PARAGRAPH_START_TAG);
69
+ if (!d || !_ || !A)
70
70
  return;
71
- const [S] = d, [b] = _, [m] = R, o = b.substring(1, b.length - 2), r = m.match(T.COMPOSITION) !== null;
72
- let t = i;
71
+ const [I] = d, [S] = _, [m] = A, o = S.substring(1, S.length - 2), r = m.match(T.COMPOSITION) !== null;
72
+ let t = s;
73
73
  if (r) {
74
- const I = S.substring(2, S.length - 3), p = n(I);
75
- o === A.OMNIBUS_PRICE && (p.priceBeforeTextValue && (t = `${p.priceBeforeTextValue}${t}`), p.priceAfterTextValue && (t = `${t}${p.priceAfterTextValue}`)), o === A.OMNIBUS_DISCOUNT && (p.discountBeforeTextValue && (t = `${p.discountBeforeTextValue}${t}`), p.discountAfterTextValue && (t = `${t}${p.discountAfterTextValue}`));
74
+ const b = I.substring(2, I.length - 3), l = c(b);
75
+ o === R.OMNIBUS_PRICE && (l.priceBeforeTextValue && (t = `${l.priceBeforeTextValue}${t}`), l.priceAfterTextValue && (t = `${t}${l.priceAfterTextValue}`)), o === R.OMNIBUS_DISCOUNT && (l.discountBeforeTextValue && (t = `${l.discountBeforeTextValue}${t}`), l.discountAfterTextValue && (t = `${t}${l.discountAfterTextValue}`));
76
76
  }
77
- const u = S.substring(2);
77
+ const u = I.substring(2);
78
78
  let f = "";
79
- o in g.IF && (f = g.IF[o].replaceAll(`{${A.DISCOUNT}}`, `${u}${A.DISCOUNT}`).replaceAll(`{${A.OMNIBUS_DISCOUNT}}`, `${u}${A.OMNIBUS_DISCOUNT}`).replaceAll(`{${A.OMNIBUS_PRICE}}`, `${u}${A.OMNIBUS_PRICE}`));
80
- const $ = `${m}${t}${N.PARAGRAPH_END_TAG}`, y = `${f}${r ? $ : s}${g.ELSE}${m}${N.PARAGRAPH_END_TAG}${g.END_IF}`;
81
- e = e.replace(s, y);
79
+ o in $.IF && (f = $.IF[o].replaceAll(`{${R.DISCOUNT}}`, `${u}${R.DISCOUNT}`).replaceAll(`{${R.OMNIBUS_DISCOUNT}}`, `${u}${R.OMNIBUS_DISCOUNT}`).replaceAll(`{${R.OMNIBUS_PRICE}}`, `${u}${R.OMNIBUS_PRICE}`));
80
+ const g = `${m}${t}${h.PARAGRAPH_END_TAG}`, y = `${f}${r ? g : n}${$.ELSE}${m}${h.PARAGRAPH_END_TAG}${$.END_IF}`;
81
+ e = e.replace(n, y);
82
82
  }), e;
83
83
  },
84
84
  priority: 53
@@ -95,24 +95,19 @@ const w = [
95
95
  {
96
96
  id: "strip-recommendation-editor-attributes",
97
97
  description: "Strip editor-only attributes from compiled recommendation output",
98
- type: "custom",
99
- // Scoped to REC_START/REC_END markers so it cannot strip `product-attr`
100
- // from Items block elements, which the items compiler rule depends on.
101
- processor: (c) => {
102
- const e = /\s+(?:esd-extension-block-id|data-attribute-type|data-visibility|data-text-before|data-text-after|product-attr|composition)="[^"]*"/g;
103
- return c.replace(
104
- /<!--REC_START-->([\s\S]*?)<!--REC_END-->/g,
105
- (l, n) => `<!--REC_START-->${n.replace(e, "")}<!--REC_END-->`
106
- );
107
- },
98
+ type: "regex",
99
+ // eslint-disable-next-line @stylistic/max-len
100
+ pattern: '\\s+(?:esd-extension-block-id|data-attribute-type|data-visibility|data-text-before|data-text-after|product-attr|composition)="[^"]*"',
101
+ replacement: "",
102
+ flags: "g",
108
103
  priority: 55
109
104
  },
110
105
  {
111
106
  id: "strip-unused-recommendation-classes",
112
107
  description: "Remove CSS classes not referenced by any style rule from recommendation elements",
113
108
  type: "custom",
114
- processor: (c) => {
115
- let e = c.replace(
109
+ processor: (i) => {
110
+ let e = i.replace(
116
111
  / class="(?:product-card-segment|attribute-cell|recommendation-attribute-row|product-image|product-name|product-price|product-old-price|product-omnibus-price|product-omnibus-discount|product-button|recommendation-product-row|product-card-wrapper)"/g,
117
112
  ""
118
113
  );
@@ -124,8 +119,8 @@ const w = [
124
119
  id: "remove-empty-mobile-layout-artifacts",
125
120
  description: "Remove empty mobile container rows and unused mobile layout CSS",
126
121
  type: "custom",
127
- processor: (c) => {
128
- let e = c;
122
+ processor: (i) => {
123
+ let e = i;
129
124
  return e = e.replace(
130
125
  /<tr[^>]*class="ins-recommendation-mobile-row"[^>]*><\/tr>/g,
131
126
  ""
@@ -134,9 +129,9 @@ const w = [
134
129
  ""
135
130
  ), e = e.replace(
136
131
  /@media[^{]*max-width\s*:\s*480px[^{]*\{((?:[^{}]*\{[^{}]*\})*[^{}]*)\}/g,
137
- (l, n) => {
138
- const s = n.match(/[^{}]+\{[^{}]*\}/g) || [], a = /ins-recommendation|product-image-cell|button-cell|product-info-cell/;
139
- return s.every((d) => a.test(d)) ? "" : l;
132
+ (p, c) => {
133
+ const n = c.match(/[^{}]+\{[^{}]*\}/g) || [], a = /ins-recommendation|product-image-cell|button-cell|product-info-cell/;
134
+ return n.every((d) => a.test(d)) ? "" : p;
140
135
  }
141
136
  )), e;
142
137
  },
@@ -146,38 +141,38 @@ const w = [
146
141
  id: "deduplicate-inline-styles",
147
142
  description: "Replace repeated inline styles with CSS class references within recommendation blocks",
148
143
  type: "custom",
149
- processor: (c) => {
150
- const e = c.replace(
144
+ processor: (i) => {
145
+ const e = i.replace(
151
146
  /<a\b[^>]*\bes-button\b[^>]*>/g,
152
147
  (o) => o.replace(
153
148
  /([;"]color:)([^;"]+)/g,
154
149
  (r, t, u) => u.includes("!important") ? r : `${t}${u} !important`
155
150
  )
156
- ), l = /<!--REC_START-->([\s\S]*?)<!--REC_END-->/g, n = / style="([^"]*)"/g, s = /* @__PURE__ */ new Map();
157
- let a = l.exec(e);
151
+ ), p = /<!--REC_START-->([\s\S]*?)<!--REC_END-->/g, c = / style="([^"]*)"/g, n = /* @__PURE__ */ new Map();
152
+ let a = p.exec(e);
158
153
  for (; a !== null; ) {
159
- let o = n.exec(a[1]);
154
+ let o = c.exec(a[1]);
160
155
  for (; o !== null; ) {
161
156
  const [, r] = o;
162
- s.set(r, (s.get(r) || 0) + 1), o = n.exec(a[1]);
157
+ n.set(r, (n.get(r) || 0) + 1), o = c.exec(a[1]);
163
158
  }
164
- n.lastIndex = 0, a = l.exec(e);
159
+ c.lastIndex = 0, a = p.exec(e);
165
160
  }
166
- const i = /* @__PURE__ */ new Map(), d = [];
161
+ const s = /* @__PURE__ */ new Map(), d = [];
167
162
  let _ = 0;
168
- if (s.forEach((o, r) => {
163
+ if (n.forEach((o, r) => {
169
164
  if (o >= 6) {
170
165
  const t = `rc${_++}`;
171
- i.set(r, t), d.push(`.${t}{${r}}`);
166
+ s.set(r, t), d.push(`.${t}{${r}}`);
172
167
  }
173
- }), i.size === 0) {
168
+ }), s.size === 0) {
174
169
  let o = e;
175
170
  return o = o.replaceAll("<!--REC_START-->", ""), o = o.replaceAll("<!--REC_END-->", ""), o;
176
171
  }
177
- const R = (o) => o.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), S = (o, r) => `${o.slice(0, -1)} ${r}"`, b = /* @__PURE__ */ new Map();
178
- i.forEach((o, r) => {
179
- const t = R(r);
180
- b.set(r, {
172
+ const A = (o) => o.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), I = (o, r) => `${o.slice(0, -1)} ${r}"`, S = /* @__PURE__ */ new Map();
173
+ s.forEach((o, r) => {
174
+ const t = A(r);
175
+ S.set(r, {
181
176
  caseA: new RegExp(`(class="[^"]*")((?:[^>]*?)) style="${t}"`, "g"),
182
177
  caseB: new RegExp(` style="${t}"((?:[^>]*?))(class="[^"]*")`, "g")
183
178
  });
@@ -187,14 +182,14 @@ const w = [
187
182
  /<!--REC_START-->([\s\S]*?)<!--REC_END-->/g,
188
183
  (o, r) => {
189
184
  let t = r;
190
- return i.forEach((u, f) => {
191
- const $ = b.get(f);
185
+ return s.forEach((u, f) => {
186
+ const g = S.get(f);
192
187
  t = t.replace(
193
- $.caseA,
194
- (y, I, p) => S(I, u) + p
188
+ g.caseA,
189
+ (y, b, l) => I(b, u) + l
195
190
  ), t = t.replace(
196
- $.caseB,
197
- (y, I, p) => I + S(p, u)
191
+ g.caseB,
192
+ (y, b, l) => b + I(l, u)
198
193
  ), t = t.replaceAll(` style="${f}"`, ` class="${u}"`);
199
194
  }), t;
200
195
  }
@@ -1,88 +1,99 @@
1
- var x = Object.defineProperty;
2
- var f = (r, t, e) => t in r ? x(r, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : r[t] = e;
3
- var b = (r, t, e) => f(r, typeof t != "symbol" ? t + "" : t, e);
4
- import h from "../../extensions/Blocks/RadioButton/template.js";
5
- class T {
1
+ var h = Object.defineProperty;
2
+ var T = (l, e, t) => e in l ? h(l, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : l[e] = t;
3
+ var b = (l, e, t) => T(l, typeof e != "symbol" ? e + "" : e, t);
4
+ import S from "../../extensions/Blocks/RadioButton/template.js";
5
+ class B {
6
6
  constructor() {
7
7
  b(this, "parser");
8
8
  this.parser = new DOMParser();
9
9
  }
10
- migrate(t) {
10
+ migrate(e) {
11
11
  try {
12
- const e = this.parser.parseFromString(t, "text/html"), i = e.querySelectorAll("td.radio-button-block");
13
- return i.length === 0 ? t : (i.forEach((s) => {
14
- if (s.classList.contains("radio-button-v2"))
12
+ const t = this.parser.parseFromString(e, "text/html"), s = t.querySelectorAll("td.radio-button-block"), i = t.querySelectorAll("td.radio-button-v2");
13
+ if (s.length === 0 && i.length === 0)
14
+ return e;
15
+ let n = !1;
16
+ return s.forEach((r) => {
17
+ if (r.classList.contains("radio-button-v2"))
15
18
  return;
16
- const n = s.getAttribute("id"), l = this.extractTextFromElement(s, "ins-title"), a = this.extractTextFromElement(s, "ins-description"), p = this.extractTextFromElement(s, "ins-subscribe"), u = this.extractTextFromElement(s, "ins-unsubscribe"), d = this.buildTextBlock(l), g = this.buildTextBlock(a), m = this.buildTextBlock({ ...p, classList: "" }), o = this.buildTextBlock({ ...u, classList: "" }), c = h.replace("{-{-TITLE-}-}", d).replace("{-{-DESCRIPTION-}-}", g).replace("{-{-YES-}-}", m).replace("{-{-NO-}-}", o), y = this.parser.parseFromString(
17
- `<table id="tempDoc"><tbody><tr>${c}</tr></tbody></table>`,
19
+ const c = r.getAttribute("id"), o = this.extractTextFromElement(r, "ins-title"), a = this.extractTextFromElement(r, "ins-description"), p = this.extractTextFromElement(r, "ins-subscribe"), u = this.extractTextFromElement(r, "ins-unsubscribe"), m = this.buildTextBlock(o), d = this.buildTextBlock(a), g = this.buildTextBlock({ ...p, classList: "" }), x = this.buildTextBlock({ ...u, classList: "" }), f = S.replace("{-{-TITLE-}-}", m).replace("{-{-DESCRIPTION-}-}", d).replace("{-{-YES-}-}", g).replace("{-{-NO-}-}", x), y = this.parser.parseFromString(
20
+ `<table id="tempDoc"><tbody><tr>${f}</tr></tbody></table>`,
18
21
  "text/html"
19
22
  ).querySelector(".radio-button-v2");
20
- y && s.parentNode && (y.setAttribute("id", n || ""), s.parentNode.replaceChild(y, s));
21
- }), e.documentElement.outerHTML);
22
- } catch (e) {
23
- return console.error("RadioButtonMigrator failed:", e), t;
23
+ y && r.parentNode && (y.setAttribute("id", c || ""), r.parentNode.replaceChild(y, r), n = !0);
24
+ }), t.querySelectorAll('td.radio-button-v2 input[type="radio"]').forEach((r) => {
25
+ var p, u;
26
+ const c = (p = r.parentElement) == null ? void 0 : p.querySelector(":scope > p"), o = (u = r.parentElement) == null ? void 0 : u.parentElement;
27
+ if (!c || (o == null ? void 0 : o.tagName) !== "TR")
28
+ return;
29
+ r.removeAttribute("esd-block-text");
30
+ const a = t.createElement("td");
31
+ a.className = "esd-block-text", a.appendChild(c), o.appendChild(a), n = !0;
32
+ }), n ? t.documentElement.outerHTML : e;
33
+ } catch (t) {
34
+ return console.error("RadioButtonMigrator failed:", t), e;
24
35
  }
25
36
  }
26
- extractTextFromElement(t, e) {
27
- var o, c;
28
- const i = t.querySelector(`.${e}`);
29
- if (!i)
37
+ extractTextFromElement(e, t) {
38
+ var d, g;
39
+ const s = e.querySelector(`.${t}`);
40
+ if (!s)
30
41
  return {
31
- text: e === "ins-title" ? "Title" : "Description",
42
+ text: t === "ins-title" ? "Title" : "Description",
32
43
  isBold: !1,
33
44
  isItalic: !1,
34
45
  align: "left",
35
46
  styles: "",
36
47
  classList: ""
37
48
  };
38
- const s = i.querySelector("p");
39
- if (!s)
49
+ const i = s.querySelector("p");
50
+ if (!i)
40
51
  return {
41
- text: ((o = i.textContent) == null ? void 0 : o.trim()) || (e === "ins-title" ? "Title" : "Description"),
52
+ text: ((d = s.textContent) == null ? void 0 : d.trim()) || (t === "ins-title" ? "Title" : "Description"),
42
53
  isBold: !1,
43
54
  isItalic: !1,
44
- align: i.getAttribute("align") || "left",
55
+ align: s.getAttribute("align") || "left",
45
56
  styles: "",
46
57
  classList: ""
47
58
  };
48
- const n = ((c = s.textContent) == null ? void 0 : c.trim()) || (e === "ins-title" ? "Title" : "Description"), l = s.getAttribute("style") || "", a = i.getAttribute("align") || s.getAttribute("align") || "left", p = /font-weight\s*:\s*bold/i.test(l) || !!s.querySelector("b, strong"), u = /font-style\s*:\s*italic/i.test(l) || !!s.querySelector("i, em"), d = this.removeStyleProperties(l, ["font-weight", "font-style"]), g = this.convertInlineToBlock(d), m = i.getAttribute("class") || "";
59
+ const n = ((g = i.textContent) == null ? void 0 : g.trim()) || (t === "ins-title" ? "Title" : "Description"), r = i.getAttribute("style") || "", c = s.getAttribute("align") || i.getAttribute("align") || "left", o = /font-weight\s*:\s*bold/i.test(r) || !!i.querySelector("b, strong"), a = /font-style\s*:\s*italic/i.test(r) || !!i.querySelector("i, em"), p = this.removeStyleProperties(r, ["font-weight", "font-style"]), u = this.convertInlineToBlock(p), m = s.getAttribute("class") || "";
49
60
  return {
50
61
  text: n,
51
- isBold: p,
52
- isItalic: u,
53
- align: a,
54
- styles: g,
62
+ isBold: o,
63
+ isItalic: a,
64
+ align: c,
65
+ styles: u,
55
66
  classList: m
56
67
  };
57
68
  }
58
- buildTextBlock(t) {
59
- let e = t.text;
60
- t.isBold && t.isItalic ? e = `<strong path="1,0"><em path="1,0,0">${e}</em></strong>` : t.isBold ? e = `<strong path="1,0">${e}</strong>` : t.isItalic && (e = `<em path="1,0">${e}</em>`);
61
- const i = t.align ? ` align="${t.align}"` : "", s = t.styles ? ` style="${t.styles.replaceAll('"', "'")}"` : "";
69
+ buildTextBlock(e) {
70
+ let t = e.text;
71
+ e.isBold && e.isItalic ? t = `<strong path="1,0"><em path="1,0,0">${t}</em></strong>` : e.isBold ? t = `<strong path="1,0">${t}</strong>` : e.isItalic && (t = `<em path="1,0">${t}</em>`);
72
+ const s = e.align ? ` align="${e.align}"` : "", i = e.styles ? ` style="${e.styles.replaceAll('"', "'")}"` : "";
62
73
  return `
63
- <td class="esd-block-text ${t.classList}" ${i}>
64
- <p path="1" ${s}>
65
- ${e}
74
+ <td class="esd-block-text ${e.classList}" ${s}>
75
+ <p path="1" ${i}>
76
+ ${t}
66
77
  </p>
67
78
  </td>
68
79
  `;
69
80
  }
70
- removeStyleProperties(t, e) {
71
- return t ? e.reduce((s, n) => {
72
- const l = new RegExp(`${n}\\s*:\\s*[^;]*;?`, "gi");
73
- return s.replace(l, "");
74
- }, t).replace(/;\s*;/g, ";").replace(/^;|;$/g, "").trim() : "";
81
+ removeStyleProperties(e, t) {
82
+ return e ? t.reduce((i, n) => {
83
+ const r = new RegExp(`${n}\\s*:\\s*[^;]*;?`, "gi");
84
+ return i.replace(r, "");
85
+ }, e).replace(/;\s*;/g, ";").replace(/^;|;$/g, "").trim() : "";
75
86
  }
76
- convertInlineToBlock(t) {
77
- if (!t)
87
+ convertInlineToBlock(e) {
88
+ if (!e)
78
89
  return "";
79
- let e = t.replace(/display\s*:\s*inline/gi, "display: block");
80
- return /display\s*:/i.test(e) || (e = e ? `${e}; display: block` : "display: block"), e.replace(/;\s*;/g, ";").replace(/^;|;$/g, "").trim();
90
+ let t = e.replace(/display\s*:\s*inline/gi, "display: block");
91
+ return /display\s*:/i.test(t) || (t = t ? `${t}; display: block` : "display: block"), t.replace(/;\s*;/g, ";").replace(/^;|;$/g, "").trim();
81
92
  }
82
93
  }
83
- function A(r) {
84
- return new T().migrate(r);
94
+ function k(l) {
95
+ return new B().migrate(l);
85
96
  }
86
97
  export {
87
- A as migrateRadioButton
98
+ k as migrateRadioButton
88
99
  };
@@ -1,75 +1,75 @@
1
- import { ModificationDescription as S, UIElementType as d, UEAttr as m } from "../../../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
2
- import { CommonControl as A } from "../../../common-control.js";
3
- import { ItemsBlockControlId as T, ItemsBlockId as p } from "../../enums/controlEnums.js";
4
- import { productPairs as R } from "../../enums/productEnums.js";
5
- import { getItemsBlockConfig as I, setItemsBlockConfig as N, escapeReplacement as h } from "../../utils/nodeConfigUtils.js";
6
- const u = T.PRICE_SINGLE_PRICE, l = {
1
+ import { ModificationDescription as m, UIElementType as _, UEAttr as A } from "../../../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
2
+ import { CommonControl as h } from "../../../common-control.js";
3
+ import { ItemsBlockControlId as L, ItemsBlockId as R } from "../../enums/controlEnums.js";
4
+ import { productPairs as T } from "../../enums/productEnums.js";
5
+ import { getItemsBlockConfig as I, setItemsBlockConfig as u, escapeReplacement as N } from "../../utils/nodeConfigUtils.js";
6
+ const D = L.PRICE_SINGLE_PRICE, l = {
7
7
  SINGLE_PRICE: "singlePrice"
8
8
  };
9
- class k extends A {
9
+ class y extends h {
10
10
  getId() {
11
- return u;
11
+ return D;
12
12
  }
13
13
  getTemplate() {
14
14
  return `
15
- <div class="container ${T.PRICE_SINGLE_PRICE}">
15
+ <div class="container ${L.PRICE_SINGLE_PRICE}">
16
16
  ${this._getSinglePrice()}
17
17
  </div>
18
18
  `;
19
19
  }
20
20
  onRender() {
21
21
  const e = I(this.currentNode);
22
- this.api.updateValues({ [l.SINGLE_PRICE]: (e == null ? void 0 : e.priceSinglePrice) ?? !1 }), this.api.onValueChanged(l.SINGLE_PRICE, (i) => {
23
- this._onSinglePriceChange(i);
22
+ this.api.updateValues({ [l.SINGLE_PRICE]: (e == null ? void 0 : e.priceSinglePrice) ?? !1 }), this.api.onValueChanged(l.SINGLE_PRICE, (t) => {
23
+ this._onSinglePriceChange(t);
24
24
  });
25
25
  }
26
26
  onTemplateNodeUpdated(e) {
27
27
  super.onTemplateNodeUpdated(e), this.handleBlockInstanceChange(() => {
28
- const i = I(this.currentNode);
29
- this.api.updateValues({ [l.SINGLE_PRICE]: (i == null ? void 0 : i.priceSinglePrice) ?? !1 });
28
+ const t = I(this.currentNode);
29
+ this.api.updateValues({ [l.SINGLE_PRICE]: (t == null ? void 0 : t.priceSinglePrice) ?? !1 });
30
30
  });
31
31
  }
32
32
  _onSinglePriceChange(e) {
33
- if (console.debug("Single price changed to: ", e), !this.currentNode)
33
+ if (console.debug("Single price changed to: ", e), u(this.currentNode, this.api, { priceSinglePrice: e }), !this.currentNode)
34
34
  return;
35
- const i = I(this.currentNode), c = (i == null ? void 0 : i.type) ?? "CART_ITEMS", r = (i == null ? void 0 : i.priceFormatted) ?? !1, t = R.PAIRS_FOR_EXTENSION.price[c], n = R.PAIRS_FOR_EXTENSION.originalPrice[c], [E, g] = e ? [
36
- r ? t.DEFAULT_PRICE_FORMATTED : t.DEFAULT_PRICE,
37
- r ? t.DEFAULT_SINGLE_PRICE_FORMATTED : t.DEFAULT_SINGLE_PRICE
35
+ const t = I(this.currentNode), o = (t == null ? void 0 : t.type) ?? "CART_ITEMS", r = (t == null ? void 0 : t.priceFormatted) ?? !1, i = T.PAIRS_FOR_EXTENSION.price[o], c = T.PAIRS_FOR_EXTENSION.originalPrice[o], [P, p] = e ? [
36
+ r ? i.DEFAULT_PRICE_FORMATTED : i.DEFAULT_PRICE,
37
+ r ? i.DEFAULT_SINGLE_PRICE_FORMATTED : i.DEFAULT_SINGLE_PRICE
38
38
  ] : [
39
- r ? t.DEFAULT_SINGLE_PRICE_FORMATTED : t.DEFAULT_SINGLE_PRICE,
40
- r ? t.DEFAULT_PRICE_FORMATTED : t.DEFAULT_PRICE
41
- ], P = r ? n.DEFAULT_PRICE_FORMATTED : n.DEFAULT_PRICE, _ = r ? n.DEFAULT_SINGLE_PRICE_FORMATTED : n.DEFAULT_SINGLE_PRICE, [L, C] = e ? [P, _] : [_, P], s = this.api.getDocumentModifier();
42
- N(this.currentNode, this.api, { priceSinglePrice: e }, s);
43
- const o = this.currentNode.closest(".items-block");
44
- ((o == null ? void 0 : o.querySelectorAll(
45
- `[esd-extension-block-id="${p.PRICE}"]`
39
+ r ? i.DEFAULT_SINGLE_PRICE_FORMATTED : i.DEFAULT_SINGLE_PRICE,
40
+ r ? i.DEFAULT_PRICE_FORMATTED : i.DEFAULT_PRICE
41
+ ], s = r ? c.DEFAULT_PRICE_FORMATTED : c.DEFAULT_PRICE, d = r ? c.DEFAULT_SINGLE_PRICE_FORMATTED : c.DEFAULT_SINGLE_PRICE, [g, C] = e ? [s, d] : [d, s], n = this.currentNode.closest(".items-block"), S = (n == null ? void 0 : n.querySelectorAll(
42
+ `[esd-extension-block-id="${R.PRICE}"]`
43
+ )) || [], E = this.api.getDocumentModifier();
44
+ S.forEach((a) => {
45
+ this._updatePriceBlock(E, a, P, p, e);
46
+ }), ((n == null ? void 0 : n.querySelectorAll(
47
+ `[esd-extension-block-id="${R.ORIGINAL_PRICE}"]`
46
48
  )) || []).forEach((a) => {
47
- this._updatePriceBlock(s, a, E, g, e);
48
- }), ((o == null ? void 0 : o.querySelectorAll(
49
- `[esd-extension-block-id="${p.ORIGINAL_PRICE}"]`
50
- )) || []).forEach((a) => {
51
- this._updatePriceBlock(s, a, L, C, e);
52
- }), s.apply(new S(
49
+ this._updatePriceBlock(E, a, g, C, e);
50
+ }), E.apply(new m(
53
51
  `Updated price to ${e ? "single" : "total"} price`
54
52
  ));
55
53
  }
56
- _updatePriceBlock(e, i, c, r, t) {
57
- const n = `data-single_price="${t ? "true" : "false"}"`, E = i.getInnerHTML().trim().replace(c, h(r)).replace(/data-single_price=(?:"[^"]*"|'[^']*')/g, n);
58
- e.modifyHtml(i).setInnerHtml(E);
54
+ _updatePriceBlock(e, t, o, r, i) {
55
+ const c = t.getInnerHTML().trim().replace(o, N(r));
56
+ e.modifyHtml(t).setInnerHtml(c), t.querySelectorAll('[product-attr="price"], [product-attr="originalPrice"]').forEach((s) => {
57
+ e.modifyHtml(s).setAttribute("data-single_price", i ? "true" : "false");
58
+ });
59
59
  }
60
60
  _getSinglePrice() {
61
61
  return `
62
62
  <div class="display-flex align-items-center justify-content-between">
63
- <${d.LABEL}
64
- ${m.LABEL.text}="${this.api.translate("Show Single Product Price")}"
63
+ <${_.LABEL}
64
+ ${A.LABEL.text}="${this.api.translate("Show Single Product Price")}"
65
65
  >
66
- </${d.LABEL}>
66
+ </${_.LABEL}>
67
67
  ${this._GuToggle(l.SINGLE_PRICE)}
68
68
  </div>
69
69
  `;
70
70
  }
71
71
  }
72
72
  export {
73
- u as CONTROL_BLOCK_ID,
74
- k as PriceSinglePriceControl
73
+ D as CONTROL_BLOCK_ID,
74
+ y as PriceSinglePriceControl
75
75
  };
@@ -1,6 +1,6 @@
1
1
  import _ from "../../../../node_modules/lodash-es/flatMap.js";
2
- import E from "../../../../node_modules/lodash-es/range.js";
3
- const T = '<td align="center" class="ins-product-td items-block items-block-v2">', a = { PAIRS_FOR_EXTENSION: {
2
+ import a from "../../../../node_modules/lodash-es/range.js";
3
+ const T = '<td align="center" class="ins-product-td items-block items-block-v2">', E = { PAIRS_FOR_EXTENSION: {
4
4
  imageSrc: {
5
5
  CART_ITEMS: {
6
6
  ATTR: "ins_apr_img",
@@ -212,10 +212,10 @@ const T = '<td align="center" class="ins-product-td items-block items-block-v2">
212
212
  }
213
213
  } };
214
214
  function m(e, s = 8) {
215
- return E(1, s + 1).map((i) => `${e}_${i}`);
215
+ return a(1, s + 1).map((i) => `${e}_${i}`);
216
216
  }
217
- function r() {
218
- const { PAIRS_FOR_EXTENSION: e } = a, s = [];
217
+ function t() {
218
+ const { PAIRS_FOR_EXTENSION: e } = E, s = [];
219
219
  return s.push(
220
220
  e.imageSrc.CART_ITEMS.ATTR,
221
221
  e.imageSrc.BROWSED_ITEMS.ATTR,
@@ -234,34 +234,22 @@ function r() {
234
234
  ), s.push(
235
235
  e.price.CART_ITEMS.PRICE,
236
236
  e.price.CART_ITEMS.PRICE_FORMATTED,
237
- e.price.CART_ITEMS.SINGLE_PRICE,
238
- e.price.CART_ITEMS.SINGLE_PRICE_FORMATTED,
239
237
  e.price.CART_ITEMS.CURRENCY,
240
238
  e.price.BROWSED_ITEMS.PRICE,
241
239
  e.price.BROWSED_ITEMS.PRICE_FORMATTED,
242
- e.price.BROWSED_ITEMS.SINGLE_PRICE,
243
- e.price.BROWSED_ITEMS.SINGLE_PRICE_FORMATTED,
244
240
  e.price.BROWSED_ITEMS.CURRENCY,
245
241
  e.price.PURCHASED_ITEMS.PRICE,
246
242
  e.price.PURCHASED_ITEMS.PRICE_FORMATTED,
247
- e.price.PURCHASED_ITEMS.SINGLE_PRICE,
248
- e.price.PURCHASED_ITEMS.SINGLE_PRICE_FORMATTED,
249
243
  e.price.PURCHASED_ITEMS.CURRENCY
250
244
  ), s.push(
251
245
  e.originalPrice.CART_ITEMS.PRICE,
252
246
  e.originalPrice.CART_ITEMS.PRICE_FORMATTED,
253
- e.originalPrice.CART_ITEMS.SINGLE_PRICE,
254
- e.originalPrice.CART_ITEMS.SINGLE_PRICE_FORMATTED,
255
247
  e.originalPrice.CART_ITEMS.CURRENCY,
256
248
  e.originalPrice.BROWSED_ITEMS.PRICE,
257
249
  e.originalPrice.BROWSED_ITEMS.PRICE_FORMATTED,
258
- e.originalPrice.BROWSED_ITEMS.SINGLE_PRICE,
259
- e.originalPrice.BROWSED_ITEMS.SINGLE_PRICE_FORMATTED,
260
250
  e.originalPrice.BROWSED_ITEMS.CURRENCY,
261
251
  e.originalPrice.PURCHASED_ITEMS.PRICE,
262
252
  e.originalPrice.PURCHASED_ITEMS.PRICE_FORMATTED,
263
- e.originalPrice.PURCHASED_ITEMS.SINGLE_PRICE,
264
- e.originalPrice.PURCHASED_ITEMS.SINGLE_PRICE_FORMATTED,
265
253
  e.originalPrice.PURCHASED_ITEMS.CURRENCY
266
254
  ), s.push(
267
255
  e.button.CART_ITEMS.HREF,
@@ -274,11 +262,11 @@ function r() {
274
262
  ), s;
275
263
  }
276
264
  const o = _(
277
- r(),
265
+ t(),
278
266
  (e) => m(e)
279
267
  );
280
268
  export {
281
269
  o as itemsBlockDynamicVariables,
282
- a as productPairs,
270
+ E as productPairs,
283
271
  T as templateFirstLine
284
272
  };
@@ -119,7 +119,7 @@ const e = {
119
119
  id="radioYes"
120
120
  name="unsubscribe"
121
121
  data-cke-editable="1"
122
- style="margin: 0px; vertical-align: middle;>
122
+ style="margin: 0px; vertical-align: middle;">
123
123
  </td>
124
124
  {-{-YES-}-}
125
125
  </tr>