@useinsider/guido 3.27.0-beta.aac4d38 → 3.27.0-beta.aadc015

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.
@@ -1,126 +1,165 @@
1
- var B = Object.defineProperty;
2
- var v = (n, t, e) => t in n ? B(n, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : n[t] = e;
3
- var M = (n, t, e) => v(n, typeof t != "symbol" ? t + "" : t, e);
4
- import { BLOCK_ID as R } from "../../extensions/Blocks/Items/block.js";
5
- import { hasZeroWidthDeclaration as L, withoutZeroWidth as x } from "../../extensions/Blocks/Items/constants/cardWidth.js";
6
- import { ItemInCartOptions as h, DefaultConfigValues as b, SETTINGS_ENUMS as _ } from "../../extensions/Blocks/Items/enums/settingsEnums.js";
7
- import { getDefaultTemplate as V } from "../../extensions/Blocks/Items/template.js";
8
- import { useTemplateStore as O } from "../../stores/template.js";
9
- import { protectLiquid as H, restoreLiquid as $ } from "../../utils/liquidProtection.js";
10
- function F() {
1
+ var O = Object.defineProperty;
2
+ var x = (r, t, e) => t in r ? O(r, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : r[t] = e;
3
+ var w = (r, t, e) => x(r, typeof t != "symbol" ? t + "" : t, e);
4
+ import { BLOCK_ID as V } from "../../extensions/Blocks/Items/block.js";
5
+ import { hasZeroWidthDeclaration as H, withoutZeroWidth as N } from "../../extensions/Blocks/Items/constants/cardWidth.js";
6
+ import { ItemInCartOptions as E, DefaultConfigValues as S, SETTINGS_ENUMS as p } from "../../extensions/Blocks/Items/enums/settingsEnums.js";
7
+ import { getDefaultTemplate as W } from "../../extensions/Blocks/Items/template.js";
8
+ import { useTemplateStore as $ } from "../../stores/template.js";
9
+ import { protectLiquid as F, restoreLiquid as U } from "../../utils/liquidProtection.js";
10
+ const D = "table.es-left, table.es-right", Y = [
11
+ ".es-hidden",
12
+ ".ins-product-td",
13
+ "td.esd-cart-items-block",
14
+ "td.esd-browsed-items-block",
15
+ "td.esd-purchased-items-block"
16
+ ].join(", ");
17
+ function h(r) {
18
+ const t = Number(r.getAttribute("width"));
19
+ return Number.isFinite(t) && t > 0 ? t : 0;
20
+ }
21
+ function P(r) {
22
+ return Array.from(r.children).filter((t) => t.tagName === "TBODY").flatMap((t) => Array.from(t.children)).flatMap((t) => Array.from(t.children).filter((e) => e.tagName === "TD"));
23
+ }
24
+ function z(r) {
25
+ var e, i;
26
+ let t = (e = r.parentElement) == null ? void 0 : e.closest("table");
27
+ for (; t; ) {
28
+ const o = h(t);
29
+ if (o)
30
+ return o;
31
+ t = (i = t.parentElement) == null ? void 0 : i.closest("table");
32
+ }
33
+ return 0;
34
+ }
35
+ function k(r) {
36
+ var a, c;
37
+ const t = (c = (a = r.parentElement) == null ? void 0 : a.parentElement) == null ? void 0 : c.parentElement, e = t == null ? void 0 : t.parentElement;
38
+ if (!t || !e || !t.matches(D) || !h(r))
39
+ return !1;
40
+ const i = P(t), o = i.some((l) => !l.matches(Y) && h(l));
41
+ if (!i.includes(r) || o)
42
+ return !1;
43
+ const u = Array.from(e.children).filter((l) => l.matches(D)).reduce((l, d) => l + Math.max(0, ...P(d).map(h)), 0), n = z(e);
44
+ return n > 0 && u <= n;
45
+ }
46
+ function j() {
11
47
  return String(Date.now() + Math.floor(Math.random() * 1e3));
12
48
  }
13
- function D(n) {
14
- return n ? {
15
- CartItems: _.ITEMS_TYPE.CART_ITEMS,
16
- BrowsedItems: _.ITEMS_TYPE.BROWSED_ITEMS,
17
- PurchasedItems: _.ITEMS_TYPE.PURCHASED_ITEMS,
18
- CART_ITEMS: _.ITEMS_TYPE.CART_ITEMS,
19
- BROWSED_ITEMS: _.ITEMS_TYPE.BROWSED_ITEMS,
20
- PURCHASED_ITEMS: _.ITEMS_TYPE.PURCHASED_ITEMS
21
- }[n] || _.ITEMS_TYPE.CART_ITEMS : _.ITEMS_TYPE.CART_ITEMS;
49
+ function R(r) {
50
+ return r ? {
51
+ CartItems: p.ITEMS_TYPE.CART_ITEMS,
52
+ BrowsedItems: p.ITEMS_TYPE.BROWSED_ITEMS,
53
+ PurchasedItems: p.ITEMS_TYPE.PURCHASED_ITEMS,
54
+ CART_ITEMS: p.ITEMS_TYPE.CART_ITEMS,
55
+ BROWSED_ITEMS: p.ITEMS_TYPE.BROWSED_ITEMS,
56
+ PURCHASED_ITEMS: p.ITEMS_TYPE.PURCHASED_ITEMS
57
+ }[r] || p.ITEMS_TYPE.CART_ITEMS : p.ITEMS_TYPE.CART_ITEMS;
22
58
  }
23
- function U(n) {
24
- return n.classList.contains("esd-browsed-items-block") ? _.ITEMS_TYPE.BROWSED_ITEMS : n.classList.contains("esd-purchased-items-block") ? _.ITEMS_TYPE.PURCHASED_ITEMS : _.ITEMS_TYPE.CART_ITEMS;
59
+ function J(r) {
60
+ return r.classList.contains("esd-browsed-items-block") ? p.ITEMS_TYPE.BROWSED_ITEMS : r.classList.contains("esd-purchased-items-block") ? p.ITEMS_TYPE.PURCHASED_ITEMS : p.ITEMS_TYPE.CART_ITEMS;
25
61
  }
26
- function P(n) {
27
- var o;
28
- const t = (i, d) => i == null ? d : i === "1" || i === "true", e = (i, d) => i || d, a = n["data-type"] || n["data-source"], r = D(a), u = h[r];
29
- let c = n["data-cart_items_select_control_value"] || ((o = u == null ? void 0 : u[0]) == null ? void 0 : o.value) || b.cartItemsSelectControlValue;
30
- if (c && !c.includes("{{") && /^\d+$/.test(c)) {
31
- const i = parseInt(c) - 1, d = h[r];
32
- d && d[i] && (c = d[i].value);
62
+ function q(r) {
63
+ var a;
64
+ const t = (c, l) => c == null ? l : c === "1" || c === "true", e = (c, l) => c || l, i = r["data-type"] || r["data-source"], o = R(i), u = E[o];
65
+ let n = r["data-cart_items_select_control_value"] || ((a = u == null ? void 0 : u[0]) == null ? void 0 : a.value) || S.cartItemsSelectControlValue;
66
+ if (n && !n.includes("{{") && /^\d+$/.test(n)) {
67
+ const c = parseInt(n) - 1, l = E[o];
68
+ l && l[c] && (n = l[c].value);
33
69
  }
34
70
  return {
35
71
  initialized: !0,
36
- blockInstanceId: e(n["data-block-instance-id"], F()),
37
- source: r,
38
- type: r,
39
- itemsSelectValue: c,
40
- orientation: n["data-card_orientation_control_value"] || _.ORIENTATION.VERTICAL,
41
- nameTrimming: t(n["data-product_name_control_trim"], !0),
42
- priceHideDiscount: t(n["data-product_price_control_nodup"], !0),
43
- priceFormatted: t(n["data-product_price_control_formated"], !0),
44
- priceSinglePrice: t(n["data-product_price_control_single_price"], !1),
72
+ blockInstanceId: e(r["data-block-instance-id"], j()),
73
+ source: o,
74
+ type: o,
75
+ itemsSelectValue: n,
76
+ orientation: r["data-card_orientation_control_value"] || p.ORIENTATION.VERTICAL,
77
+ nameTrimming: t(r["data-product_name_control_trim"], !0),
78
+ priceHideDiscount: t(r["data-product_price_control_nodup"], !0),
79
+ priceFormatted: t(r["data-product_price_control_formated"], !0),
80
+ priceSinglePrice: t(r["data-product_price_control_single_price"], !1),
45
81
  priceCurrencySymbol: e(
46
- n["data-product_price_control_currency_symbol"],
47
- b.productPriceCurrencySymbolControlValue
82
+ r["data-product_price_control_currency_symbol"],
83
+ S.productPriceCurrencySymbolControlValue
48
84
  ),
49
85
  priceCurrencyLocation: e(
50
- n["data-product_price_currency_location"],
51
- b.productPriceCurrencyLocationControlValue
86
+ r["data-product_price_currency_location"],
87
+ S.productPriceCurrencyLocationControlValue
52
88
  ),
53
- priceOrientation: n["data-product_original_price_control_orientation"] || "horizontal",
54
- quantityControlEnabled: t(n["data-product_quantity_control_enabled"], !0),
55
- buttonLink: e(n["data-product_button_link"], b.productButtonLinkControlValue),
56
- imageLink: e(n["data-product_image_link"], b.productImageLinkControlValue),
57
- buttonLabel: e(n["data-product_button_control_label"], "Buy"),
58
- buttonFullWidth: t(n["data-product_button_control_atw"], !0),
59
- imageVisible: t(n["data-product_image_control_enabled"], !0),
60
- nameVisible: t(n["data-product_name_control_enabled"], !0),
61
- quantityVisible: t(n["data-product_quantity_control_enabled"], !0),
62
- priceVisible: t(n["data-product_price_control_enabled"], !0),
63
- originalPriceVisible: t(n["data-product_original_price_control_enabled"], !0),
64
- buttonVisible: t(n["data-product_button_control_enabled"], !0)
89
+ priceOrientation: r["data-product_original_price_control_orientation"] || "horizontal",
90
+ quantityControlEnabled: t(r["data-product_quantity_control_enabled"], !0),
91
+ buttonLink: e(r["data-product_button_link"], S.productButtonLinkControlValue),
92
+ imageLink: e(r["data-product_image_link"], S.productImageLinkControlValue),
93
+ buttonLabel: e(r["data-product_button_control_label"], "Buy"),
94
+ buttonFullWidth: t(r["data-product_button_control_atw"], !0),
95
+ imageVisible: t(r["data-product_image_control_enabled"], !0),
96
+ nameVisible: t(r["data-product_name_control_enabled"], !0),
97
+ quantityVisible: t(r["data-product_quantity_control_enabled"], !0),
98
+ priceVisible: t(r["data-product_price_control_enabled"], !0),
99
+ originalPriceVisible: t(r["data-product_original_price_control_enabled"], !0),
100
+ buttonVisible: t(r["data-product_button_control_enabled"], !0)
65
101
  };
66
102
  }
67
- function Y(n, t) {
103
+ function Z(r, t) {
68
104
  const e = {
69
105
  CART_ITEMS: `{{Abandoned Cart Item (${t}) Image}}`,
70
106
  BROWSED_ITEMS: `{{Browsed Item (${t}) Image}}`,
71
107
  PURCHASED_ITEMS: `{{Purchased Item (${t}) Image}}`
72
108
  };
73
- return e[n] || e.CART_ITEMS;
109
+ return e[r] || e.CART_ITEMS;
74
110
  }
75
- function W(n, t) {
111
+ function G(r, t) {
76
112
  const e = {
77
113
  CART_ITEMS: `{{Abandoned Cart Item (${t}) Url}}`,
78
114
  BROWSED_ITEMS: `{{Browsed Item (${t}) Url}}`,
79
115
  PURCHASED_ITEMS: `{{Purchased Item (${t}) Url}}`
80
116
  };
81
- return e[n] || e.CART_ITEMS;
117
+ return e[r] || e.CART_ITEMS;
82
118
  }
83
- class z {
119
+ class K {
84
120
  constructor() {
85
- M(this, "parser");
121
+ w(this, "parser");
86
122
  this.parser = new DOMParser();
87
123
  }
88
124
  migrate(t) {
89
125
  try {
90
126
  if (!this.containsItemsBlock(t))
91
127
  return this.backfillV2ProductTdAttributes(t);
92
- const e = this.removeJinjaConditionals(t), a = this.parser.parseFromString(e, "text/html"), r = a.querySelectorAll(
128
+ const e = this.removeJinjaConditionals(t), i = this.parser.parseFromString(e, "text/html"), o = i.querySelectorAll(
93
129
  "td.esd-cart-items-block, td.esd-browsed-items-block, td.esd-purchased-items-block"
94
130
  );
95
- return O().$patch((c) => {
96
- c.migrations = { ...c.migrations, [R]: r.length };
97
- }), r.length === 0 ? (console.warn("ItemsBlockMigrator: No blocks found with items block selectors"), this.backfillV2ProductTdAttributes(e)) : (r.forEach((c) => {
98
- const o = this.extractConfiguration(c), i = V({
99
- orientation: o.orientation,
100
- itemsType: o.itemsType,
101
- itemId: o.itemId,
102
- currencySymbol: o.currencySymbol,
103
- currencyLocation: o.currencyLocation,
104
- formattedPrice: o.formattedPrice,
105
- configBlockAttributes: o.configBlockAttributes,
131
+ if ($().$patch((a) => {
132
+ a.migrations = { ...a.migrations, [V]: o.length };
133
+ }), o.length === 0)
134
+ return console.warn("ItemsBlockMigrator: No blocks found with items block selectors"), this.backfillV2ProductTdAttributes(e);
135
+ const n = new Set(Array.from(o).filter(k));
136
+ return o.forEach((a) => {
137
+ const c = this.extractConfiguration(a), l = W({
138
+ orientation: c.orientation,
139
+ itemsType: c.itemsType,
140
+ itemId: c.itemId,
141
+ currencySymbol: c.currencySymbol,
142
+ currencyLocation: c.currencyLocation,
143
+ formattedPrice: c.formattedPrice,
144
+ configBlockAttributes: c.configBlockAttributes,
106
145
  migrate: !0,
107
- nameStyles: o.nameStyles,
108
- buttonStyles: o.buttonStyles,
109
- priceStyles: o.priceStyles,
110
- originalPriceStyles: o.originalPriceStyles,
111
- quantityStyles: o.quantityStyles,
112
- nodeConfig: P(o.configBlockAttributes)
113
- }), l = this.parser.parseFromString(
114
- `<table><tbody><tr>${i}</tr></tbody></table>`,
146
+ nameStyles: c.nameStyles,
147
+ buttonStyles: c.buttonStyles,
148
+ priceStyles: c.priceStyles,
149
+ originalPriceStyles: c.originalPriceStyles,
150
+ quantityStyles: c.quantityStyles,
151
+ nodeConfig: q(c.configBlockAttributes)
152
+ }), s = this.parser.parseFromString(
153
+ `<table><tbody><tr>${l}</tr></tbody></table>`,
115
154
  "text/html"
116
155
  ).querySelector("td");
117
- if (l && c.parentNode) {
118
- const s = P(o.configBlockAttributes);
119
- l.setAttribute("esd-ext-config", JSON.stringify(s)), l.setAttribute("data-type", s.type);
120
- const p = l.querySelector("esd-config-block");
121
- p && p.remove(), c.parentNode.replaceChild(l, c);
156
+ if (s && a.parentNode) {
157
+ const _ = q(c.configBlockAttributes);
158
+ s.setAttribute("esd-ext-config", JSON.stringify(_)), s.setAttribute("data-type", _.type);
159
+ const m = s.querySelector("esd-config-block");
160
+ m && m.remove(), n.has(a) && (s.setAttribute("width", String(h(a))), s.classList.add("esd-container-frame")), a.parentNode.replaceChild(s, a);
122
161
  }
123
- }), this.backfillV2ProductTdAttributes(a.documentElement.outerHTML));
162
+ }), this.backfillV2ProductTdAttributes(i.documentElement.outerHTML);
124
163
  } catch (e) {
125
164
  return console.error("ItemsBlockMigrator failed:", e), t;
126
165
  }
@@ -132,25 +171,25 @@ class z {
132
171
  * - UI styles from product elements (name, price, button, quantity, etc.)
133
172
  */
134
173
  extractConfiguration(t) {
135
- var C;
136
- const e = D(
137
- this.readSelfOrDescendantAttribute(t, "data-type") || U(t)
138
- ), a = this.readSelfOrDescendantAttribute(t, "data-number") || "1", r = parseInt(a) - 1, u = h[e], c = ((C = u == null ? void 0 : u[r]) == null ? void 0 : C.value) || u[0].value, o = this.extractConfigBlockAttributes(t, e, a);
139
- this.applyDomFallbacks(t, o);
140
- const i = t.querySelector('[product-attr="price"]'), d = o["data-product_price_control_currency_symbol"], l = o["data-product_price_currency_location"] || "0", s = o["data-product_price_control_formated"], p = s !== "false" && s !== "0", S = o["data-card_orientation_control_value"] === "horizontal" ? "horizontal" : "vertical", f = t.querySelector('a[product-attr="name"]'), y = (f == null ? void 0 : f.getAttribute("style")) || void 0, g = t.querySelector('a[product-attr="button"]') ?? t.querySelector('[product-attr="button"]'), I = (g == null ? void 0 : g.getAttribute("style")) || void 0, k = (i == null ? void 0 : i.getAttribute("style")) || void 0, m = t.querySelector("p.original-price") ?? t.querySelector('[product-attr="originalPrice"]'), A = m != null && m.getAttribute("style") ? m : (m == null ? void 0 : m.closest("p")) ?? m, q = (A == null ? void 0 : A.getAttribute("style")) || void 0, E = t.querySelector('[product-attr="quantity"]'), w = (E == null ? void 0 : E.getAttribute("style")) || void 0;
174
+ var M;
175
+ const e = R(
176
+ this.readSelfOrDescendantAttribute(t, "data-type") || J(t)
177
+ ), i = this.readSelfOrDescendantAttribute(t, "data-number") || "1", o = parseInt(i) - 1, u = E[e], n = ((M = u == null ? void 0 : u[o]) == null ? void 0 : M.value) || u[0].value, a = this.extractConfigBlockAttributes(t, e, i);
178
+ this.applyDomFallbacks(t, a);
179
+ const c = t.querySelector('[product-attr="price"]'), l = a["data-product_price_control_currency_symbol"], d = a["data-product_price_currency_location"] || "0", s = a["data-product_price_control_formated"], _ = s !== "false" && s !== "0", A = a["data-card_orientation_control_value"] === "horizontal" ? "horizontal" : "vertical", g = t.querySelector('a[product-attr="name"]'), y = (g == null ? void 0 : g.getAttribute("style")) || void 0, b = t.querySelector('a[product-attr="button"]') ?? t.querySelector('[product-attr="button"]'), I = (b == null ? void 0 : b.getAttribute("style")) || void 0, B = (c == null ? void 0 : c.getAttribute("style")) || void 0, f = t.querySelector("p.original-price") ?? t.querySelector('[product-attr="originalPrice"]'), T = f != null && f.getAttribute("style") ? f : (f == null ? void 0 : f.closest("p")) ?? f, L = (T == null ? void 0 : T.getAttribute("style")) || void 0, C = t.querySelector('[product-attr="quantity"]'), v = (C == null ? void 0 : C.getAttribute("style")) || void 0;
141
180
  return {
142
- orientation: S,
181
+ orientation: A,
143
182
  itemsType: e,
144
- itemId: c,
145
- currencySymbol: d,
146
- currencyLocation: l,
147
- formattedPrice: p,
148
- configBlockAttributes: o,
183
+ itemId: n,
184
+ currencySymbol: l,
185
+ currencyLocation: d,
186
+ formattedPrice: _,
187
+ configBlockAttributes: a,
149
188
  nameStyles: y,
150
189
  buttonStyles: I,
151
- priceStyles: k,
152
- originalPriceStyles: q,
153
- quantityStyles: w
190
+ priceStyles: B,
191
+ originalPriceStyles: L,
192
+ quantityStyles: v
154
193
  };
155
194
  }
156
195
  /**
@@ -161,8 +200,8 @@ class z {
161
200
  * card migrates with the boilerplate defaults: caption "Buy", USD, full-width button.
162
201
  */
163
202
  applyDomFallbacks(t, e) {
164
- var S, f;
165
- const a = t.querySelector("esd-config-block"), r = (...y) => !a || y.every((g) => !(a.getAttribute(g) ?? "").trim());
203
+ var A, g;
204
+ const i = t.querySelector("esd-config-block"), o = (...y) => !i || y.every((b) => !(i.getAttribute(b) ?? "").trim());
166
205
  Object.entries({
167
206
  image: '[product-attr="imageSrc"]',
168
207
  name: '[product-attr="name"]',
@@ -170,18 +209,18 @@ class z {
170
209
  original_price: '[product-attr="originalPrice"], p.original-price',
171
210
  quantity: '[product-attr="quantity"]',
172
211
  button: '[product-attr="button"]'
173
- }).forEach(([y, g]) => {
212
+ }).forEach(([y, b]) => {
174
213
  const I = `data-product_${y}_control_enabled`;
175
- r(I) && (e[I] = t.querySelector(g) ? "true" : "false");
176
- }), r("data-card_orientation_control_value") && (e["data-card_orientation_control_value"] = t.querySelector('[colspan="2"]') ? "vertical" : "horizontal");
177
- const c = t.querySelector('a[product-attr="button"]') ?? t.querySelector('[product-attr="button"]'), o = (S = c == null ? void 0 : c.textContent) == null ? void 0 : S.replace(/\s+/g, " ").trim();
178
- o && r("data-product_button_control_label") && (e["data-product_button_control_label"] = o);
179
- const i = (c == null ? void 0 : c.getAttribute("style")) || "";
180
- r("data-product_button_control_atw") && /display:\s*inline/.test(i) && !/(?:^|;)\s*width\s*:\s*100%/.test(i) && (e["data-product_button_control_atw"] = "false");
181
- const d = t.querySelector('[product-attr="imageSrc"]'), l = d ? this.readImageSize(d) : null, s = (l == null ? void 0 : l.height) ?? (l == null ? void 0 : l.width), p = (l == null ? void 0 : l.width) ?? (l == null ? void 0 : l.height);
182
- s && r("data-product_image_control_image-height") && (e["data-product_image_control_image-height"] = s), p && r("data-product_image_control_image-width") && (e["data-product_image_control_image-width"] = p), this.applyPriceDomFallbacks(t, e, r);
183
- const T = ((f = t.querySelector('[product-attr="name"]')) == null ? void 0 : f.getAttribute("style")) || "";
184
- r("data-product_name_control_trim") && /white-space:\s*normal/.test(T) && (e["data-product_name_control_trim"] = "0");
214
+ o(I) && (e[I] = t.querySelector(b) ? "true" : "false");
215
+ }), o("data-card_orientation_control_value") && (e["data-card_orientation_control_value"] = t.querySelector('[colspan="2"]') ? "vertical" : "horizontal");
216
+ const n = t.querySelector('a[product-attr="button"]') ?? t.querySelector('[product-attr="button"]'), a = (A = n == null ? void 0 : n.textContent) == null ? void 0 : A.replace(/\s+/g, " ").trim();
217
+ a && o("data-product_button_control_label") && (e["data-product_button_control_label"] = a);
218
+ const c = (n == null ? void 0 : n.getAttribute("style")) || "";
219
+ o("data-product_button_control_atw") && /display:\s*inline/.test(c) && !/(?:^|;)\s*width\s*:\s*100%/.test(c) && (e["data-product_button_control_atw"] = "false");
220
+ const l = t.querySelector('[product-attr="imageSrc"]'), d = l ? this.readImageSize(l) : null, s = (d == null ? void 0 : d.height) ?? (d == null ? void 0 : d.width), _ = (d == null ? void 0 : d.width) ?? (d == null ? void 0 : d.height);
221
+ s && o("data-product_image_control_image-height") && (e["data-product_image_control_image-height"] = s), _ && o("data-product_image_control_image-width") && (e["data-product_image_control_image-width"] = _), this.applyPriceDomFallbacks(t, e, o);
222
+ const m = ((g = t.querySelector('[product-attr="name"]')) == null ? void 0 : g.getAttribute("style")) || "";
223
+ o("data-product_name_control_trim") && /white-space:\s*normal/.test(m) && (e["data-product_name_control_trim"] = "0");
185
224
  }
186
225
  /**
187
226
  * Carries the price cell's own currency/format attributes into the config attributes when
@@ -190,22 +229,22 @@ class z {
190
229
  * ₺ but reporting USD/before to the settings panel, and the first unrelated price edit wrote
191
230
  * the default back over the real value.
192
231
  */
193
- applyPriceDomFallbacks(t, e, a) {
194
- var d;
195
- const r = t.querySelector('[product-attr="price"]') ?? t.querySelector('[product-attr="originalPrice"]');
196
- if (!r)
232
+ applyPriceDomFallbacks(t, e, i) {
233
+ var l;
234
+ const o = t.querySelector('[product-attr="price"]') ?? t.querySelector('[product-attr="originalPrice"]');
235
+ if (!o)
197
236
  return;
198
- const u = (d = r.getAttribute("data-currency_symbol")) == null ? void 0 : d.trim();
199
- u && a("data-product_price_control_currency_symbol") && (e["data-product_price_control_currency_symbol"] = u);
200
- const c = r.getAttribute("data-curency");
201
- if (c && a("data-product_price_currency_location", "data-product_price_control_curency")) {
202
- const l = c === "after" ? "1" : "0";
203
- e["data-product_price_currency_location"] = l, e["data-product_price_control_curency"] = l;
237
+ const u = (l = o.getAttribute("data-currency_symbol")) == null ? void 0 : l.trim();
238
+ u && i("data-product_price_control_currency_symbol") && (e["data-product_price_control_currency_symbol"] = u);
239
+ const n = o.getAttribute("data-curency");
240
+ if (n && i("data-product_price_currency_location", "data-product_price_control_curency")) {
241
+ const d = n === "after" ? "1" : "0";
242
+ e["data-product_price_currency_location"] = d, e["data-product_price_control_curency"] = d;
204
243
  }
205
- const o = r.getAttribute("data-formated");
206
- o && a("data-product_price_control_formated") && (e["data-product_price_control_formated"] = o);
207
- const i = r.getAttribute("data-single_price");
208
- i && a("data-product_price_control_single_price") && (e["data-product_price_control_single_price"] = i);
244
+ const a = o.getAttribute("data-formated");
245
+ a && i("data-product_price_control_formated") && (e["data-product_price_control_formated"] = a);
246
+ const c = o.getAttribute("data-single_price");
247
+ c && i("data-product_price_control_single_price") && (e["data-product_price_control_single_price"] = c);
209
248
  }
210
249
  /**
211
250
  * Reads an attribute from the block element itself before falling back to a descendant.
@@ -213,8 +252,8 @@ class z {
213
252
  * esd-config-block; when an author deletes the config block only the td's copy survives.
214
253
  */
215
254
  readSelfOrDescendantAttribute(t, e) {
216
- var a;
217
- return t.getAttribute(e) || ((a = t.querySelector(`[${e}]`)) == null ? void 0 : a.getAttribute(e)) || null;
255
+ var i;
256
+ return t.getAttribute(e) || ((i = t.querySelector(`[${e}]`)) == null ? void 0 : i.getAttribute(e)) || null;
218
257
  }
219
258
  /**
220
259
  * Reads the product image's pixel size — `width`/`height` attributes first, then px values
@@ -234,15 +273,15 @@ class z {
234
273
  * to nothing, so only a positive integer counts as an answer.
235
274
  */
236
275
  readImageDimension(t, e) {
237
- var d;
238
- const a = (l) => {
239
- const s = (l ?? "").trim().match(/^(\d+(?:\.\d+)?)(?:px)?$/i), p = s ? Math.floor(parseFloat(s[1])) : 0;
240
- return p > 0 ? String(p) : null;
241
- }, r = a((d = t.getAttribute(e)) == null ? void 0 : d.trim());
242
- if (r)
243
- return r;
244
- const u = t.getAttribute("style") || "", c = new RegExp(`(?:^|;)\\s*${e}:\\s*(\\d+(?:\\.\\d+)?)px`), o = new RegExp(`max-${e}:\\s*(\\d+(?:\\.\\d+)?)px`), i = u.match(c) || u.match(o);
245
- return a(i == null ? void 0 : i[1]);
276
+ var l;
277
+ const i = (d) => {
278
+ const s = (d ?? "").trim().match(/^(\d+(?:\.\d+)?)(?:px)?$/i), _ = s ? Math.floor(parseFloat(s[1])) : 0;
279
+ return _ > 0 ? String(_) : null;
280
+ }, o = i((l = t.getAttribute(e)) == null ? void 0 : l.trim());
281
+ if (o)
282
+ return o;
283
+ const u = t.getAttribute("style") || "", n = new RegExp(`(?:^|;)\\s*${e}:\\s*(\\d+(?:\\.\\d+)?)px`), a = new RegExp(`max-${e}:\\s*(\\d+(?:\\.\\d+)?)px`), c = u.match(n) || u.match(a);
284
+ return i(c == null ? void 0 : c[1]);
246
285
  }
247
286
  /**
248
287
  * Extracts all data-* attributes from the esd-config-block element
@@ -251,27 +290,27 @@ class z {
251
290
  * @param itemsType - The type of items (CART_ITEMS, BROWSED_ITEMS, PURCHASED_ITEMS)
252
291
  * @param itemNumber - The item number (1-based index)
253
292
  */
254
- extractConfigBlockAttributes(t, e, a) {
255
- const r = t.querySelector("esd-config-block"), u = {};
256
- if (r) {
257
- if (Array.from(r.attributes).forEach((o) => {
258
- o.name.startsWith("data-") && (u[o.name] = o.value);
293
+ extractConfigBlockAttributes(t, e, i) {
294
+ const o = t.querySelector("esd-config-block"), u = {};
295
+ if (o) {
296
+ if (Array.from(o.attributes).forEach((a) => {
297
+ a.name.startsWith("data-") && (u[a.name] = a.value);
259
298
  }), u["data-cart_items_select_control_value"]) {
260
- const o = u["data-cart_items_select_control_value"];
261
- if (/^\d+$/.test(o)) {
262
- const i = parseInt(o) - 1, d = h[e];
263
- d && d[i] && (u["data-cart_items_select_control_value"] = d[i].value);
299
+ const a = u["data-cart_items_select_control_value"];
300
+ if (/^\d+$/.test(a)) {
301
+ const c = parseInt(a) - 1, l = E[e];
302
+ l && l[c] && (u["data-cart_items_select_control_value"] = l[c].value);
264
303
  }
265
304
  }
266
305
  if (u["data-product_price_control_curency"]) {
267
- const o = u["data-product_price_control_curency"];
268
- let i = o;
269
- o === "before" ? i = "0" : o === "after" && (i = "1"), u["data-product_price_control_curency"] = i, u["data-product_price_currency_location"] = i;
306
+ const a = u["data-product_price_control_curency"];
307
+ let c = a;
308
+ a === "before" ? c = "0" : a === "after" && (c = "1"), u["data-product_price_control_curency"] = c, u["data-product_price_currency_location"] = c;
270
309
  }
271
310
  (!u["data-product_price_control_currency_symbol"] || u["data-product_price_control_currency_symbol"].trim() === "") && (u["data-product_price_control_currency_symbol"] = "USD");
272
311
  }
273
- const c = { ...this.getDefaultConfigBlockAttributes(), ...u };
274
- return c["data-type"] = e, c["data-source"] = e, c["data-product_image_link"] = Y(e, a), c["data-product_button_link"] = W(e, a), c;
312
+ const n = { ...this.getDefaultConfigBlockAttributes(), ...u };
313
+ return n["data-type"] = e, n["data-source"] = e, n["data-product_image_link"] = Z(e, i), n["data-product_button_link"] = G(e, i), n;
275
314
  }
276
315
  /**
277
316
  * Returns default esd-config-block attributes based on the old template structure
@@ -338,6 +377,7 @@ class z {
338
377
  * no longer emits it; here we heal already-saved templates by removing it so the
339
378
  * cell inherits its column width. width="560" was only ever written alongside
340
379
  * esd-ext-config, so the guard below still catches every affected template.
380
+ * A cell that is its column's only width carrier keeps its width and frame.
341
381
  *
342
382
  * Only re-serializes when something actually changed, so healthy templates
343
383
  * (data-type present, no static width) pass through byte-for-byte.
@@ -345,29 +385,31 @@ class z {
345
385
  backfillV2ProductTdAttributes(t) {
346
386
  if (!t.includes("ins-product-td") || !t.includes("esd-ext-config"))
347
387
  return t;
348
- const e = this.parser.parseFromString(H(t), "text/html");
349
- let a = !1;
350
- return e.querySelectorAll(".ins-product-td").forEach((r) => {
351
- r.hasAttribute("width") && (r.removeAttribute("width"), a = !0), r.classList.contains("esd-container-frame") && (r.classList.remove("esd-container-frame"), a = !0), r.querySelectorAll("table.ins-product-wrapper").forEach((d) => {
352
- d.hasAttribute("width") && d.getAttribute("width") !== "100%" && (d.setAttribute("width", "100%"), a = !0);
353
- const l = d.getAttribute("style");
354
- l && L(l) && (d.setAttribute("style", x(l)), d.setAttribute("width", "100%"), a = !0);
388
+ const e = this.parser.parseFromString(F(t), "text/html");
389
+ let i = !1;
390
+ const o = Array.from(e.querySelectorAll(".ins-product-td")), u = new Set(o.filter(k));
391
+ return o.forEach((n) => {
392
+ const a = u.has(n);
393
+ !a && n.hasAttribute("width") && (n.removeAttribute("width"), i = !0), !a && n.classList.contains("esd-container-frame") && (n.classList.remove("esd-container-frame"), i = !0), n.querySelectorAll("table.ins-product-wrapper").forEach((_) => {
394
+ !a && _.hasAttribute("width") && _.getAttribute("width") !== "100%" && (_.setAttribute("width", "100%"), i = !0);
395
+ const m = _.getAttribute("style");
396
+ m && H(m) && (_.setAttribute("style", N(m)), _.setAttribute("width", "100%"), i = !0);
355
397
  });
356
- const u = r.getAttribute("esd-ext-config");
357
- let c = null;
398
+ const c = n.getAttribute("esd-ext-config");
399
+ let l = null;
358
400
  try {
359
- c = u ? JSON.parse(u) : null;
401
+ l = c ? JSON.parse(c) : null;
360
402
  } catch {
361
403
  }
362
- if (!c || (!r.getAttribute("data-nodup") && typeof c.priceHideDiscount == "boolean" && (r.setAttribute("data-nodup", String(c.priceHideDiscount)), a = !0), r.getAttribute("data-type")))
404
+ if (!l || (!n.getAttribute("data-nodup") && typeof l.priceHideDiscount == "boolean" && (n.setAttribute("data-nodup", String(l.priceHideDiscount)), i = !0), n.getAttribute("data-type")))
363
405
  return;
364
- const o = c.type || c.source;
365
- if (!o)
406
+ const d = l.type || l.source;
407
+ if (!d)
366
408
  return;
367
- r.setAttribute("data-type", o), a = !0;
368
- const i = typeof c.itemsSelectValue == "string" ? c.itemsSelectValue.match(/\((\d+)\)/) : null;
369
- i && r.getAttribute("data-number") !== i[1] && r.setAttribute("data-number", i[1]);
370
- }), a ? $(e.documentElement.outerHTML) : t;
409
+ n.setAttribute("data-type", d), i = !0;
410
+ const s = typeof l.itemsSelectValue == "string" ? l.itemsSelectValue.match(/\((\d+)\)/) : null;
411
+ s && n.getAttribute("data-number") !== s[1] && n.setAttribute("data-number", s[1]);
412
+ }), i ? U(e.documentElement.outerHTML) : t;
371
413
  }
372
414
  /**
373
415
  * Fast check for the presence of any items block (cart / browsed / purchased)
@@ -388,22 +430,22 @@ class z {
388
430
  * contains display condition Jinja scripts that should NOT be removed.
389
431
  */
390
432
  removeJinjaConditionals(t) {
391
- const e = "__ESD_DISPLAY_CONDITIONS_PLACEHOLDER__", a = t.match(/esd-custom-display-conditions="[^"]*"/);
392
- let r = a ? t.replace(a[0], e) : t;
393
- return r = r.replace(
433
+ const e = "__ESD_DISPLAY_CONDITIONS_PLACEHOLDER__", i = t.match(/esd-custom-display-conditions="[^"]*"/);
434
+ let o = i ? t.replace(i[0], e) : t;
435
+ return o = o.replace(
394
436
  /\{%\s*if\s+(ins_apr|browsed_item|purchased_item)_total_product_kind\s*(&gt;|>)\s*\d+\s*%\}/g,
395
437
  ""
396
- ), r = r.replace(
438
+ ), o = o.replace(
397
439
  /\{%\s*if\s+(ins_apr|browsed_item|purchased_item)_price_\d+\s*(!&#61;|!=)\s*\1_originalprice_\d+\s*%\}/g,
398
440
  ""
399
- ), r = r.replace(/\{%\s*endif\s*%\}/g, ""), a && (r = r.replace(e, a[0])), r = r.replace(/\n\s*\n\s*\n/g, `
441
+ ), o = o.replace(/\{%\s*endif\s*%\}/g, ""), i && (o = o.replace(e, i[0])), o = o.replace(/\n\s*\n\s*\n/g, `
400
442
 
401
- `), r;
443
+ `), o;
402
444
  }
403
445
  }
404
- function X(n) {
405
- return new z().migrate(n);
446
+ function nt(r) {
447
+ return new K().migrate(r);
406
448
  }
407
449
  export {
408
- X as migrateItemsBlock
450
+ nt as migrateItemsBlock
409
451
  };
@@ -1,4 +1,4 @@
1
- const o = "3.27.0-beta.aac4d38", s = { stripo: { version: "2.86.1" } }, a = {
1
+ const o = "3.27.0-beta.aadc015", s = { stripo: { version: "2.83.1" } }, a = {
2
2
  version: o,
3
3
  guido: s
4
4
  };
@@ -1,9 +1,9 @@
1
- const s = "2.86.1", n = ["UIEditor.js", "zone.js", "styles-BWH3PMR4.css", "polyfills-FF3RLU5F.js", "main-QEKXZ3YR.js", "chunk-5T7CEBI5.js", "chunk-62K3AMOD.js", "chunk-66LFOY5U.js", "chunk-AMCKJHBC.js", "chunk-BOERNIOQ.js", "chunk-BVZUBVXH.js", "chunk-I2DLD5I4.js", "chunk-IEC5XOV2.js", "chunk-ILRQX7FO.js", "chunk-LBYVYY25.js", "chunk-LC3XAPU2.js", "chunk-OZSNTS6D.js", "chunk-PBUSX63H.js", "chunk-PYISBD2D.js", "assets/css/uiEditor.css", "assets/i18n/en.json", "assets/icons/ui-editor-icons.sprite.svg", "assets/icons/ui-editor-icons.map.json", "assets/imageeditor/scripts.min.js", "assets/imageeditor/assets/icons/merged.svg"], c = {
1
+ const s = "2.83.1", n = ["UIEditor.js", "zone.js", "styles-BWH3PMR4.css", "polyfills-FF3RLU5F.js", "main-OTN2PYRT.js", "chunk-62K3AMOD.js", "chunk-6RGJBGUG.js", "chunk-6W43DTQG.js", "chunk-EC4WGEOZ.js", "chunk-GLBBUJ54.js", "chunk-GPJLJCMF.js", "chunk-MDCDEJUH.js", "chunk-P7HQTFJV.js", "chunk-PA4WGBC4.js", "chunk-QMDAV6OU.js", "chunk-R2F3ADM2.js", "chunk-YSKQ2TWF.js", "chunk-ZU5ASRKR.js", "assets/css/uiEditor.css", "assets/i18n/en.json", "assets/icons/ui-editor-icons.sprite.svg", "assets/icons/ui-editor-icons.map.json", "assets/imageeditor/scripts.min.js", "assets/imageeditor/assets/icons/merged.svg"], i = {
2
2
  version: s,
3
3
  files: n
4
4
  };
5
5
  export {
6
- c as default,
6
+ i as default,
7
7
  n as files,
8
8
  s as version
9
9
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@useinsider/guido",
3
- "version": "3.27.0-beta.aac4d38",
3
+ "version": "3.27.0-beta.aadc015",
4
4
  "description": "Guido is a Vue + TypeScript wrapper for Email Plugin. Easily embed the email editor in your Vue applications.",
5
5
  "main": "./dist/guido.umd.cjs",
6
6
  "module": "./dist/library.js",
@@ -136,7 +136,7 @@
136
136
  },
137
137
  "guido": {
138
138
  "stripo": {
139
- "version": "2.86.1"
139
+ "version": "2.83.1"
140
140
  }
141
141
  }
142
142
  }