@useinsider/guido 2.1.0-beta.bcfc012 → 2.1.0-beta.bd5d1ea

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