@useinsider/guido 2.1.0-beta.a873eb7 → 2.1.0-beta.ab9a598

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 (68) hide show
  1. package/dist/@types/config/schemas.js +1 -1
  2. package/dist/components/organisms/extensions/recommendation/FilterItem.vue.js +13 -11
  3. package/dist/components/organisms/extensions/recommendation/FilterItem.vue2.js +23 -54
  4. package/dist/components/organisms/extensions/recommendation/FilterSelectionDrawer.vue.js +3 -3
  5. package/dist/components/organisms/extensions/recommendation/FilterSelectionDrawer.vue2.js +21 -34
  6. package/dist/components/organisms/extensions/recommendation/Filters.vue.js +11 -11
  7. package/dist/components/organisms/extensions/recommendation/Filters.vue2.js +34 -44
  8. package/dist/components/organisms/header/EditorActions.vue.js +10 -8
  9. package/dist/components/organisms/header/EditorActions.vue2.js +40 -30
  10. package/dist/components/organisms/header/MigrationConfirmModal.vue.js +17 -0
  11. package/dist/components/organisms/header/MigrationConfirmModal.vue2.js +39 -0
  12. package/dist/components/organisms/unsubscribe/UnsubscribePageSelection.vue.js +1 -1
  13. package/dist/components/organisms/unsubscribe/UnsubscribePageSelection.vue2.js +19 -19
  14. package/dist/composables/useStripo.js +25 -23
  15. package/dist/composables/useVersionHistoryApi.js +1 -1
  16. package/dist/config/i18n/en/index.js +11 -0
  17. package/dist/config/i18n/en/labels.json.js +12 -0
  18. package/dist/config/i18n/en/toasters.json.js +56 -0
  19. package/dist/config/i18n/en/tooltips.json.js +82 -0
  20. package/dist/config/i18n/index.js +7 -0
  21. package/dist/config/migrator/itemsBlockMigrator.js +136 -131
  22. package/dist/config/migrator/recommendationMigrator.js +58 -54
  23. package/dist/enums/block.js +4 -0
  24. package/dist/extensions/Blocks/Items/block.js +30 -21
  25. package/dist/extensions/Blocks/Items/iconsRegistry.js +7 -6
  26. package/dist/extensions/Blocks/Items/items.css.js +48 -0
  27. package/dist/extensions/Blocks/Recommendation/block.js +22 -13
  28. package/dist/extensions/Blocks/Recommendation/controls/main/index.js +39 -58
  29. package/dist/extensions/Blocks/Recommendation/iconsRegistry.js +5 -4
  30. package/dist/extensions/Blocks/Recommendation/recommendation.css.js +48 -0
  31. package/dist/extensions/Blocks/Recommendation/store/recommendation.js +57 -93
  32. package/dist/extensions/Blocks/Recommendation/utils/filterUtil.js +8 -8
  33. package/dist/extensions/Blocks/Unsubscribe/block.js +29 -29
  34. package/dist/extensions/Blocks/Unsubscribe/control.js +12 -9
  35. package/dist/extensions/Blocks/Unsubscribe/elements/preview.js +13 -11
  36. package/dist/extensions/Blocks/Unsubscribe/styles.css.js +31 -1
  37. package/dist/extensions/Blocks/common-control.js +12 -4
  38. package/dist/guido.css +1 -1
  39. package/dist/src/@types/extensions/block.d.ts +2 -0
  40. package/dist/src/components/Guido.vue.d.ts +1 -1
  41. package/dist/src/components/organisms/extensions/recommendation/FilterItem.vue.d.ts +0 -1
  42. package/dist/src/components/organisms/extensions/recommendation/Filters.vue.d.ts +1 -15
  43. package/dist/src/components/organisms/header/EditorActions.vue.d.ts +1 -1
  44. package/dist/src/components/organisms/header/HeaderWrapper.vue.d.ts +1 -1
  45. package/dist/src/components/organisms/header/MigrationConfirmModal.vue.d.ts +6 -0
  46. package/dist/src/components/organisms/header/RightSlot.vue.d.ts +1 -1
  47. package/dist/src/components/wrappers/WpModal.vue.d.ts +2 -2
  48. package/dist/src/config/i18n/en/index.d.ts +1 -0
  49. package/dist/src/config/i18n/index.d.ts +16 -0
  50. package/dist/src/enums/block.d.ts +4 -0
  51. package/dist/src/extensions/Blocks/Items/block.d.ts +3 -1
  52. package/dist/src/extensions/Blocks/Recommendation/block.d.ts +3 -1
  53. package/dist/src/extensions/Blocks/Recommendation/controls/main/index.d.ts +0 -5
  54. package/dist/src/extensions/Blocks/Recommendation/store/recommendation.d.ts +2 -18
  55. package/dist/src/extensions/Blocks/Unsubscribe/control.d.ts +1 -0
  56. package/dist/src/extensions/Blocks/common-control.d.ts +5 -0
  57. package/dist/src/stores/template.d.ts +29 -0
  58. package/dist/src/utils/migrationBannerHtml.d.ts +2 -0
  59. package/dist/static/assets/info.svg.js +5 -0
  60. package/dist/static/styles/components/notification.css.js +18 -0
  61. package/dist/static/styles/components/tools.css.js +6 -2
  62. package/dist/static/styles/variables.css.js +2 -0
  63. package/dist/stores/template.js +15 -0
  64. package/dist/stores/unsubscribe.js +37 -34
  65. package/dist/utils/migrationBannerHtml.js +21 -0
  66. package/package.json +1 -1
  67. package/dist/extensions/Blocks/Recommendation/validation/filterSchema.js +0 -29
  68. package/dist/src/extensions/Blocks/Recommendation/validation/filterSchema.d.ts +0 -15
@@ -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,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
- 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 = (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);
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: 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"],
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 l = this.parser.parseFromString(o, "text/html"), a = l.querySelectorAll(
158
161
  "td.esd-cart-items-block, td.esd-browsed-items-block, td.esd-purchased-items-block"
159
162
  );
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,
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,
169
174
  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>`,
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>`,
178
183
  "text/html"
179
184
  ).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);
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);
185
190
  }
186
- }), c.documentElement.outerHTML);
187
- } catch (r) {
188
- return console.error("ItemsBlockMigrator failed:", r), t;
191
+ }), l.documentElement.outerHTML);
192
+ } catch (o) {
193
+ return console.error("ItemsBlockMigrator failed:", o), t;
189
194
  }
190
195
  }
191
196
  /**
@@ -196,18 +201,18 @@ class V {
196
201
  */
197
202
  extractConfiguration(t) {
198
203
  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"];
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"];
200
205
  let b;
201
206
  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;
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;
203
208
  return {
204
209
  orientation: b,
205
- itemsType: r,
206
- itemId: a,
207
- currencySymbol: _,
208
- currencyLocation: f,
209
- formattedPrice: d,
210
- configBlockAttributes: s,
210
+ itemsType: o,
211
+ itemId: i,
212
+ currencySymbol: c,
213
+ currencyLocation: d,
214
+ formattedPrice: p,
215
+ configBlockAttributes: u,
211
216
  nameStyles: I,
212
217
  buttonStyles: m,
213
218
  priceStyles: h,
@@ -222,27 +227,27 @@ class V {
222
227
  * @param itemsType - The type of items (CART_ITEMS, BROWSED_ITEMS, PURCHASED_ITEMS)
223
228
  * @param itemNumber - The item number (1-based index)
224
229
  */
225
- extractConfigBlockAttributes(t, r, c) {
226
- const i = t.querySelector("esd-config-block"), n = {};
227
- if (!i)
230
+ extractConfigBlockAttributes(t, o, l) {
231
+ const a = t.querySelector("esd-config-block"), n = {};
232
+ if (!a)
228
233
  return this.getDefaultConfigBlockAttributes();
229
- if (Array.from(i.attributes).forEach((o) => {
230
- o.name.startsWith("data-") && (n[o.name] = o.value);
234
+ if (Array.from(a.attributes).forEach((e) => {
235
+ e.name.startsWith("data-") && (n[e.name] = e.value);
231
236
  }), 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);
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);
236
241
  }
237
242
  }
238
243
  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"] = _;
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;
242
247
  }
243
248
  (!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;
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;
246
251
  }
247
252
  /**
248
253
  * Returns default esd-config-block attributes based on the old template structure
@@ -302,17 +307,17 @@ class V {
302
307
  * contains display condition Jinja scripts that should NOT be removed.
303
308
  */
304
309
  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(
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(
308
313
  /\{%\s*if\s+(ins_apr|browsed_item|purchased_item)_total_product_kind\s*(&gt;|>)\s*\d+\s*%\}/g,
309
314
  ""
310
- ), i = i.replace(
315
+ ), a = a.replace(
311
316
  /\{%\s*if\s+(ins_apr|browsed_item|purchased_item)_price_\d+\s*(!&#61;|!=)\s*\1_originalprice_\d+\s*%\}/g,
312
317
  ""
313
- ), i = i.replace(/\{%\s*endif\s*%\}/g, ""), c && (i = i.replace(r, c[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, `
314
319
 
315
- `), i;
320
+ `), a;
316
321
  }
317
322
  /**
318
323
  * Replaces template variables with default values from productPairs
@@ -324,32 +329,32 @@ class V {
324
329
  * - {{purchased_item_formattedprice_5}} → '1,490.49' (PURCHASED_ITEMS)
325
330
  */
326
331
  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+)$/);
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+)$/);
330
335
  if (!n)
331
- 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;
336
+ return 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;
341
346
  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);
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);
344
349
  }
345
- const I = p[s];
346
- return I !== void 0 ? String(I) : (console.warn(`Default value not found: ${d}.${l}.${s}`), c);
350
+ const I = y[u];
351
+ return I !== void 0 ? String(I) : (console.warn(`Default value not found: ${p}.${_}.${u}`), l);
347
352
  });
348
353
  }
349
354
  }
350
- function G(e) {
351
- return new V().migrate(e);
355
+ function Q(r) {
356
+ return new z().migrate(r);
352
357
  }
353
358
  export {
354
- G as migrateItemsBlock
359
+ Q as migrateItemsBlock
355
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(".ins-recommendation-v3-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
+ };