@useinsider/guido 2.1.0-beta.c86710f → 2.1.0-beta.cfff05b

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/dist/components/organisms/header/EditorActions.vue.js +10 -8
  2. package/dist/components/organisms/header/EditorActions.vue2.js +40 -31
  3. package/dist/components/organisms/header/MigrationConfirmModal.vue.js +17 -0
  4. package/dist/components/organisms/header/MigrationConfirmModal.vue2.js +41 -0
  5. package/dist/components/organisms/unsubscribe/UnsubscribePageSelection.vue.js +1 -1
  6. package/dist/components/organisms/unsubscribe/UnsubscribePageSelection.vue2.js +19 -19
  7. package/dist/config/i18n/en/labels.json.js +8 -3
  8. package/dist/config/migrator/itemsBlockMigrator.js +133 -130
  9. package/dist/config/migrator/recommendationMigrator.js +42 -40
  10. package/dist/extensions/Blocks/Items/block.js +45 -25
  11. package/dist/extensions/Blocks/Items/iconsRegistry.js +6 -5
  12. package/dist/extensions/Blocks/Items/items.css.js +48 -0
  13. package/dist/extensions/Blocks/Recommendation/block.js +49 -29
  14. package/dist/extensions/Blocks/Recommendation/iconsRegistry.js +4 -3
  15. package/dist/extensions/Blocks/Recommendation/recommendation.css.js +48 -0
  16. package/dist/extensions/Blocks/Unsubscribe/block.js +29 -29
  17. package/dist/extensions/Blocks/Unsubscribe/control.js +12 -9
  18. package/dist/extensions/Blocks/Unsubscribe/elements/preview.js +13 -11
  19. package/dist/extensions/Blocks/Unsubscribe/styles.css.js +31 -1
  20. package/dist/extensions/Blocks/common-control.js +12 -4
  21. package/dist/extensions/Blocks/common-icons.js +39 -0
  22. package/dist/guido.css +1 -1
  23. package/dist/src/components/Guido.vue.d.ts +1 -1
  24. package/dist/src/components/organisms/header/EditorActions.vue.d.ts +1 -1
  25. package/dist/src/components/organisms/header/HeaderWrapper.vue.d.ts +1 -1
  26. package/dist/src/components/organisms/header/MigrationConfirmModal.vue.d.ts +6 -0
  27. package/dist/src/components/organisms/header/RightSlot.vue.d.ts +1 -1
  28. package/dist/src/components/wrappers/WpModal.vue.d.ts +2 -2
  29. package/dist/src/extensions/Blocks/Items/block.d.ts +1 -0
  30. package/dist/src/extensions/Blocks/Recommendation/block.d.ts +1 -0
  31. package/dist/src/extensions/Blocks/Unsubscribe/control.d.ts +1 -0
  32. package/dist/src/extensions/Blocks/common-control.d.ts +5 -0
  33. package/dist/src/extensions/Blocks/common-icons.d.ts +1 -0
  34. package/dist/src/stores/template.d.ts +3 -0
  35. package/dist/stores/template.js +9 -0
  36. package/dist/stores/unsubscribe.js +37 -34
  37. package/package.json +1 -1
@@ -1,10 +1,12 @@
1
1
  var B = Object.defineProperty;
2
- var U = (e, t, r) => t in e ? B(e, t, { enumerable: !0, configurable: !0, writable: !0, value: r }) : e[t] = r;
3
- var M = (e, t, r) => U(e, typeof t != "symbol" ? t + "" : t, r);
4
- import { productPairs as v } from "../../extensions/Blocks/Items/enums/productEnums.js";
5
- import { ItemInCartOptions as E, DefaultConfigValues as g, SETTINGS_ENUMS as u } from "../../extensions/Blocks/Items/enums/settingsEnums.js";
6
- import { getDefaultTemplate as K } from "../../extensions/Blocks/Items/template.js";
7
- const w = {
2
+ var v = (r, t, o) => t in r ? B(r, t, { enumerable: !0, configurable: !0, writable: !0, value: o }) : r[t] = o;
3
+ var M = (r, t, o) => v(r, typeof t != "symbol" ? t + "" : t, o);
4
+ import { BLOCK_ID as U } from "../../extensions/Blocks/Items/block.js";
5
+ import { productPairs as K } from "../../extensions/Blocks/Items/enums/productEnums.js";
6
+ import { ItemInCartOptions as T, DefaultConfigValues as g, SETTINGS_ENUMS as s } from "../../extensions/Blocks/Items/enums/settingsEnums.js";
7
+ import { getDefaultTemplate as w } from "../../extensions/Blocks/Items/template.js";
8
+ import { useTemplateStore as F } from "../../stores/template.js";
9
+ const q = {
8
10
  img: {
9
11
  pairsKey: "imageSrc",
10
12
  defaultKey: "DEFAULT",
@@ -71,121 +73,122 @@ const w = {
71
73
  isArray: !1
72
74
  }
73
75
  };
74
- function F() {
76
+ function O() {
75
77
  return String(Date.now() + Math.floor(Math.random() * 1e3));
76
78
  }
77
- function q(e) {
78
- return e ? {
79
- CartItems: u.ITEMS_TYPE.CART_ITEMS,
80
- BrowsedItems: u.ITEMS_TYPE.BROWSED_ITEMS,
81
- PurchasedItems: u.ITEMS_TYPE.PURCHASED_ITEMS,
82
- CART_ITEMS: u.ITEMS_TYPE.CART_ITEMS,
83
- BROWSED_ITEMS: u.ITEMS_TYPE.BROWSED_ITEMS,
84
- PURCHASED_ITEMS: u.ITEMS_TYPE.PURCHASED_ITEMS
85
- }[e] || u.ITEMS_TYPE.CART_ITEMS : u.ITEMS_TYPE.CART_ITEMS;
79
+ function $(r) {
80
+ return r ? {
81
+ CartItems: s.ITEMS_TYPE.CART_ITEMS,
82
+ BrowsedItems: s.ITEMS_TYPE.BROWSED_ITEMS,
83
+ PurchasedItems: s.ITEMS_TYPE.PURCHASED_ITEMS,
84
+ CART_ITEMS: s.ITEMS_TYPE.CART_ITEMS,
85
+ BROWSED_ITEMS: s.ITEMS_TYPE.BROWSED_ITEMS,
86
+ PURCHASED_ITEMS: s.ITEMS_TYPE.PURCHASED_ITEMS
87
+ }[r] || s.ITEMS_TYPE.CART_ITEMS : s.ITEMS_TYPE.CART_ITEMS;
86
88
  }
87
- function R(e) {
88
- const t = (a, o) => a == null ? o : a === "1" || a === "true", r = (a, o) => a || o, c = e["data-type"] || e["data-source"], i = q(c);
89
- let n = e["data-cart_items_select_control_value"] || g.cartItemsSelectControlValue;
90
- if (n && !n.includes("{{") && /^\d+$/.test(n)) {
91
- const a = parseInt(n) - 1, o = E[i];
92
- o && o[a] && (n = o[a].value);
89
+ function R(r) {
90
+ var e;
91
+ const t = (i, _) => i == null ? _ : i === "1" || i === "true", o = (i, _) => i || _, c = r["data-type"] || r["data-source"], a = $(c), n = T[a];
92
+ let l = r["data-cart_items_select_control_value"] || ((e = n == null ? void 0 : n[0]) == null ? void 0 : e.value) || g.cartItemsSelectControlValue;
93
+ if (l && !l.includes("{{") && /^\d+$/.test(l)) {
94
+ const i = parseInt(l) - 1, _ = T[a];
95
+ _ && _[i] && (l = _[i].value);
93
96
  }
94
97
  return {
95
98
  initialized: !0,
96
- blockInstanceId: r(e["data-block-instance-id"], F()),
97
- source: i,
98
- type: i,
99
- itemsSelectValue: n,
100
- orientation: e["data-card_orientation_control_value"] || u.ORIENTATION.VERTICAL,
101
- nameTrimming: t(e["data-product_name_control_trim"], !0),
102
- priceHideDiscount: t(e["data-product_price_control_nodup"], !0),
103
- priceFormatted: t(e["data-product_price_control_formated"], !0),
104
- priceSinglePrice: t(e["data-product_price_control_single_price"], !1),
105
- priceCurrencySymbol: r(
106
- e["data-product_price_control_currency_symbol"],
99
+ blockInstanceId: o(r["data-block-instance-id"], O()),
100
+ source: a,
101
+ type: a,
102
+ itemsSelectValue: l,
103
+ orientation: r["data-card_orientation_control_value"] || s.ORIENTATION.VERTICAL,
104
+ nameTrimming: t(r["data-product_name_control_trim"], !0),
105
+ priceHideDiscount: t(r["data-product_price_control_nodup"], !0),
106
+ priceFormatted: t(r["data-product_price_control_formated"], !0),
107
+ priceSinglePrice: t(r["data-product_price_control_single_price"], !1),
108
+ priceCurrencySymbol: o(
109
+ r["data-product_price_control_currency_symbol"],
107
110
  g.productPriceCurrencySymbolControlValue
108
111
  ),
109
- priceCurrencyLocation: r(
110
- e["data-product_price_currency_location"],
112
+ priceCurrencyLocation: o(
113
+ r["data-product_price_currency_location"],
111
114
  g.productPriceCurrencyLocationControlValue
112
115
  ),
113
- priceOrientation: e["data-product_original_price_control_orientation"] || "horizontal",
114
- quantityControlEnabled: t(e["data-product_quantity_control_enabled"], !0),
115
- buttonLink: r(e["data-product_button_link"], g.productButtonLinkControlValue),
116
- imageLink: r(e["data-product_image_link"], g.productImageLinkControlValue),
117
- buttonLabel: r(e["data-product_button_control_label"], "Buy"),
118
- buttonFullWidth: t(e["data-product_button_control_atw"], !0),
119
- imageVisible: t(e["data-product_image_control_enabled"], !0),
120
- nameVisible: t(e["data-product_name_control_enabled"], !0),
121
- quantityVisible: t(e["data-product_quantity_control_enabled"], !0),
122
- priceVisible: t(e["data-product_price_control_enabled"], !0),
123
- originalPriceVisible: t(e["data-product_original_price_control_enabled"], !0),
124
- buttonVisible: t(e["data-product_button_control_enabled"], !0)
116
+ priceOrientation: r["data-product_original_price_control_orientation"] || "horizontal",
117
+ quantityControlEnabled: t(r["data-product_quantity_control_enabled"], !0),
118
+ buttonLink: o(r["data-product_button_link"], g.productButtonLinkControlValue),
119
+ imageLink: o(r["data-product_image_link"], g.productImageLinkControlValue),
120
+ buttonLabel: o(r["data-product_button_control_label"], "Buy"),
121
+ buttonFullWidth: t(r["data-product_button_control_atw"], !0),
122
+ imageVisible: t(r["data-product_image_control_enabled"], !0),
123
+ nameVisible: t(r["data-product_name_control_enabled"], !0),
124
+ quantityVisible: t(r["data-product_quantity_control_enabled"], !0),
125
+ priceVisible: t(r["data-product_price_control_enabled"], !0),
126
+ originalPriceVisible: t(r["data-product_original_price_control_enabled"], !0),
127
+ buttonVisible: t(r["data-product_button_control_enabled"], !0)
125
128
  };
126
129
  }
127
- const O = {
130
+ const x = {
128
131
  ins_apr: "CART_ITEMS",
129
132
  browsed_item: "BROWSED_ITEMS",
130
133
  purchased_item: "PURCHASED_ITEMS"
131
134
  };
132
- function $(e, t) {
133
- const r = {
135
+ function V(r, t) {
136
+ const o = {
134
137
  CART_ITEMS: `{{Abandoned Cart Item (${t}) Image}}`,
135
138
  BROWSED_ITEMS: `{{Browsed Item (${t}) Image}}`,
136
139
  PURCHASED_ITEMS: `{{Purchased Item (${t}) Image}}`
137
140
  };
138
- return r[e] || r.CART_ITEMS;
141
+ return o[r] || o.CART_ITEMS;
139
142
  }
140
- function x(e, t) {
141
- const r = {
143
+ function N(r, t) {
144
+ const o = {
142
145
  CART_ITEMS: `{{Abandoned Cart Item (${t}) Url}}`,
143
146
  BROWSED_ITEMS: `{{Browsed Item (${t}) Url}}`,
144
147
  PURCHASED_ITEMS: `{{Purchased Item (${t}) Url}}`
145
148
  };
146
- return r[e] || r.CART_ITEMS;
149
+ return o[r] || o.CART_ITEMS;
147
150
  }
148
- class V {
151
+ class z {
149
152
  constructor() {
150
153
  M(this, "parser");
151
154
  this.parser = new DOMParser();
152
155
  }
153
156
  migrate(t) {
154
157
  try {
155
- let r = this.removeJinjaConditionals(t);
156
- r = this.replaceTemplateVariables(r);
157
- const c = this.parser.parseFromString(r, "text/html"), i = c.querySelectorAll(
158
+ let o = this.removeJinjaConditionals(t);
159
+ o = this.replaceTemplateVariables(o);
160
+ const c = this.parser.parseFromString(o, "text/html"), a = c.querySelectorAll(
158
161
  "td.esd-cart-items-block, td.esd-browsed-items-block, td.esd-purchased-items-block"
159
- );
160
- return i.length === 0 ? (console.warn("ItemsBlockMigrator: No blocks found with items block selectors"), r) : (i.forEach((n) => {
161
- const a = this.extractConfiguration(n), o = K({
162
- orientation: a.orientation,
163
- itemsType: a.itemsType,
164
- itemId: a.itemId,
165
- currencySymbol: a.currencySymbol,
166
- currencyLocation: a.currencyLocation,
167
- formattedPrice: a.formattedPrice,
168
- configBlockAttributes: a.configBlockAttributes,
162
+ ), n = F();
163
+ return n.migrations[U] = a.length, a.length === 0 ? (console.warn("ItemsBlockMigrator: No blocks found with items block selectors"), o) : (a.forEach((l) => {
164
+ const e = this.extractConfiguration(l), i = w({
165
+ orientation: e.orientation,
166
+ itemsType: e.itemsType,
167
+ itemId: e.itemId,
168
+ currencySymbol: e.currencySymbol,
169
+ currencyLocation: e.currencyLocation,
170
+ formattedPrice: e.formattedPrice,
171
+ configBlockAttributes: e.configBlockAttributes,
169
172
  migrate: !0,
170
- nameStyles: a.nameStyles,
171
- buttonStyles: a.buttonStyles,
172
- priceStyles: a.priceStyles,
173
- originalPriceStyles: a.originalPriceStyles,
174
- quantityStyles: a.quantityStyles,
175
- nodeConfig: R(a.configBlockAttributes)
176
- }), l = this.parser.parseFromString(
177
- `<table><tbody><tr>${o}</tr></tbody></table>`,
173
+ nameStyles: e.nameStyles,
174
+ buttonStyles: e.buttonStyles,
175
+ priceStyles: e.priceStyles,
176
+ originalPriceStyles: e.originalPriceStyles,
177
+ quantityStyles: e.quantityStyles,
178
+ nodeConfig: R(e.configBlockAttributes)
179
+ }), d = this.parser.parseFromString(
180
+ `<table><tbody><tr>${i}</tr></tbody></table>`,
178
181
  "text/html"
179
182
  ).querySelector("td");
180
- if (l && n.parentNode) {
181
- const f = R(a.configBlockAttributes);
182
- l.setAttribute("esd-ext-config", JSON.stringify(f));
183
- const d = l.querySelector("esd-config-block");
184
- d && d.remove(), n.parentNode.replaceChild(l, n);
183
+ if (d && l.parentNode) {
184
+ const p = R(e.configBlockAttributes);
185
+ d.setAttribute("esd-ext-config", JSON.stringify(p));
186
+ const u = d.querySelector("esd-config-block");
187
+ u && u.remove(), l.parentNode.replaceChild(d, l);
185
188
  }
186
189
  }), c.documentElement.outerHTML);
187
- } catch (r) {
188
- return console.error("ItemsBlockMigrator failed:", r), t;
190
+ } catch (o) {
191
+ return console.error("ItemsBlockMigrator failed:", o), t;
189
192
  }
190
193
  }
191
194
  /**
@@ -196,18 +199,18 @@ class V {
196
199
  */
197
200
  extractConfiguration(t) {
198
201
  var C, D, P;
199
- const r = ((C = t.querySelector("[data-type]")) == null ? void 0 : C.getAttribute("data-type")) || "CART_ITEMS", c = ((D = t.querySelector("[data-number]")) == null ? void 0 : D.getAttribute("data-number")) || "1", i = parseInt(c) - 1, n = E[r], a = ((P = n == null ? void 0 : n[i]) == null ? void 0 : P.value) || n[0].value, o = t.querySelector('[product-attr="price"]'), _ = (o == null ? void 0 : o.getAttribute("data-currency_symbol")) || "USD", f = ((o == null ? void 0 : o.getAttribute("data-curency")) || "before") === "after" ? "1" : "0", d = (o == null ? void 0 : o.getAttribute("data-formated")) !== "false", s = this.extractConfigBlockAttributes(t, r, c), S = s["data-card_orientation_control_value"];
202
+ const o = ((C = t.querySelector("[data-type]")) == null ? void 0 : C.getAttribute("data-type")) || "CART_ITEMS", c = ((D = t.querySelector("[data-number]")) == null ? void 0 : D.getAttribute("data-number")) || "1", a = parseInt(c) - 1, n = T[o], l = ((P = n == null ? void 0 : n[a]) == null ? void 0 : P.value) || n[0].value, e = t.querySelector('[product-attr="price"]'), i = (e == null ? void 0 : e.getAttribute("data-currency_symbol")) || "USD", d = ((e == null ? void 0 : e.getAttribute("data-curency")) || "before") === "after" ? "1" : "0", p = (e == null ? void 0 : e.getAttribute("data-formated")) !== "false", u = this.extractConfigBlockAttributes(t, o, c), S = u["data-card_orientation_control_value"];
200
203
  let b;
201
204
  S ? b = S === "horizontal" ? "horizontal" : "vertical" : b = t.querySelector('[colspan="2"]') !== null ? "vertical" : "horizontal";
202
- const p = t.querySelector('a[product-attr="name"]'), I = (p == null ? void 0 : p.getAttribute("style")) || void 0, y = t.querySelector('a[product-attr="button"]'), m = (y == null ? void 0 : y.getAttribute("style")) || void 0, h = (o == null ? void 0 : o.getAttribute("style")) || void 0, T = t.querySelector("p.original-price"), k = (T == null ? void 0 : T.getAttribute("style")) || void 0, A = t.querySelector('[product-attr="quantity"]'), L = (A == null ? void 0 : A.getAttribute("style")) || void 0;
205
+ const y = t.querySelector('a[product-attr="name"]'), I = (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, h = (e == null ? void 0 : e.getAttribute("style")) || void 0, A = t.querySelector("p.original-price"), k = (A == null ? void 0 : A.getAttribute("style")) || void 0, E = t.querySelector('[product-attr="quantity"]'), L = (E == null ? void 0 : E.getAttribute("style")) || void 0;
203
206
  return {
204
207
  orientation: b,
205
- itemsType: r,
206
- itemId: a,
207
- currencySymbol: _,
208
- currencyLocation: f,
209
- formattedPrice: d,
210
- configBlockAttributes: s,
208
+ itemsType: o,
209
+ itemId: l,
210
+ currencySymbol: i,
211
+ currencyLocation: d,
212
+ formattedPrice: p,
213
+ configBlockAttributes: u,
211
214
  nameStyles: I,
212
215
  buttonStyles: m,
213
216
  priceStyles: h,
@@ -222,27 +225,27 @@ class V {
222
225
  * @param itemsType - The type of items (CART_ITEMS, BROWSED_ITEMS, PURCHASED_ITEMS)
223
226
  * @param itemNumber - The item number (1-based index)
224
227
  */
225
- extractConfigBlockAttributes(t, r, c) {
226
- const i = t.querySelector("esd-config-block"), n = {};
227
- if (!i)
228
+ extractConfigBlockAttributes(t, o, c) {
229
+ const a = t.querySelector("esd-config-block"), n = {};
230
+ if (!a)
228
231
  return this.getDefaultConfigBlockAttributes();
229
- if (Array.from(i.attributes).forEach((o) => {
230
- o.name.startsWith("data-") && (n[o.name] = o.value);
232
+ if (Array.from(a.attributes).forEach((e) => {
233
+ e.name.startsWith("data-") && (n[e.name] = e.value);
231
234
  }), n["data-cart_items_select_control_value"]) {
232
- const o = n["data-cart_items_select_control_value"];
233
- if (/^\d+$/.test(o)) {
234
- const _ = parseInt(o) - 1, l = E[r];
235
- l && l[_] && (n["data-cart_items_select_control_value"] = l[_].value);
235
+ const e = n["data-cart_items_select_control_value"];
236
+ if (/^\d+$/.test(e)) {
237
+ const i = parseInt(e) - 1, _ = T[o];
238
+ _ && _[i] && (n["data-cart_items_select_control_value"] = _[i].value);
236
239
  }
237
240
  }
238
241
  if (n["data-product_price_control_curency"]) {
239
- const o = n["data-product_price_control_curency"];
240
- let _ = o;
241
- o === "before" ? _ = "0" : o === "after" && (_ = "1"), n["data-product_price_control_curency"] = _, n["data-product_price_currency_location"] = _;
242
+ const e = n["data-product_price_control_curency"];
243
+ let i = e;
244
+ e === "before" ? i = "0" : e === "after" && (i = "1"), n["data-product_price_control_curency"] = i, n["data-product_price_currency_location"] = i;
242
245
  }
243
246
  (!n["data-product_price_control_currency_symbol"] || n["data-product_price_control_currency_symbol"].trim() === "") && (n["data-product_price_control_currency_symbol"] = "USD");
244
- const a = { ...this.getDefaultConfigBlockAttributes(), ...n };
245
- return a["data-type"] = r, a["data-source"] = r, a["data-product_image_link"] = $(r, c), a["data-product_button_link"] = x(r, c), a;
247
+ const l = { ...this.getDefaultConfigBlockAttributes(), ...n };
248
+ return l["data-type"] = o, l["data-source"] = o, l["data-product_image_link"] = V(o, c), l["data-product_button_link"] = N(o, c), l;
246
249
  }
247
250
  /**
248
251
  * Returns default esd-config-block attributes based on the old template structure
@@ -302,17 +305,17 @@ class V {
302
305
  * contains display condition Jinja scripts that should NOT be removed.
303
306
  */
304
307
  removeJinjaConditionals(t) {
305
- const r = "__ESD_DISPLAY_CONDITIONS_PLACEHOLDER__", c = t.match(/esd-custom-display-conditions="[^"]*"/);
306
- let i = c ? t.replace(c[0], r) : t;
307
- return i = i.replace(
308
+ const o = "__ESD_DISPLAY_CONDITIONS_PLACEHOLDER__", c = t.match(/esd-custom-display-conditions="[^"]*"/);
309
+ let a = c ? t.replace(c[0], o) : t;
310
+ return a = a.replace(
308
311
  /\{%\s*if\s+(ins_apr|browsed_item|purchased_item)_total_product_kind\s*(&gt;|>)\s*\d+\s*%\}/g,
309
312
  ""
310
- ), i = i.replace(
313
+ ), a = a.replace(
311
314
  /\{%\s*if\s+(ins_apr|browsed_item|purchased_item)_price_\d+\s*(!&#61;|!=)\s*\1_originalprice_\d+\s*%\}/g,
312
315
  ""
313
- ), i = i.replace(/\{%\s*endif\s*%\}/g, ""), c && (i = i.replace(r, c[0])), i = i.replace(/\n\s*\n\s*\n/g, `
316
+ ), a = a.replace(/\{%\s*endif\s*%\}/g, ""), c && (a = a.replace(o, c[0])), a = a.replace(/\n\s*\n\s*\n/g, `
314
317
 
315
- `), i;
318
+ `), a;
316
319
  }
317
320
  /**
318
321
  * Replaces template variables with default values from productPairs
@@ -324,32 +327,32 @@ class V {
324
327
  * - {{purchased_item_formattedprice_5}} → '1,490.49' (PURCHASED_ITEMS)
325
328
  */
326
329
  replaceTemplateVariables(t) {
327
- const { PAIRS_FOR_EXTENSION: r } = v;
328
- return t.replace(/{{([^}]+)}}/g, (c, i) => {
329
- const n = i.match(/^(ins_apr|browsed_item|purchased_item)_([a-z_]+)_(\d+)$/);
330
+ const { PAIRS_FOR_EXTENSION: o } = K;
331
+ return t.replace(/{{([^}]+)}}/g, (c, a) => {
332
+ const n = a.match(/^(ins_apr|browsed_item|purchased_item)_([a-z_]+)_(\d+)$/);
330
333
  if (!n)
331
334
  return c;
332
- const [, a, o, _] = n, l = O[a];
333
- if (!l)
334
- return console.warn(`Unknown variable prefix: ${a}`), c;
335
- const f = w[o];
336
- if (!f)
337
- return console.warn(`Unknown variable suffix mapping for: ${o}`), c;
338
- const { pairsKey: d, defaultKey: s, isArray: S } = f, p = r[d][l];
339
- if (!p)
340
- return console.warn(`No data found for: ${d}.${l}`), c;
335
+ const [, l, e, i] = n, _ = x[l];
336
+ if (!_)
337
+ return console.warn(`Unknown variable prefix: ${l}`), c;
338
+ const d = q[e];
339
+ if (!d)
340
+ return console.warn(`Unknown variable suffix mapping for: ${e}`), c;
341
+ const { pairsKey: p, defaultKey: u, isArray: S } = d, y = o[p][_];
342
+ if (!y)
343
+ return console.warn(`No data found for: ${p}.${_}`), c;
341
344
  if (S) {
342
- const y = parseInt(_) - 1, m = p[s];
343
- return Array.isArray(m) && m[y] ? m[y] : (console.warn(`Array value not found: ${d}.${l}.${s}[${y}]`), c);
345
+ const f = parseInt(i) - 1, m = y[u];
346
+ return Array.isArray(m) && m[f] ? m[f] : (console.warn(`Array value not found: ${p}.${_}.${u}[${f}]`), c);
344
347
  }
345
- const I = p[s];
346
- return I !== void 0 ? String(I) : (console.warn(`Default value not found: ${d}.${l}.${s}`), c);
348
+ const I = y[u];
349
+ return I !== void 0 ? String(I) : (console.warn(`Default value not found: ${p}.${_}.${u}`), c);
347
350
  });
348
351
  }
349
352
  }
350
- function G(e) {
351
- return new V().migrate(e);
353
+ function Q(r) {
354
+ return new z().migrate(r);
352
355
  }
353
356
  export {
354
- G as migrateItemsBlock
357
+ Q as migrateItemsBlock
355
358
  };
@@ -1,24 +1,26 @@
1
1
  var h = Object.defineProperty;
2
- var T = (A, e, t) => e in A ? h(A, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : A[e] = t;
3
- var m = (A, e, t) => T(A, typeof e != "symbol" ? e + "" : e, t);
4
- import P, { prepareProductRows as S } from "../../extensions/Blocks/Recommendation/templates/grid/migration.js";
5
- import { getDefaultProducts as q } from "../../extensions/Blocks/Recommendation/templates/utils.js";
6
- class w {
2
+ var T = (d, e, t) => e in d ? h(d, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : d[e] = t;
3
+ var A = (d, e, t) => T(d, typeof e != "symbol" ? e + "" : e, t);
4
+ import { BLOCK_ID as S } from "../../extensions/Blocks/Recommendation/block.js";
5
+ import P, { prepareProductRows as q } from "../../extensions/Blocks/Recommendation/templates/grid/migration.js";
6
+ import { useTemplateStore as w } from "../../stores/template.js";
7
+ import { getDefaultProducts as B } from "../../extensions/Blocks/Recommendation/templates/utils.js";
8
+ class $ {
7
9
  constructor() {
8
- m(this, "parser");
10
+ A(this, "parser");
9
11
  this.parser = new DOMParser();
10
12
  }
11
13
  migrate(e) {
12
14
  try {
13
15
  const t = this.parser.parseFromString(e, "text/html"), s = t.querySelectorAll(
14
16
  'td.ins-recommendation-v3-block-1, td.product-block[esd-handler-name*="EmailRecommendationV3"]'
15
- );
16
- return s.length === 0 ? e : (s.forEach((o) => {
17
- const l = o.getAttribute("id"), r = this.extractBgColor(o), i = this.extractTitle(o), u = this.extractProductRows(o), c = P.replace("{-{-TITLE-}-}", i).replace("{-{-PRODUCT_ROWS-}-}", u), a = this.parser.parseFromString(
18
- `<table id="tempDoc"><tbody><tr>${c}</tr></tbody></table>`,
17
+ ), o = w();
18
+ return o.migrations[S] = s.length, s.length === 0 ? e : (s.forEach((n) => {
19
+ const r = n.getAttribute("id"), i = this.extractBgColor(n), u = this.extractTitle(n), c = this.extractProductRows(n), l = P.replace("{-{-TITLE-}-}", u).replace("{-{-PRODUCT_ROWS-}-}", c), a = this.parser.parseFromString(
20
+ `<table id="tempDoc"><tbody><tr>${l}</tr></tbody></table>`,
19
21
  "text/html"
20
22
  ).querySelector(".ins-recommendation-v3-block-v2");
21
- a && o.parentNode && (l && a.setAttribute("id", l), r && a.setAttribute("bgcolor", r), o.parentNode.replaceChild(a, o));
23
+ a && n.parentNode && (r && a.setAttribute("id", r), i && a.setAttribute("bgcolor", i), n.parentNode.replaceChild(a, n));
22
24
  }), t.documentElement.outerHTML);
23
25
  } catch (t) {
24
26
  return console.error("RecommendationMigrator failed:", t), e;
@@ -64,7 +66,7 @@ class w {
64
66
  * @returns HTML string for the title block
65
67
  */
66
68
  extractTitle(e) {
67
- var a, g;
69
+ var g, a;
68
70
  const t = e.querySelector(".ext-recommendation-title");
69
71
  if (!t)
70
72
  return this.buildTitleBlock({
@@ -76,7 +78,7 @@ class w {
76
78
  });
77
79
  const s = t.querySelector("p");
78
80
  if (!s) {
79
- const p = ((a = t.textContent) == null ? void 0 : a.trim()) || "You May Also Like!", b = t.getAttribute("align") || "center";
81
+ const p = ((g = t.textContent) == null ? void 0 : g.trim()) || "You May Also Like!", b = t.getAttribute("align") || "center";
80
82
  return this.buildTitleBlock({
81
83
  text: p,
82
84
  isBold: !0,
@@ -85,13 +87,13 @@ class w {
85
87
  styles: "font-size: 28px; color: #333333;"
86
88
  });
87
89
  }
88
- const o = ((g = s.textContent) == null ? void 0 : g.trim()) || "You May Also Like!", l = t.getAttribute("align") || s.getAttribute("align") || "center", r = s.getAttribute("style") || "", i = /font-weight\s*:\s*bold/i.test(r) || !!s.querySelector("b, strong"), u = /font-style\s*:\s*italic/i.test(r) || !!s.querySelector("i, em"), c = this.removeStyleProperties(r, ["font-weight", "font-style"]), n = this.convertInlineToBlock(c);
90
+ const o = ((a = s.textContent) == null ? void 0 : a.trim()) || "You May Also Like!", n = t.getAttribute("align") || s.getAttribute("align") || "center", r = s.getAttribute("style") || "", i = /font-weight\s*:\s*bold/i.test(r) || !!s.querySelector("b, strong"), u = /font-style\s*:\s*italic/i.test(r) || !!s.querySelector("i, em"), c = this.removeStyleProperties(r, ["font-weight", "font-style"]), l = this.convertInlineToBlock(c);
89
91
  return this.buildTitleBlock({
90
92
  text: o,
91
93
  isBold: i,
92
94
  isItalic: u,
93
- align: l,
94
- styles: n
95
+ align: n,
96
+ styles: l
95
97
  });
96
98
  }
97
99
  /**
@@ -103,8 +105,8 @@ class w {
103
105
  const t = this.extractProductConfig(e);
104
106
  if (!t)
105
107
  return console.warn("[RecommendationMigrator] No product config found, using defaults"), this.generateProductRows(6, 3, {});
106
- const { totalCount: s, productsPerRow: o } = t, l = this.extractProductStyles(e);
107
- return this.generateProductRows(s, o, l);
108
+ const { totalCount: s, productsPerRow: o } = t, n = this.extractProductStyles(e);
109
+ return this.generateProductRows(s, o, n);
108
110
  }
109
111
  /**
110
112
  * Extracts Stripo padding/margin utility classes from a class string
@@ -152,12 +154,12 @@ class w {
152
154
  * @returns HTML string for product rows with applied styles
153
155
  */
154
156
  generateProductRows(e, t, s) {
155
- const o = q(), l = [];
157
+ const o = B(), n = [];
156
158
  for (let i = 0; i < e; i++) {
157
159
  const u = o[i % o.length];
158
- l.push({ ...u });
160
+ n.push({ ...u });
159
161
  }
160
- let r = S(l, t);
162
+ let r = q(n, t);
161
163
  return r = this.applyExtractedStyles(r, s), r;
162
164
  }
163
165
  /**
@@ -171,30 +173,30 @@ class w {
171
173
  return console.warn("[RecommendationMigrator] No product card found, using default styles"), t;
172
174
  const o = this.extractCardBgColor(s);
173
175
  o && (t.cardBgColor = o);
174
- const l = s.querySelector(".ext-product-image");
175
- if (l) {
176
- const n = l.querySelector("img"), a = n == null ? void 0 : n.getAttribute("width"), g = l.getAttribute("style") || "", p = l.getAttribute("align") || "center", b = l.getAttribute("class") || "", d = this.extractStripoClasses(b);
177
- t.imageWidth = a || "120", t.imageAlign = p, t.imageTdStyle = g, t.imageClasses = d;
176
+ const n = s.querySelector(".ext-product-image");
177
+ if (n) {
178
+ const l = n.querySelector("img"), g = l == null ? void 0 : l.getAttribute("width"), a = n.getAttribute("style") || "", p = n.getAttribute("align") || "center", b = n.getAttribute("class") || "", m = this.extractStripoClasses(b);
179
+ t.imageWidth = g || "120", t.imageAlign = p, t.imageTdStyle = a, t.imageClasses = m;
178
180
  }
179
181
  const r = s.querySelector(".ext-product-name");
180
182
  if (r) {
181
- const n = r.querySelector("p"), a = (n == null ? void 0 : n.getAttribute("style")) || "", g = r.getAttribute("align") || "center", p = r.getAttribute("style") || "", b = r.getAttribute("class") || "", d = this.extractStripoClasses(b);
182
- t.nameStyle = a, t.nameAlign = g, t.nameTdStyle = p, t.nameClasses = d;
183
+ const l = r.querySelector("p"), g = (l == null ? void 0 : l.getAttribute("style")) || "", a = r.getAttribute("align") || "center", p = r.getAttribute("style") || "", b = r.getAttribute("class") || "", m = this.extractStripoClasses(b);
184
+ t.nameStyle = g, t.nameAlign = a, t.nameTdStyle = p, t.nameClasses = m;
183
185
  }
184
186
  const i = s.querySelector(".ext-product-price");
185
187
  if (i) {
186
- const n = i.querySelector("p"), a = (n == null ? void 0 : n.getAttribute("style")) || "", g = i.getAttribute("align") || "center", p = i.getAttribute("style") || "", b = i.getAttribute("class") || "", d = this.extractStripoClasses(b);
187
- t.priceStyle = a, t.priceAlign = g, t.priceTdStyle = p, t.priceClasses = d;
188
+ const l = i.querySelector("p"), g = (l == null ? void 0 : l.getAttribute("style")) || "", a = i.getAttribute("align") || "center", p = i.getAttribute("style") || "", b = i.getAttribute("class") || "", m = this.extractStripoClasses(b);
189
+ t.priceStyle = g, t.priceAlign = a, t.priceTdStyle = p, t.priceClasses = m;
188
190
  }
189
191
  const u = s.querySelector(".ext-product-original-price");
190
192
  if (u) {
191
- const n = u.querySelector("p"), a = (n == null ? void 0 : n.getAttribute("style")) || "", g = u.getAttribute("align") || "center", p = u.getAttribute("style") || "", b = u.getAttribute("class") || "", d = this.extractStripoClasses(b);
192
- t.oldPriceStyle = a, t.oldPriceAlign = g, t.oldPriceTdStyle = p, t.oldPriceClasses = d;
193
+ const l = u.querySelector("p"), g = (l == null ? void 0 : l.getAttribute("style")) || "", a = u.getAttribute("align") || "center", p = u.getAttribute("style") || "", b = u.getAttribute("class") || "", m = this.extractStripoClasses(b);
194
+ t.oldPriceStyle = g, t.oldPriceAlign = a, t.oldPriceTdStyle = p, t.oldPriceClasses = m;
193
195
  }
194
196
  const c = s.querySelector(".ext-product-button");
195
197
  if (c) {
196
- const n = c.querySelector(".es-button-border"), a = c.querySelector("a.es-button"), g = (n == null ? void 0 : n.getAttribute("style")) || "", p = (a == null ? void 0 : a.getAttribute("style")) || "", b = c.getAttribute("align") || "center", d = c.getAttribute("style") || "", f = c.getAttribute("class") || "", C = this.extractStripoClasses(f), y = ((c == null ? void 0 : c.textContent) || "").trim();
197
- t.buttonBorderStyle = g, t.buttonLinkStyle = p, t.buttonAlign = b, t.buttonTdStyle = d, t.buttonClasses = C, t.buttonText = y;
198
+ const l = c.querySelector(".es-button-border"), g = c.querySelector("a.es-button"), a = (l == null ? void 0 : l.getAttribute("style")) || "", p = (g == null ? void 0 : g.getAttribute("style")) || "", b = c.getAttribute("align") || "center", m = c.getAttribute("style") || "", f = c.getAttribute("class") || "", C = this.extractStripoClasses(f), y = ((c == null ? void 0 : c.textContent) || "").trim();
199
+ t.buttonBorderStyle = a, t.buttonLinkStyle = p, t.buttonAlign = b, t.buttonTdStyle = m, t.buttonClasses = C, t.buttonText = y;
198
200
  }
199
201
  return t;
200
202
  }
@@ -240,8 +242,8 @@ class w {
240
242
  i && t.oldPriceStyle && i.setAttribute("style", t.oldPriceStyle);
241
243
  }), (t.buttonBorderStyle || t.buttonLinkStyle || t.buttonAlign || t.buttonTdStyle || t.buttonClasses) && s.querySelectorAll(".product-button").forEach((r) => {
242
244
  if (t.buttonAlign && r.setAttribute("align", t.buttonAlign), t.buttonTdStyle && r.setAttribute("style", t.buttonTdStyle), t.buttonClasses) {
243
- const n = `${r.getAttribute("class") || ""} ${t.buttonClasses}`.trim();
244
- r.setAttribute("class", n);
245
+ const l = `${r.getAttribute("class") || ""} ${t.buttonClasses}`.trim();
246
+ r.setAttribute("class", l);
245
247
  }
246
248
  const i = r.querySelector(".es-button-border");
247
249
  i && t.buttonBorderStyle && i.setAttribute("style", t.buttonBorderStyle);
@@ -270,8 +272,8 @@ class w {
270
272
  * Removes specified style properties from a style string
271
273
  */
272
274
  removeStyleProperties(e, t) {
273
- return e ? t.reduce((o, l) => {
274
- const r = new RegExp(`${l}\\s*:\\s*[^;]*;?`, "gi");
275
+ return e ? t.reduce((o, n) => {
276
+ const r = new RegExp(`${n}\\s*:\\s*[^;]*;?`, "gi");
275
277
  return o.replace(r, "");
276
278
  }, e).replace(/;\s*;/g, ";").replace(/^;|;$/g, "").trim() : "";
277
279
  }
@@ -285,9 +287,9 @@ class w {
285
287
  return /display\s*:/i.test(t) || (t = t ? `${t}; display: block` : "display: block"), t.replace(/;\s*;/g, ";").replace(/^;|;$/g, "").replace(/"/g, "'").trim();
286
288
  }
287
289
  }
288
- function k(A) {
289
- return new w().migrate(A);
290
+ function v(d) {
291
+ return new $().migrate(d);
290
292
  }
291
293
  export {
292
- k as migrateRecommendation
294
+ v as migrateRecommendation
293
295
  };