@useinsider/guido 2.1.0-beta.f42da92 → 2.1.0-beta.f8696fd

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