@useinsider/guido 3.18.1-beta.178a3ec → 3.18.1-beta.20bdab6

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,11 +1,11 @@
1
1
  var v = Object.defineProperty;
2
- var B = (a, t, e) => t in a ? v(a, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : a[t] = e;
3
- var P = (a, t, e) => B(a, typeof t != "symbol" ? t + "" : t, e);
4
- import { BLOCK_ID as U } from "../../extensions/Blocks/Items/block.js";
5
- import { productPairs as F } from "../../extensions/Blocks/Items/enums/productEnums.js";
6
- import { ItemInCartOptions as I, DefaultConfigValues as S, SETTINGS_ENUMS as p } from "../../extensions/Blocks/Items/enums/settingsEnums.js";
7
- import { getDefaultTemplate as K } from "../../extensions/Blocks/Items/template.js";
8
- import { useTemplateStore as O } from "../../stores/template.js";
2
+ var U = (o, t, r) => t in o ? v(o, t, { enumerable: !0, configurable: !0, writable: !0, value: r }) : o[t] = r;
3
+ var M = (o, t, r) => U(o, typeof t != "symbol" ? t + "" : t, r);
4
+ import { BLOCK_ID as w } from "../../extensions/Blocks/Items/block.js";
5
+ import { productPairs as K } from "../../extensions/Blocks/Items/enums/productEnums.js";
6
+ import { ItemInCartOptions as I, DefaultConfigValues as g, SETTINGS_ENUMS as p } from "../../extensions/Blocks/Items/enums/settingsEnums.js";
7
+ import { getDefaultTemplate as F } from "../../extensions/Blocks/Items/template.js";
8
+ import { useTemplateStore as q } from "../../stores/template.js";
9
9
  const x = {
10
10
  img: {
11
11
  pairsKey: "imageSrc",
@@ -73,129 +73,126 @@ const x = {
73
73
  isArray: !1
74
74
  }
75
75
  };
76
- function $() {
76
+ function O() {
77
77
  return String(Date.now() + Math.floor(Math.random() * 1e3));
78
78
  }
79
- function R(a) {
80
- return a ? {
79
+ function k(o) {
80
+ return o ? {
81
81
  CartItems: p.ITEMS_TYPE.CART_ITEMS,
82
82
  BrowsedItems: p.ITEMS_TYPE.BROWSED_ITEMS,
83
83
  PurchasedItems: p.ITEMS_TYPE.PURCHASED_ITEMS,
84
84
  CART_ITEMS: p.ITEMS_TYPE.CART_ITEMS,
85
85
  BROWSED_ITEMS: p.ITEMS_TYPE.BROWSED_ITEMS,
86
86
  PURCHASED_ITEMS: p.ITEMS_TYPE.PURCHASED_ITEMS
87
- }[a] || p.ITEMS_TYPE.CART_ITEMS : p.ITEMS_TYPE.CART_ITEMS;
87
+ }[o] || p.ITEMS_TYPE.CART_ITEMS : p.ITEMS_TYPE.CART_ITEMS;
88
88
  }
89
- function V(a) {
90
- return a.classList.contains("esd-browsed-items-block") ? p.ITEMS_TYPE.BROWSED_ITEMS : a.classList.contains("esd-purchased-items-block") ? p.ITEMS_TYPE.PURCHASED_ITEMS : p.ITEMS_TYPE.CART_ITEMS;
91
- }
92
- function M(a) {
93
- var r;
94
- const t = (s, c) => s == null ? c : s === "1" || s === "true", e = (s, c) => s || c, n = a["data-type"] || a["data-source"], o = R(n), i = I[o];
95
- let l = a["data-cart_items_select_control_value"] || ((r = i == null ? void 0 : i[0]) == null ? void 0 : r.value) || S.cartItemsSelectControlValue;
96
- if (l && !l.includes("{{") && /^\d+$/.test(l)) {
97
- const s = parseInt(l) - 1, c = I[o];
98
- c && c[s] && (l = c[s].value);
89
+ function h(o) {
90
+ var e;
91
+ const t = (l, u) => l == null ? u : l === "1" || l === "true", r = (l, u) => l || u, c = o["data-type"] || o["data-source"], a = k(c), i = I[a];
92
+ let n = o["data-cart_items_select_control_value"] || ((e = i == null ? void 0 : i[0]) == null ? void 0 : e.value) || g.cartItemsSelectControlValue;
93
+ if (n && !n.includes("{{") && /^\d+$/.test(n)) {
94
+ const l = parseInt(n) - 1, u = I[a];
95
+ u && u[l] && (n = u[l].value);
99
96
  }
100
97
  return {
101
98
  initialized: !0,
102
- blockInstanceId: e(a["data-block-instance-id"], $()),
103
- source: o,
104
- type: o,
105
- itemsSelectValue: l,
106
- orientation: a["data-card_orientation_control_value"] || p.ORIENTATION.VERTICAL,
107
- nameTrimming: t(a["data-product_name_control_trim"], !0),
108
- priceHideDiscount: t(a["data-product_price_control_nodup"], !0),
109
- priceFormatted: t(a["data-product_price_control_formated"], !0),
110
- priceSinglePrice: t(a["data-product_price_control_single_price"], !1),
111
- priceCurrencySymbol: e(
112
- a["data-product_price_control_currency_symbol"],
113
- S.productPriceCurrencySymbolControlValue
99
+ blockInstanceId: r(o["data-block-instance-id"], O()),
100
+ source: a,
101
+ type: a,
102
+ itemsSelectValue: n,
103
+ orientation: o["data-card_orientation_control_value"] || p.ORIENTATION.VERTICAL,
104
+ nameTrimming: t(o["data-product_name_control_trim"], !0),
105
+ priceHideDiscount: t(o["data-product_price_control_nodup"], !0),
106
+ priceFormatted: t(o["data-product_price_control_formated"], !0),
107
+ priceSinglePrice: t(o["data-product_price_control_single_price"], !1),
108
+ priceCurrencySymbol: r(
109
+ o["data-product_price_control_currency_symbol"],
110
+ g.productPriceCurrencySymbolControlValue
114
111
  ),
115
- priceCurrencyLocation: e(
116
- a["data-product_price_currency_location"],
117
- S.productPriceCurrencyLocationControlValue
112
+ priceCurrencyLocation: r(
113
+ o["data-product_price_currency_location"],
114
+ g.productPriceCurrencyLocationControlValue
118
115
  ),
119
- priceOrientation: a["data-product_original_price_control_orientation"] || "horizontal",
120
- quantityControlEnabled: t(a["data-product_quantity_control_enabled"], !0),
121
- buttonLink: e(a["data-product_button_link"], S.productButtonLinkControlValue),
122
- imageLink: e(a["data-product_image_link"], S.productImageLinkControlValue),
123
- buttonLabel: e(a["data-product_button_control_label"], "Buy"),
124
- buttonFullWidth: t(a["data-product_button_control_atw"], !0),
125
- imageVisible: t(a["data-product_image_control_enabled"], !0),
126
- nameVisible: t(a["data-product_name_control_enabled"], !0),
127
- quantityVisible: t(a["data-product_quantity_control_enabled"], !0),
128
- priceVisible: t(a["data-product_price_control_enabled"], !0),
129
- originalPriceVisible: t(a["data-product_original_price_control_enabled"], !0),
130
- buttonVisible: t(a["data-product_button_control_enabled"], !0)
116
+ priceOrientation: o["data-product_original_price_control_orientation"] || "horizontal",
117
+ quantityControlEnabled: t(o["data-product_quantity_control_enabled"], !0),
118
+ buttonLink: r(o["data-product_button_link"], g.productButtonLinkControlValue),
119
+ imageLink: r(o["data-product_image_link"], g.productImageLinkControlValue),
120
+ buttonLabel: r(o["data-product_button_control_label"], "Buy"),
121
+ buttonFullWidth: t(o["data-product_button_control_atw"], !0),
122
+ imageVisible: t(o["data-product_image_control_enabled"], !0),
123
+ nameVisible: t(o["data-product_name_control_enabled"], !0),
124
+ quantityVisible: t(o["data-product_quantity_control_enabled"], !0),
125
+ priceVisible: t(o["data-product_price_control_enabled"], !0),
126
+ originalPriceVisible: t(o["data-product_original_price_control_enabled"], !0),
127
+ buttonVisible: t(o["data-product_button_control_enabled"], !0)
131
128
  };
132
129
  }
133
- const H = {
130
+ const V = {
134
131
  ins_apr: "CART_ITEMS",
135
132
  browsed_item: "BROWSED_ITEMS",
136
133
  purchased_item: "PURCHASED_ITEMS"
137
134
  };
138
- function N(a, t) {
139
- const e = {
135
+ function $(o, t) {
136
+ const r = {
140
137
  CART_ITEMS: `{{Abandoned Cart Item (${t}) Image}}`,
141
138
  BROWSED_ITEMS: `{{Browsed Item (${t}) Image}}`,
142
139
  PURCHASED_ITEMS: `{{Purchased Item (${t}) Image}}`
143
140
  };
144
- return e[a] || e.CART_ITEMS;
141
+ return r[o] || r.CART_ITEMS;
145
142
  }
146
- function z(a, t) {
147
- const e = {
143
+ function N(o, t) {
144
+ const r = {
148
145
  CART_ITEMS: `{{Abandoned Cart Item (${t}) Url}}`,
149
146
  BROWSED_ITEMS: `{{Browsed Item (${t}) Url}}`,
150
147
  PURCHASED_ITEMS: `{{Purchased Item (${t}) Url}}`
151
148
  };
152
- return e[a] || e.CART_ITEMS;
149
+ return r[o] || r.CART_ITEMS;
153
150
  }
154
- class Y {
151
+ class H {
155
152
  constructor() {
156
- P(this, "parser");
153
+ M(this, "parser");
157
154
  this.parser = new DOMParser();
158
155
  }
159
156
  migrate(t) {
160
157
  try {
161
158
  if (!this.containsItemsBlock(t))
162
159
  return this.backfillV2ProductTdAttributes(t);
163
- let e = this.removeJinjaConditionals(t);
164
- e = this.replaceTemplateVariables(e);
165
- const n = this.parser.parseFromString(e, "text/html"), o = n.querySelectorAll(
160
+ let r = this.removeJinjaConditionals(t);
161
+ r = this.replaceTemplateVariables(r);
162
+ const c = this.parser.parseFromString(r, "text/html"), a = c.querySelectorAll(
166
163
  "td.esd-cart-items-block, td.esd-browsed-items-block, td.esd-purchased-items-block"
167
164
  );
168
- return O().$patch((l) => {
169
- l.migrations = { ...l.migrations, [U]: o.length };
170
- }), o.length === 0 ? (console.warn("ItemsBlockMigrator: No blocks found with items block selectors"), e) : (o.forEach((l) => {
171
- const r = this.extractConfiguration(l), s = K({
172
- orientation: r.orientation,
173
- itemsType: r.itemsType,
174
- itemId: r.itemId,
175
- currencySymbol: r.currencySymbol,
176
- currencyLocation: r.currencyLocation,
177
- formattedPrice: r.formattedPrice,
178
- configBlockAttributes: r.configBlockAttributes,
165
+ return q().$patch((n) => {
166
+ n.migrations = { ...n.migrations, [w]: a.length };
167
+ }), a.length === 0 ? (console.warn("ItemsBlockMigrator: No blocks found with items block selectors"), r) : (a.forEach((n) => {
168
+ const e = this.extractConfiguration(n), l = F({
169
+ orientation: e.orientation,
170
+ itemsType: e.itemsType,
171
+ itemId: e.itemId,
172
+ currencySymbol: e.currencySymbol,
173
+ currencyLocation: e.currencyLocation,
174
+ formattedPrice: e.formattedPrice,
175
+ configBlockAttributes: e.configBlockAttributes,
179
176
  migrate: !0,
180
- nameStyles: r.nameStyles,
181
- buttonStyles: r.buttonStyles,
182
- priceStyles: r.priceStyles,
183
- originalPriceStyles: r.originalPriceStyles,
184
- quantityStyles: r.quantityStyles,
185
- nodeConfig: M(r.configBlockAttributes)
186
- }), d = this.parser.parseFromString(
187
- `<table><tbody><tr>${s}</tr></tbody></table>`,
177
+ nameStyles: e.nameStyles,
178
+ buttonStyles: e.buttonStyles,
179
+ priceStyles: e.priceStyles,
180
+ originalPriceStyles: e.originalPriceStyles,
181
+ quantityStyles: e.quantityStyles,
182
+ nodeConfig: h(e.configBlockAttributes)
183
+ }), s = this.parser.parseFromString(
184
+ `<table><tbody><tr>${l}</tr></tbody></table>`,
188
185
  "text/html"
189
186
  ).querySelector("td");
190
- if (d && l.parentNode) {
191
- const _ = M(r.configBlockAttributes);
192
- d.setAttribute("esd-ext-config", JSON.stringify(_)), d.setAttribute("data-type", _.type);
193
- const u = d.querySelector("esd-config-block");
194
- u && u.remove(), l.parentNode.replaceChild(d, l);
187
+ if (s && n.parentNode) {
188
+ const _ = h(e.configBlockAttributes);
189
+ s.setAttribute("esd-ext-config", JSON.stringify(_)), s.setAttribute("data-type", _.type);
190
+ const d = s.querySelector("esd-config-block");
191
+ d && d.remove(), n.parentNode.replaceChild(s, n);
195
192
  }
196
- }), n.documentElement.outerHTML);
197
- } catch (e) {
198
- return console.error("ItemsBlockMigrator failed:", e), t;
193
+ }), c.documentElement.outerHTML);
194
+ } catch (r) {
195
+ return console.error("ItemsBlockMigrator failed:", r), t;
199
196
  }
200
197
  }
201
198
  /**
@@ -205,85 +202,28 @@ class Y {
205
202
  * - UI styles from product elements (name, price, button, quantity, etc.)
206
203
  */
207
204
  extractConfiguration(t) {
208
- var D;
209
- const e = R(
210
- this.readSelfOrDescendantAttribute(t, "data-type") || V(t)
211
- ), n = this.readSelfOrDescendantAttribute(t, "data-number") || "1", o = parseInt(n) - 1, i = I[e], l = ((D = i == null ? void 0 : i[o]) == null ? void 0 : D.value) || i[0].value, r = this.extractConfigBlockAttributes(t, e, n);
212
- this.applyDomFallbacks(t, r);
213
- const s = t.querySelector('[product-attr="price"]'), c = s ?? t.querySelector('[product-attr="originalPrice"]'), d = (c == null ? void 0 : c.getAttribute("data-currency_symbol")) || r["data-product_price_control_currency_symbol"], _ = c == null ? void 0 : c.getAttribute("data-curency");
214
- let u = r["data-product_price_currency_location"] || "0";
215
- _ && (u = _ === "after" ? "1" : "0"), r["data-product_price_currency_location"] = u, r["data-product_price_control_currency_symbol"] = d;
216
- const A = (c == null ? void 0 : c.getAttribute("data-formated")) ?? r["data-product_price_control_formated"], C = A !== "false" && A !== "0", m = r["data-card_orientation_control_value"];
217
- let g;
218
- m ? g = m === "horizontal" ? "horizontal" : "vertical" : g = t.querySelector('[colspan="2"]') !== null ? "vertical" : "horizontal";
219
- const y = t.querySelector('a[product-attr="name"]'), b = (y == null ? void 0 : y.getAttribute("style")) || void 0, E = t.querySelector('a[product-attr="button"]') ?? t.querySelector('[product-attr="button"]'), L = (E == null ? void 0 : E.getAttribute("style")) || void 0, w = (s == null ? void 0 : s.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, k = (T == null ? void 0 : T.getAttribute("style")) || void 0, h = t.querySelector('[product-attr="quantity"]'), q = (h == null ? void 0 : h.getAttribute("style")) || void 0;
205
+ var C, D, P;
206
+ const r = k(
207
+ ((C = t.querySelector("[data-type]")) == null ? void 0 : C.getAttribute("data-type")) ?? null
208
+ ), c = ((D = t.querySelector("[data-number]")) == null ? void 0 : D.getAttribute("data-number")) || "1", a = parseInt(c) - 1, i = I[r], n = ((P = i == null ? void 0 : i[a]) == null ? void 0 : P.value) || i[0].value, e = t.querySelector('[product-attr="price"]'), l = (e == null ? void 0 : e.getAttribute("data-currency_symbol")) || "USD", s = ((e == null ? void 0 : e.getAttribute("data-curency")) || "before") === "after" ? "1" : "0", _ = (e == null ? void 0 : e.getAttribute("data-formated")) !== "false", d = this.extractConfigBlockAttributes(t, r, c), b = d["data-card_orientation_control_value"];
209
+ let S;
210
+ b ? S = b === "horizontal" ? "horizontal" : "vertical" : S = t.querySelector('[colspan="2"]') !== null ? "vertical" : "horizontal";
211
+ const y = t.querySelector('a[product-attr="name"]'), A = (y == null ? void 0 : y.getAttribute("style")) || void 0, f = t.querySelector('a[product-attr="button"]'), m = (f == null ? void 0 : f.getAttribute("style")) || void 0, R = (e == null ? void 0 : e.getAttribute("style")) || void 0, E = t.querySelector("p.original-price"), L = (E == null ? void 0 : E.getAttribute("style")) || void 0, T = t.querySelector('[product-attr="quantity"]'), B = (T == null ? void 0 : T.getAttribute("style")) || void 0;
220
212
  return {
221
- orientation: g,
222
- itemsType: e,
223
- itemId: l,
224
- currencySymbol: d,
225
- currencyLocation: u,
226
- formattedPrice: C,
227
- configBlockAttributes: r,
228
- nameStyles: b,
229
- buttonStyles: L,
230
- priceStyles: w,
231
- originalPriceStyles: k,
232
- quantityStyles: q
213
+ orientation: S,
214
+ itemsType: r,
215
+ itemId: n,
216
+ currencySymbol: l,
217
+ currencyLocation: s,
218
+ formattedPrice: _,
219
+ configBlockAttributes: d,
220
+ nameStyles: A,
221
+ buttonStyles: m,
222
+ priceStyles: R,
223
+ originalPriceStyles: L,
224
+ quantityStyles: B
233
225
  };
234
226
  }
235
- /**
236
- * DOM fallback for hand-edited templates whose esd-config-block was deleted. With no
237
- * toggle record left, derive each field's enabled state from whether its product-attr
238
- * element still exists and read the button label from the live caption — a deleted
239
- * element means the field is off, not an all-ON default. A present config block stays
240
- * authoritative (a missing flag there still means "default on"), so we no-op for it.
241
- */
242
- applyDomFallbacks(t, e) {
243
- var c;
244
- const n = t.querySelector("esd-config-block");
245
- if (Object.entries({
246
- image: '[product-attr="imageSrc"]',
247
- name: '[product-attr="name"]',
248
- price: '[product-attr="price"]',
249
- original_price: '[product-attr="originalPrice"], p.original-price',
250
- quantity: '[product-attr="quantity"]',
251
- button: '[product-attr="button"]'
252
- }).forEach(([d, _]) => {
253
- const u = `data-product_${d}_control_enabled`;
254
- (!n || !n.hasAttribute(u)) && (e[u] = t.querySelector(_) ? "true" : "false");
255
- }), n)
256
- return;
257
- e["data-card_orientation_control_value"] = t.querySelector('[colspan="2"]') ? "vertical" : "horizontal";
258
- const i = t.querySelector('a[product-attr="button"]') ?? t.querySelector('[product-attr="button"]'), l = (c = i == null ? void 0 : i.textContent) == null ? void 0 : c.replace(/\s+/g, " ").trim();
259
- l && (e["data-product_button_control_label"] = l), /display:\s*inline/.test((i == null ? void 0 : i.getAttribute("style")) || "") && (e["data-product_button_control_atw"] = "false");
260
- const r = t.querySelector('[product-attr="imageSrc"]'), s = r ? this.readImageDimension(r) : null;
261
- s && (e["data-product_image_control_image-height"] = s, e["data-product_image_control_image-width"] = s);
262
- }
263
- /**
264
- * Reads an attribute from the block element itself before falling back to a descendant.
265
- * Real legacy markup carries data-type/data-number on the `.ins-product-td` AND on the
266
- * esd-config-block; when an author deletes the config block only the td's copy survives.
267
- */
268
- readSelfOrDescendantAttribute(t, e) {
269
- var n;
270
- return t.getAttribute(e) || ((n = t.querySelector(`[${e}]`)) == null ? void 0 : n.getAttribute(e)) || null;
271
- }
272
- /**
273
- * Reads a pixel dimension for the product image from its DOM element — the legacy
274
- * `width` attribute first, then a px value in the inline style. An explicit `width` wins
275
- * over `max-width`, which is only an upper bound; `max-width` still covers the common
276
- * `width: 100%` case, where no pixel size can be read from `width` itself.
277
- * Returns null when no pixel size is present.
278
- */
279
- readImageDimension(t) {
280
- var i;
281
- const e = (i = t.getAttribute("width")) == null ? void 0 : i.trim();
282
- if (e && /^\d+$/.test(e))
283
- return e;
284
- const n = t.getAttribute("style") || "", o = n.match(/(?:^|;)\s*width:\s*(\d+)px/) || n.match(/max-width:\s*(\d+)px/);
285
- return o ? o[1] : null;
286
- }
287
227
  /**
288
228
  * Extracts all data-* attributes from the esd-config-block element
289
229
  * Returns a key-value mapping of all configuration attributes
@@ -291,27 +231,27 @@ class Y {
291
231
  * @param itemsType - The type of items (CART_ITEMS, BROWSED_ITEMS, PURCHASED_ITEMS)
292
232
  * @param itemNumber - The item number (1-based index)
293
233
  */
294
- extractConfigBlockAttributes(t, e, n) {
295
- const o = t.querySelector("esd-config-block"), i = {};
296
- if (o) {
297
- if (Array.from(o.attributes).forEach((r) => {
298
- r.name.startsWith("data-") && (i[r.name] = r.value);
299
- }), i["data-cart_items_select_control_value"]) {
300
- const r = i["data-cart_items_select_control_value"];
301
- if (/^\d+$/.test(r)) {
302
- const s = parseInt(r) - 1, c = I[e];
303
- c && c[s] && (i["data-cart_items_select_control_value"] = c[s].value);
304
- }
305
- }
306
- if (i["data-product_price_control_curency"]) {
307
- const r = i["data-product_price_control_curency"];
308
- let s = r;
309
- r === "before" ? s = "0" : r === "after" && (s = "1"), i["data-product_price_control_curency"] = s, i["data-product_price_currency_location"] = s;
234
+ extractConfigBlockAttributes(t, r, c) {
235
+ const a = t.querySelector("esd-config-block"), i = {};
236
+ if (!a)
237
+ return this.getDefaultConfigBlockAttributes();
238
+ if (Array.from(a.attributes).forEach((e) => {
239
+ e.name.startsWith("data-") && (i[e.name] = e.value);
240
+ }), i["data-cart_items_select_control_value"]) {
241
+ const e = i["data-cart_items_select_control_value"];
242
+ if (/^\d+$/.test(e)) {
243
+ const l = parseInt(e) - 1, u = I[r];
244
+ u && u[l] && (i["data-cart_items_select_control_value"] = u[l].value);
310
245
  }
311
- (!i["data-product_price_control_currency_symbol"] || i["data-product_price_control_currency_symbol"].trim() === "") && (i["data-product_price_control_currency_symbol"] = "USD");
312
246
  }
313
- const l = { ...this.getDefaultConfigBlockAttributes(), ...i };
314
- return l["data-type"] = e, l["data-source"] = e, l["data-product_image_link"] = N(e, n), l["data-product_button_link"] = z(e, n), l;
247
+ if (i["data-product_price_control_curency"]) {
248
+ const e = i["data-product_price_control_curency"];
249
+ let l = e;
250
+ e === "before" ? l = "0" : e === "after" && (l = "1"), i["data-product_price_control_curency"] = l, i["data-product_price_currency_location"] = l;
251
+ }
252
+ (!i["data-product_price_control_currency_symbol"] || i["data-product_price_control_currency_symbol"].trim() === "") && (i["data-product_price_control_currency_symbol"] = "USD");
253
+ const n = { ...this.getDefaultConfigBlockAttributes(), ...i };
254
+ return n["data-type"] = r, n["data-source"] = r, n["data-product_image_link"] = $(r, c), n["data-product_button_link"] = N(r, c), n;
315
255
  }
316
256
  /**
317
257
  * Returns default esd-config-block attributes based on the old template structure
@@ -385,27 +325,25 @@ class Y {
385
325
  backfillV2ProductTdAttributes(t) {
386
326
  if (!t.includes("ins-product-td") || !t.includes("esd-ext-config"))
387
327
  return t;
388
- const e = this.parser.parseFromString(t, "text/html");
389
- let n = !1;
390
- return e.querySelectorAll(".ins-product-td").forEach((o) => {
391
- o.hasAttribute("width") && (o.removeAttribute("width"), n = !0), o.classList.contains("esd-container-frame") && (o.classList.remove("esd-container-frame"), n = !0);
392
- const i = o.querySelector("table.ins-product-wrapper");
393
- i != null && i.hasAttribute("width") && i.getAttribute("width") !== "100%" && (i.setAttribute("width", "100%"), n = !0);
394
- const l = o.getAttribute("esd-ext-config");
395
- let r = null;
328
+ const r = this.parser.parseFromString(t, "text/html");
329
+ let c = !1;
330
+ return r.querySelectorAll(".ins-product-td").forEach((a) => {
331
+ a.hasAttribute("width") && (a.removeAttribute("width"), c = !0);
332
+ const i = a.getAttribute("esd-ext-config");
333
+ let n = null;
396
334
  try {
397
- r = l ? JSON.parse(l) : null;
335
+ n = i ? JSON.parse(i) : null;
398
336
  } catch {
399
337
  }
400
- if (!r || (!o.getAttribute("data-nodup") && typeof r.priceHideDiscount == "boolean" && (o.setAttribute("data-nodup", String(r.priceHideDiscount)), n = !0), o.getAttribute("data-type")))
338
+ if (!n || (!a.getAttribute("data-nodup") && typeof n.priceHideDiscount == "boolean" && (a.setAttribute("data-nodup", String(n.priceHideDiscount)), c = !0), a.getAttribute("data-type")))
401
339
  return;
402
- const s = r.type || r.source;
403
- if (!s)
340
+ const e = n.type || n.source;
341
+ if (!e)
404
342
  return;
405
- o.setAttribute("data-type", s), n = !0;
406
- const c = typeof r.itemsSelectValue == "string" ? r.itemsSelectValue.match(/\((\d+)\)/) : null;
407
- c && o.getAttribute("data-number") !== c[1] && o.setAttribute("data-number", c[1]);
408
- }), n ? e.documentElement.outerHTML : t;
343
+ a.setAttribute("data-type", e), c = !0;
344
+ const l = typeof n.itemsSelectValue == "string" ? n.itemsSelectValue.match(/\((\d+)\)/) : null;
345
+ l && a.getAttribute("data-number") !== l[1] && a.setAttribute("data-number", l[1]);
346
+ }), c ? r.documentElement.outerHTML : t;
409
347
  }
410
348
  /**
411
349
  * Fast check for the presence of any items block (cart / browsed / purchased)
@@ -426,17 +364,17 @@ class Y {
426
364
  * contains display condition Jinja scripts that should NOT be removed.
427
365
  */
428
366
  removeJinjaConditionals(t) {
429
- const e = "__ESD_DISPLAY_CONDITIONS_PLACEHOLDER__", n = t.match(/esd-custom-display-conditions="[^"]*"/);
430
- let o = n ? t.replace(n[0], e) : t;
431
- return o = o.replace(
367
+ const r = "__ESD_DISPLAY_CONDITIONS_PLACEHOLDER__", c = t.match(/esd-custom-display-conditions="[^"]*"/);
368
+ let a = c ? t.replace(c[0], r) : t;
369
+ return a = a.replace(
432
370
  /\{%\s*if\s+(ins_apr|browsed_item|purchased_item)_total_product_kind\s*(&gt;|>)\s*\d+\s*%\}/g,
433
371
  ""
434
- ), o = o.replace(
372
+ ), a = a.replace(
435
373
  /\{%\s*if\s+(ins_apr|browsed_item|purchased_item)_price_\d+\s*(!&#61;|!=)\s*\1_originalprice_\d+\s*%\}/g,
436
374
  ""
437
- ), o = o.replace(/\{%\s*endif\s*%\}/g, ""), n && (o = o.replace(e, n[0])), o = o.replace(/\n\s*\n\s*\n/g, `
375
+ ), a = a.replace(/\{%\s*endif\s*%\}/g, ""), c && (a = a.replace(r, c[0])), a = a.replace(/\n\s*\n\s*\n/g, `
438
376
 
439
- `), o;
377
+ `), a;
440
378
  }
441
379
  /**
442
380
  * Replaces template variables with default values from productPairs
@@ -448,32 +386,32 @@ class Y {
448
386
  * - {{purchased_item_formattedprice_5}} → '1,490.49' (PURCHASED_ITEMS)
449
387
  */
450
388
  replaceTemplateVariables(t) {
451
- const { PAIRS_FOR_EXTENSION: e } = F;
452
- return t.replace(/{{([^}]+)}}/g, (n, o) => {
453
- const i = o.match(/^(ins_apr|browsed_item|purchased_item)_([a-z_]+)_(\d+)$/);
389
+ const { PAIRS_FOR_EXTENSION: r } = K;
390
+ return t.replace(/{{([^}]+)}}/g, (c, a) => {
391
+ const i = a.match(/^(ins_apr|browsed_item|purchased_item)_([a-z_]+)_(\d+)$/);
454
392
  if (!i)
455
- return n;
456
- const [, l, r, s] = i, c = H[l];
457
- if (!c)
458
- return console.warn(`Unknown variable prefix: ${l}`), n;
459
- const d = x[r];
460
- if (!d)
461
- return console.warn(`Unknown variable suffix mapping for: ${r}`), n;
462
- const { pairsKey: _, defaultKey: u, isArray: A } = d, m = e[_][c];
463
- if (!m)
464
- return console.warn(`No data found for: ${_}.${c}`), n;
465
- if (A) {
466
- const y = parseInt(s) - 1, b = m[u];
467
- return Array.isArray(b) && b[y] ? b[y] : (console.warn(`Array value not found: ${_}.${c}.${u}[${y}]`), n);
393
+ return c;
394
+ const [, n, e, l] = i, u = V[n];
395
+ if (!u)
396
+ return console.warn(`Unknown variable prefix: ${n}`), c;
397
+ const s = x[e];
398
+ if (!s)
399
+ return console.warn(`Unknown variable suffix mapping for: ${e}`), c;
400
+ const { pairsKey: _, defaultKey: d, isArray: b } = s, y = r[_][u];
401
+ if (!y)
402
+ return console.warn(`No data found for: ${_}.${u}`), c;
403
+ if (b) {
404
+ const f = parseInt(l) - 1, m = y[d];
405
+ return Array.isArray(m) && m[f] ? m[f] : (console.warn(`Array value not found: ${_}.${u}.${d}[${f}]`), c);
468
406
  }
469
- const g = m[u];
470
- return g !== void 0 ? String(g) : (console.warn(`Default value not found: ${_}.${c}.${u}`), n);
407
+ const A = y[d];
408
+ return A !== void 0 ? String(A) : (console.warn(`Default value not found: ${_}.${u}.${d}`), c);
471
409
  });
472
410
  }
473
411
  }
474
- function tt(a) {
475
- return new Y().migrate(a);
412
+ function Q(o) {
413
+ return new H().migrate(o);
476
414
  }
477
415
  export {
478
- tt as migrateItemsBlock
416
+ Q as migrateItemsBlock
479
417
  };
@@ -1,15 +1,14 @@
1
- import { ModificationDescription as d, UIElementType as s, UEAttr as p } from "../../../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
2
- import { CommonControl as T } from "../../../common-control.js";
3
- import { nameMaxWidthFor as h } from "../../constants/cardLayout.js";
1
+ import { ModificationDescription as l, UIElementType as s, UEAttr as d } from "../../../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
2
+ import { CommonControl as p } from "../../../common-control.js";
4
3
  import { ItemsBlockControlId as a } from "../../enums/controlEnums.js";
5
- import { findNameTextNode as c } from "../../utils/nameNode.js";
6
- import { getItemsBlockConfig as r, setItemsBlockConfig as g } from "../../utils/nodeConfigUtils.js";
7
- const I = a.NAME_TRIMMING, n = {
4
+ import { findNameTextNode as T } from "../../utils/nameNode.js";
5
+ import { getItemsBlockConfig as r, setItemsBlockConfig as c } from "../../utils/nodeConfigUtils.js";
6
+ const g = a.NAME_TRIMMING, i = {
8
7
  TRIMMING: "trimming"
9
8
  };
10
- class E extends T {
9
+ class y extends p {
11
10
  getId() {
12
- return I;
11
+ return g;
13
12
  }
14
13
  getTemplate() {
15
14
  return `
@@ -20,39 +19,39 @@ class E extends T {
20
19
  }
21
20
  onRender() {
22
21
  const e = r(this.currentNode);
23
- this.api.updateValues({ [n.TRIMMING]: (e == null ? void 0 : e.nameTrimming) ?? !0 }), this.api.onValueChanged(n.TRIMMING, (t) => {
22
+ this.api.updateValues({ [i.TRIMMING]: (e == null ? void 0 : e.nameTrimming) ?? !0 }), this.api.onValueChanged(i.TRIMMING, (t) => {
24
23
  this._onTrimmingChange(t);
25
24
  });
26
25
  }
27
26
  onTemplateNodeUpdated(e) {
28
27
  super.onTemplateNodeUpdated(e), this.handleBlockInstanceChange(() => {
29
28
  const t = r(this.currentNode);
30
- this.api.updateValues({ [n.TRIMMING]: (t == null ? void 0 : t.nameTrimming) ?? !0 });
29
+ this.api.updateValues({ [i.TRIMMING]: (t == null ? void 0 : t.nameTrimming) ?? !0 });
31
30
  });
32
31
  }
33
32
  _onTrimmingChange(e) {
34
- g(this.currentNode, this.api, { nameTrimming: e }), this.api.updateValues({ [n.TRIMMING]: e }), this._applyTrimmingStyles(e);
33
+ c(this.currentNode, this.api, { nameTrimming: e }), this.api.updateValues({ [i.TRIMMING]: e }), this._applyTrimmingStyles(e);
35
34
  }
36
35
  _applyTrimmingStyles(e) {
37
- const t = c(this.currentNode);
36
+ const t = T(this.currentNode);
38
37
  if (!t)
39
38
  return;
40
- const i = r(this.currentNode), m = e !== void 0 ? e : (i == null ? void 0 : i.nameTrimming) ?? !0, l = h(i == null ? void 0 : i.orientation), o = this.api.getDocumentModifier().modifyHtml(t);
41
- m ? o.setStyle("white-space", "nowrap").setStyle("overflow", "hidden").setStyle("text-overflow", "ellipsis") : o.removeStyle("white-space").removeStyle("overflow").removeStyle("text-overflow"), o.setStyle("max-width", l).apply(new d(`Text Trimming ${m ? "Enabled" : "Disabled"}`));
39
+ const n = r(this.currentNode), m = e !== void 0 ? e : (n == null ? void 0 : n.nameTrimming) ?? !0, o = this.api.getDocumentModifier().modifyHtml(t);
40
+ m ? o.setStyle("white-space", "nowrap").setStyle("overflow", "hidden").setStyle("text-overflow", "ellipsis") : o.removeStyle("white-space").removeStyle("overflow").removeStyle("text-overflow"), o.setStyle("max-width", "100%").apply(new l(`Text Trimming ${m ? "Enabled" : "Disabled"}`));
42
41
  }
43
42
  _getTextTrimming() {
44
43
  return `
45
44
  <div class="display-flex align-items-center justify-content-between">
46
45
  <${s.LABEL}
47
- ${p.LABEL.text}="${this.api.translate("Text Trimming")}"
46
+ ${d.LABEL.text}="${this.api.translate("Text Trimming")}"
48
47
  >
49
48
  </${s.LABEL}>
50
- ${this._GuToggle(n.TRIMMING)}
49
+ ${this._GuToggle(i.TRIMMING)}
51
50
  </div>
52
51
  `;
53
52
  }
54
53
  }
55
54
  export {
56
- I as CONTROL_BLOCK_ID,
57
- E as NameTrimmingControl
55
+ g as CONTROL_BLOCK_ID,
56
+ y as NameTrimmingControl
58
57
  };