@useinsider/guido 3.0.0-beta.44d4c8e → 3.0.0-beta.4bf62ba

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