@useinsider/guido 2.1.0-beta.5160aec → 2.1.0-beta.587ec44

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 (69) hide show
  1. package/README.md +39 -1
  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/HeaderWrapper.vue.js +9 -9
  6. package/dist/composables/useBlocksConfig.js +26 -16
  7. package/dist/composables/useSave.js +16 -12
  8. package/dist/composables/useStripo.js +58 -54
  9. package/dist/composables/useStripoEventHandler.js +27 -12
  10. package/dist/composables/useSyncModuleExtractor.js +45 -0
  11. package/dist/config/migrator/itemsBlockMigrator.js +140 -123
  12. package/dist/enums/defaults.js +8 -4
  13. package/dist/enums/unsubscribe.js +25 -21
  14. package/dist/extensions/Blocks/Items/block.js +19 -28
  15. package/dist/extensions/Blocks/Items/controls/button/link.js +19 -31
  16. package/dist/extensions/Blocks/Items/controls/cardComposition.js +124 -85
  17. package/dist/extensions/Blocks/Items/controls/image/link.js +19 -31
  18. package/dist/extensions/Blocks/Items/controls/name/trimming.js +28 -40
  19. package/dist/extensions/Blocks/Items/controls/price/currencyLocation.js +35 -47
  20. package/dist/extensions/Blocks/Items/controls/price/currencySymbol.js +49 -54
  21. package/dist/extensions/Blocks/Items/controls/price/formattedPrice.js +42 -51
  22. package/dist/extensions/Blocks/Items/controls/price/hideDiscount.js +23 -36
  23. package/dist/extensions/Blocks/Items/controls/price/priceOrientation.js +45 -57
  24. package/dist/extensions/Blocks/Items/controls/price/singlePrice.js +42 -60
  25. package/dist/extensions/Blocks/Items/controls/settingsControl.js +189 -196
  26. package/dist/extensions/Blocks/Items/enums/settingsEnums.js +0 -2
  27. package/dist/extensions/Blocks/Items/extension.js +8 -9
  28. package/dist/extensions/Blocks/Items/settingsPanel.js +10 -15
  29. package/dist/extensions/Blocks/Items/template.js +181 -175
  30. package/dist/extensions/Blocks/Items/utils/nodeConfigUtils.js +65 -65
  31. package/dist/extensions/Blocks/Recommendation/utils/preserveTextStyles.js +3 -3
  32. package/dist/extensions/Blocks/common-control.js +91 -92
  33. package/dist/extensions/ModulesTabIcons/extension.js +17 -0
  34. package/dist/guido.css +1 -1
  35. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js +163 -95
  36. package/dist/services/stripoApi.js +48 -12
  37. package/dist/src/@types/config/schemas.d.ts +8 -0
  38. package/dist/src/@types/events.d.ts +38 -2
  39. package/dist/src/composables/useConfig.d.ts +4 -0
  40. package/dist/src/composables/useSyncModuleExtractor.d.ts +4 -0
  41. package/dist/src/enums/defaults.d.ts +4 -0
  42. package/dist/src/enums/unsubscribe.d.ts +3 -0
  43. package/dist/src/extensions/Blocks/Items/block.d.ts +0 -1
  44. package/dist/src/extensions/Blocks/Items/controls/button/link.d.ts +0 -1
  45. package/dist/src/extensions/Blocks/Items/controls/cardComposition.d.ts +5 -5
  46. package/dist/src/extensions/Blocks/Items/controls/image/link.d.ts +0 -1
  47. package/dist/src/extensions/Blocks/Items/controls/name/trimming.d.ts +0 -1
  48. package/dist/src/extensions/Blocks/Items/controls/price/currencyLocation.d.ts +0 -1
  49. package/dist/src/extensions/Blocks/Items/controls/price/currencySymbol.d.ts +0 -1
  50. package/dist/src/extensions/Blocks/Items/controls/price/formattedPrice.d.ts +0 -1
  51. package/dist/src/extensions/Blocks/Items/controls/price/hideDiscount.d.ts +0 -1
  52. package/dist/src/extensions/Blocks/Items/controls/price/priceOrientation.d.ts +0 -1
  53. package/dist/src/extensions/Blocks/Items/controls/price/singlePrice.d.ts +0 -5
  54. package/dist/src/extensions/Blocks/Items/controls/settingsControl.d.ts +10 -12
  55. package/dist/src/extensions/Blocks/Items/utils/nodeConfigUtils.d.ts +2 -1
  56. package/dist/src/extensions/Blocks/common-control.d.ts +4 -5
  57. package/dist/src/extensions/ModulesTabIcons/extension.d.ts +2 -0
  58. package/dist/src/mock/api/settings.d.ts +2 -0
  59. package/dist/src/services/stripoApi.d.ts +5 -0
  60. package/dist/src/stores/config.d.ts +36 -0
  61. package/dist/src/stores/editor.d.ts +23 -0
  62. package/dist/static/styles/components/notification.css.js +1 -0
  63. package/dist/static/styles/components/version-history.css.js +10 -2
  64. package/dist/static/styles/components/wide-panel.css.js +18 -2
  65. package/dist/stores/editor.js +2 -1
  66. package/dist/utils/templatePreparation.js +4 -4
  67. package/package.json +1 -1
  68. package/dist/extensions/Blocks/Items/store/items-block.js +0 -79
  69. package/dist/src/extensions/Blocks/Items/store/items-block.d.ts +0 -45
@@ -1,26 +1,26 @@
1
- import { useActionsApi as _ } from "./useActionsApi.js";
2
- import { useBlocksConfig as B } from "./useBlocksConfig.js";
3
- import { useConfig as v } from "./useConfig.js";
4
- import { useCustomInterfaceAppearance as A } from "./useCustomInterfaceAppearance.js";
5
- import { useStripoEventHandler as F } from "./useStripoEventHandler.js";
6
- import { useToaster as D } from "./useToaster.js";
7
- import { displayConditions as I } from "../enums/displayConditions.js";
8
- import { useStripoApi as M } from "../services/stripoApi.js";
9
- import U from "../static/styles/customEditorStyle.css.js";
10
- import { useEditorStore as P } from "../stores/editor.js";
11
- import { dynamicContentToMergeTags as R } from "../utils/genericUtil.js";
12
- import H from "../package.json.js";
13
- const W = (c) => {
14
- const { features: l, template: y } = v(), { handleError: u } = D(), { getToken: C, getCustomFonts: S } = M(), { handleEvent: E } = F(), { getStripoBlocksConfig: h } = B(), w = async (i, n = []) => {
15
- var m, g, f;
16
- const o = P(), { html: r, css: p } = i, { baseBlocks: s, extensions: t } = await h(), a = ((m = l.value) == null ? void 0 : m.displayConditions) ?? !0, k = ((g = l.value) == null ? void 0 : g.modulesDisabled) ?? !1, T = ((f = y.value) == null ? void 0 : f.forceRecreate) ?? !1;
1
+ import { useActionsApi as M } from "./useActionsApi.js";
2
+ import { useBlocksConfig as A } from "./useBlocksConfig.js";
3
+ import { useConfig as F } from "./useConfig.js";
4
+ import { useCustomInterfaceAppearance as D } from "./useCustomInterfaceAppearance.js";
5
+ import { useStripoEventHandler as I } from "./useStripoEventHandler.js";
6
+ import { useToaster as U } from "./useToaster.js";
7
+ import { displayConditions as P } from "../enums/displayConditions.js";
8
+ import { useStripoApi as R } from "../services/stripoApi.js";
9
+ import H from "../static/styles/customEditorStyle.css.js";
10
+ import { useEditorStore as S } from "../stores/editor.js";
11
+ import { dynamicContentToMergeTags as O } from "../utils/genericUtil.js";
12
+ import q from "../package.json.js";
13
+ const Z = (c) => {
14
+ const { features: l, template: C } = F(), { handleError: u } = U(), { getToken: E, getCustomFonts: h, getSyncModulesStatus: w } = R(), { handleEvent: b } = I(), { getStripoBlocksConfig: k } = A(), T = async (i, n = [], r = !1) => {
15
+ var g, f, y;
16
+ const e = S(), { html: p, css: a } = i, { baseBlocks: t, extensions: d } = await k(), m = ((g = l.value) == null ? void 0 : g.displayConditions) ?? !0, _ = ((f = l.value) == null ? void 0 : f.modulesDisabled) ?? !1, B = ((y = C.value) == null ? void 0 : y.forceRecreate) ?? !1;
17
17
  window.UIEditor.initEditor(
18
18
  document.querySelector("#guido-editor"),
19
19
  {
20
20
  metadata: c,
21
- html: r,
22
- css: p,
23
- forceRecreate: T,
21
+ html: p,
22
+ css: a,
23
+ forceRecreate: B,
24
24
  locale: "en",
25
25
  undoButtonSelector: "#guido__undo-button",
26
26
  redoButtonSelector: "#guido__redo-button",
@@ -30,19 +30,20 @@ const W = (c) => {
30
30
  customAppearanceMergetags: !0,
31
31
  customAppearanceMergetagsBorderColor: "#f1f3fe",
32
32
  customAppearanceMergetagsBackgroundColor: "#f1f3fe",
33
- customViewStyles: U,
34
- conditionsEnabled: a,
35
- customConditionsEnabled: a,
36
- conditionCategories: I,
33
+ customViewStyles: H,
34
+ conditionsEnabled: m,
35
+ customConditionsEnabled: m,
36
+ conditionCategories: P,
37
37
  enableXSSSecurity: !0,
38
- modulesDisabled: k,
38
+ modulesDisabled: _,
39
+ syncModulesEnabled: r,
39
40
  messageSettingsEnabled: !0,
40
41
  displayGmailAnnotations: !0,
41
42
  displayHiddenPreheader: !1,
42
43
  displayTitle: !1,
43
44
  displayUTM: !1,
44
45
  selectElementAfterDrop: !0,
45
- ...s ? { baseBlocks: s } : {},
46
+ ...t ? { baseBlocks: t } : {},
46
47
  editorFonts: {
47
48
  showDefaultStandardFonts: !0,
48
49
  showDefaultNotStandardFonts: !0,
@@ -50,68 +51,71 @@ const W = (c) => {
50
51
  },
51
52
  mergeTags: [
52
53
  {
53
- entries: R(c.preselectedDynamicContentList)
54
+ entries: O(c.preselectedDynamicContentList)
54
55
  }
55
56
  ],
56
- async onTokenRefreshRequest(e) {
57
+ async onTokenRefreshRequest(o) {
57
58
  try {
58
- const d = await C();
59
- e(d);
60
- } catch (d) {
61
- u(d, "Failed to refresh token");
59
+ const s = await E();
60
+ o(s);
61
+ } catch (s) {
62
+ u(s, "Failed to refresh token");
62
63
  }
63
64
  },
64
65
  onTemplateLoaded() {
65
66
  try {
66
- const { importCss: e } = A(), { activateCustomViewStyles: d, updateTimerInClonedTemplate: V } = _();
67
- e(), d(), V(), c.onReady(), o.isStripoInitialized = !0, o.loadingStatus = !1, setTimeout(() => {
68
- o.hasChanges = !1;
67
+ const { importCss: o } = D(), { activateCustomViewStyles: s, updateTimerInClonedTemplate: v } = M();
68
+ o(), s(), v(), c.onReady(), e.isStripoInitialized = !0, e.loadingStatus = !1, setTimeout(() => {
69
+ e.hasChanges = !1;
69
70
  }, 1e3);
70
- } catch (e) {
71
- u(e, "Failed to load custom interface appearance");
71
+ } catch (o) {
72
+ u(o, "Failed to load custom interface appearance");
72
73
  }
73
74
  },
74
- onCodeEditorVisibilityChanged(e) {
75
- o.isCodeEditorOpen = e;
75
+ onCodeEditorVisibilityChanged(o) {
76
+ e.isCodeEditorOpen = o;
76
77
  },
77
- onEditorVisualModeChanged(e) {
78
- o.editorVisualMode = e.toLowerCase();
78
+ onEditorVisualModeChanged(o) {
79
+ e.editorVisualMode = o.toLowerCase();
79
80
  },
80
- onVersionHistoryVisibilityChanged(e) {
81
- o.isVersionHistoryOpen = e;
81
+ onVersionHistoryVisibilityChanged(o) {
82
+ e.isVersionHistoryOpen = o;
82
83
  },
83
84
  onDataChanged() {
84
- o.hasChanges = !0;
85
+ e.hasChanges = !0;
85
86
  },
86
- onEvent: E,
87
+ onEvent: b,
87
88
  ignoreClickOutsideSelectors: [
88
89
  "#guido-dynamic-content-modal",
89
90
  ".in-on-board-wrapper",
90
91
  ".in-drawer__container"
91
92
  ],
92
- extensions: t
93
+ extensions: d
93
94
  }
94
95
  );
95
- }, b = (i) => new Promise((n, o) => {
96
- var a;
96
+ }, V = (i) => new Promise((n, r) => {
97
+ var d;
97
98
  if (document.getElementById("UiEditorScript")) {
98
99
  i(), n();
99
100
  return;
100
101
  }
101
- const r = H.guido, s = `https://email-static.useinsider.com/guido/${(a = r == null ? void 0 : r.stripo) == null ? void 0 : a.version}/UIEditor.js`, t = document.createElement("script");
102
- t.id = "UiEditorScript", t.type = "module", t.src = s, t.onload = () => {
102
+ const e = q.guido, a = `https://email-static.useinsider.com/guido/${(d = e == null ? void 0 : e.stripo) == null ? void 0 : d.version}/UIEditor.js`, t = document.createElement("script");
103
+ t.id = "UiEditorScript", t.type = "module", t.src = a, t.onload = () => {
103
104
  i(), n();
104
105
  }, t.onerror = () => {
105
- o(new Error(`Failed to load Stripo UIEditor script from S3: ${s}`));
106
+ r(new Error(`Failed to load Stripo UIEditor script from S3: ${a}`));
106
107
  }, document.body.appendChild(t);
107
108
  });
108
109
  return { initPlugin: async (i) => {
109
- await b(async () => {
110
- const n = await S();
111
- await w(i, n);
110
+ await V(async () => {
111
+ const n = S(), [r, e] = await Promise.all([
112
+ h(),
113
+ w()
114
+ ]);
115
+ n.syncModulesEnabled = e, await T(i, r, e);
112
116
  });
113
117
  } };
114
118
  };
115
119
  export {
116
- W as useStripo
120
+ Z as useStripo
117
121
  };
@@ -1,20 +1,35 @@
1
- import { useOnboardingStore as i } from "../stores/onboarding.js";
2
- const c = () => {
3
- const e = {
4
- block_dropped: ({ blockName: t }) => {
5
- if (t === "BLOCK_TEXT") {
6
- const n = i(), o = !n.shouldShowOnboarding("textBlockOnboarding"), r = n.isActive("textBlockOnboarding");
7
- if (o || r)
1
+ import { useStripoApi as i } from "../services/stripoApi.js";
2
+ import { useEditorStore as u } from "../stores/editor.js";
3
+ import { useOnboardingStore as l } from "../stores/onboarding.js";
4
+ import { useUnsubscribeStore as b } from "../stores/unsubscribe.js";
5
+ const v = () => {
6
+ const { updateSyncModule: d, getSyncModule: r } = i(), n = u(), s = b(), a = {
7
+ block_dropped: ({ blockName: e }) => {
8
+ if (e === "BLOCK_TEXT") {
9
+ const o = l(), t = !o.shouldShowOnboarding("textBlockOnboarding"), c = o.isActive("textBlockOnboarding");
10
+ if (t || c)
8
11
  return;
9
- n.start("textBlockOnboarding");
12
+ o.start("textBlockOnboarding");
10
13
  }
14
+ },
15
+ module_saved: async (e) => {
16
+ n.syncModulesEnabled && (console.debug("[module_saved] Saved module data:", e), await d(e));
17
+ },
18
+ module_dropped: async (e) => {
19
+ if (!n.syncModulesEnabled)
20
+ return;
21
+ const { moduleId: o } = e, t = await r(o);
22
+ console.debug("[module_dropped] Sync module data:", t), t.unsubscriptionPreferencePages.length && await s.fetchTemplates();
23
+ },
24
+ module_updated: async (e) => {
25
+ n.syncModulesEnabled && (console.debug("[module_updated] Updated module data:", e), await d(e));
11
26
  }
12
27
  };
13
- return { handleEvent: async (t, n) => {
14
- const o = e[t];
15
- o && await o(n);
28
+ return { handleEvent: async (e, o) => {
29
+ const t = a[e];
30
+ console.debug("Stripo Event: ", e, o), t && await t(o);
16
31
  } };
17
32
  };
18
33
  export {
19
- c as useStripoEventHandler
34
+ v as useStripoEventHandler
20
35
  };
@@ -0,0 +1,45 @@
1
+ import { UNSUBSCRIBE_SYNC_MODULE_TYPES as T } from "../enums/unsubscribe.js";
2
+ import { DATA_ATTRIBUTES as p } from "../extensions/Blocks/Unsubscribe/utils/constants.js";
3
+ import { useEditorStore as f } from "../stores/editor.js";
4
+ const y = ".esd-synchronizable-module", A = '[esd-extension-block-id="unsubscribe-block"]', _ = "esd-custom-block-id", B = () => {
5
+ const d = f();
6
+ return { extractSyncModuleData: (E) => {
7
+ const S = {
8
+ unsubscribePayload: [],
9
+ stripoModules: []
10
+ };
11
+ if (!d.syncModulesEnabled)
12
+ return S;
13
+ const b = new DOMParser().parseFromString(E, "text/html").querySelectorAll(y), r = [], s = [];
14
+ return b.forEach((o) => {
15
+ const t = o.getAttribute(_);
16
+ if (!t)
17
+ return;
18
+ const n = o.querySelectorAll(A);
19
+ if (n.length === 0) {
20
+ s.push(Number(t));
21
+ return;
22
+ }
23
+ n.forEach((c) => {
24
+ const u = c.getAttribute(p.PAGE_LIST), i = c.getAttribute(p.PAGE_TYPE);
25
+ if (!u || !i)
26
+ return;
27
+ const m = parseInt(i), a = T[m];
28
+ if (!a)
29
+ return;
30
+ const l = u.split(",").map((e) => parseInt(e.trim())).filter((e) => !Number.isNaN(e));
31
+ l.length !== 0 && r.push({
32
+ stripoModuleId: t,
33
+ unsubscriptionPreferencePages: l,
34
+ type: a
35
+ });
36
+ });
37
+ }), {
38
+ unsubscribePayload: r,
39
+ stripoModules: s
40
+ };
41
+ } };
42
+ };
43
+ export {
44
+ B as useSyncModuleExtractor
45
+ };
@@ -1,9 +1,9 @@
1
- var L = Object.defineProperty;
2
- var K = (o, t, r) => t in o ? L(o, t, { enumerable: !0, configurable: !0, writable: !0, value: r }) : o[t] = r;
3
- var R = (o, t, r) => K(o, typeof t != "symbol" ? t + "" : t, r);
4
- import { productPairs as B } from "../../extensions/Blocks/Items/enums/productEnums.js";
5
- import { ItemInCartOptions as E, DefaultConfigValues as g, SETTINGS_ENUMS as _ } from "../../extensions/Blocks/Items/enums/settingsEnums.js";
6
- import { getDefaultTemplate as U } from "../../extensions/Blocks/Items/template.js";
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
7
  const w = {
8
8
  img: {
9
9
  pairsKey: "imageSrc",
@@ -74,102 +74,118 @@ const w = {
74
74
  function F() {
75
75
  return String(Date.now() + Math.floor(Math.random() * 1e3));
76
76
  }
77
- function q(o) {
78
- return o ? {
79
- CartItems: _.ITEMS_TYPE.CART_ITEMS,
80
- BrowsedItems: _.ITEMS_TYPE.BROWSED_ITEMS,
81
- PurchasedItems: _.ITEMS_TYPE.PURCHASED_ITEMS,
82
- CART_ITEMS: _.ITEMS_TYPE.CART_ITEMS,
83
- BROWSED_ITEMS: _.ITEMS_TYPE.BROWSED_ITEMS,
84
- PURCHASED_ITEMS: _.ITEMS_TYPE.PURCHASED_ITEMS
85
- }[o] || _.ITEMS_TYPE.CART_ITEMS : _.ITEMS_TYPE.CART_ITEMS;
77
+ function q(r) {
78
+ 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;
86
86
  }
87
- function M(o) {
88
- const t = (e, a) => e == null ? a : e === "1" || e === "true", r = (e, a) => e || a, c = o["data-type"] || o["data-source"], n = q(c);
89
- let i = o["data-cart_items_select_control_value"] || g.cartItemsSelectControlValue;
90
- if (i && !i.includes("{{") && /^\d+$/.test(i)) {
91
- const e = parseInt(i) - 1, a = E[n];
92
- a && a[e] && (i = a[e].value);
87
+ 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);
93
93
  }
94
94
  return {
95
95
  initialized: !0,
96
- blockInstanceId: r(o["data-block-instance-id"], F()),
97
- source: n,
98
- type: n,
99
- itemsSelectValue: i,
100
- orientation: o["data-card_orientation_control_value"] || _.ORIENTATION.VERTICAL,
101
- nameTrimming: t(o["data-product_name_control_trim"], !0),
102
- priceHideDiscount: t(o["data-product_price_control_nodup"], !0),
103
- priceFormatted: t(o["data-product_price_control_formated"], !0),
104
- priceSinglePrice: t(o["data-product_price_control_single_price"], !1),
105
- priceCurrencySymbol: r(
106
- o["data-product_price_currency_symbol"],
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,
101
+ nameTrimming: t(r["data-product_name_control_trim"], !0),
102
+ priceHideDiscount: t(r["data-product_price_control_nodup"], !0),
103
+ priceFormatted: t(r["data-product_price_control_formated"], !0),
104
+ priceSinglePrice: t(r["data-product_price_control_single_price"], !1),
105
+ priceCurrencySymbol: e(
106
+ r["data-product_price_control_currency_symbol"],
107
107
  g.productPriceCurrencySymbolControlValue
108
108
  ),
109
- priceCurrencyLocation: r(
110
- o["data-product_price_currency_location"],
109
+ priceCurrencyLocation: e(
110
+ r["data-product_price_currency_location"],
111
111
  g.productPriceCurrencyLocationControlValue
112
112
  ),
113
- priceOrientation: o["data-product_original_price_control_orientation"] || "horizontal",
114
- quantityControlEnabled: t(o["data-product_quantity_control_enabled"], !0),
115
- buttonLink: r(o["data-product_button_link"], g.productButtonLinkControlValue),
116
- imageLink: r(o["data-product_image_link"], g.productImageLinkControlValue),
117
- buttonLabel: r(o["data-product_button_control_label"], "Buy"),
118
- buttonFullWidth: t(o["data-product_button_control_atw"], !0),
119
- imageVisible: t(o["data-product_image_control_enabled"], !0),
120
- nameVisible: t(o["data-product_name_control_enabled"], !0),
121
- quantityVisible: t(o["data-product_quantity_control_enabled"], !0),
122
- priceVisible: t(o["data-product_price_control_enabled"], !0),
123
- originalPriceVisible: t(o["data-product_original_price_control_enabled"], !0),
124
- buttonVisible: t(o["data-product_button_control_enabled"], !0)
113
+ priceOrientation: r["data-product_original_price_control_orientation"] || "horizontal",
114
+ 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
+ buttonFullWidth: t(r["data-product_button_control_atw"], !0),
119
+ imageVisible: t(r["data-product_image_control_enabled"], !0),
120
+ nameVisible: t(r["data-product_name_control_enabled"], !0),
121
+ quantityVisible: t(r["data-product_quantity_control_enabled"], !0),
122
+ priceVisible: t(r["data-product_price_control_enabled"], !0),
123
+ originalPriceVisible: t(r["data-product_original_price_control_enabled"], !0),
124
+ buttonVisible: t(r["data-product_button_control_enabled"], !0)
125
125
  };
126
126
  }
127
- const x = {
127
+ const $ = {
128
128
  ins_apr: "CART_ITEMS",
129
129
  browsed_item: "BROWSED_ITEMS",
130
130
  purchased_item: "PURCHASED_ITEMS"
131
131
  };
132
- class N {
132
+ function x(r, t) {
133
+ const e = {
134
+ CART_ITEMS: `{{Abandoned Cart Item (${t}) Image}}`,
135
+ BROWSED_ITEMS: `{{Browsed Item (${t}) Image}}`,
136
+ PURCHASED_ITEMS: `{{Purchased Item (${t}) Image}}`
137
+ };
138
+ return e[r] || e.CART_ITEMS;
139
+ }
140
+ function O(r, t) {
141
+ const e = {
142
+ CART_ITEMS: `{{Abandoned Cart Item (${t}) Url}}`,
143
+ BROWSED_ITEMS: `{{Browsed Item (${t}) Url}}`,
144
+ PURCHASED_ITEMS: `{{Purchased Item (${t}) Url}}`
145
+ };
146
+ return e[r] || e.CART_ITEMS;
147
+ }
148
+ class V {
133
149
  constructor() {
134
- R(this, "parser");
150
+ M(this, "parser");
135
151
  this.parser = new DOMParser();
136
152
  }
137
153
  migrate(t) {
138
154
  try {
139
- let r = this.removeJinjaConditionals(t);
140
- r = this.replaceTemplateVariables(r);
141
- const c = this.parser.parseFromString(r, "text/html"), n = c.querySelectorAll(
155
+ let e = this.removeJinjaConditionals(t);
156
+ e = this.replaceTemplateVariables(e);
157
+ const i = this.parser.parseFromString(e, "text/html"), l = i.querySelectorAll(
142
158
  "td.esd-cart-items-block, td.esd-browsed-items-block, td.esd-purchased-items-block"
143
159
  );
144
- return n.length === 0 ? (console.warn("ItemsBlockMigrator: No blocks found with items block selectors"), r) : (n.forEach((i) => {
145
- const e = this.extractConfiguration(i), a = U({
146
- orientation: e.orientation,
147
- itemsType: e.itemsType,
148
- itemId: e.itemId,
149
- currencySymbol: e.currencySymbol,
150
- currencyLocation: e.currencyLocation,
151
- formattedPrice: e.formattedPrice,
152
- configBlockAttributes: e.configBlockAttributes,
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,
153
169
  migrate: !0,
154
- nameStyles: e.nameStyles,
155
- buttonStyles: e.buttonStyles,
156
- priceStyles: e.priceStyles,
157
- originalPriceStyles: e.originalPriceStyles,
158
- quantityStyles: e.quantityStyles,
159
- nodeConfig: M(e.configBlockAttributes)
160
- }), l = this.parser.parseFromString(
161
- `<table><tbody><tr>${a}</tr></tbody></table>`,
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>`,
162
178
  "text/html"
163
179
  ).querySelector("td");
164
- if (l && i.parentNode) {
165
- const f = M(e.configBlockAttributes);
166
- l.setAttribute("esd-ext-config", JSON.stringify(f));
167
- const u = l.querySelector("esd-config-block");
168
- u && u.remove(), i.parentNode.replaceChild(l, i);
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);
169
185
  }
170
- }), c.documentElement.outerHTML);
171
- } catch (r) {
172
- return console.error("ItemsBlockMigrator failed:", r), t;
186
+ }), i.documentElement.outerHTML);
187
+ } catch (e) {
188
+ return console.error("ItemsBlockMigrator failed:", e), t;
173
189
  }
174
190
  }
175
191
  /**
@@ -180,23 +196,23 @@ class N {
180
196
  */
181
197
  extractConfiguration(t) {
182
198
  var C, D, P;
183
- 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", n = parseInt(c) - 1, i = E[r], e = ((P = i == null ? void 0 : i[n]) == null ? void 0 : P.value) || i[0].value, a = t.querySelector('[product-attr="price"]'), d = (a == null ? void 0 : a.getAttribute("data-currency_symbol")) || "USD", f = ((a == null ? void 0 : a.getAttribute("data-curency")) || "before") === "after" ? "1" : "0", u = (a == null ? void 0 : a.getAttribute("data-formated")) !== "false", s = this.extractConfigBlockAttributes(t, r), b = s["data-card_orientation_control_value"];
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"];
184
200
  let S;
185
201
  b ? S = b === "horizontal" ? "horizontal" : "vertical" : S = t.querySelector('[colspan="2"]') !== null ? "vertical" : "horizontal";
186
- 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, 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, I = t.querySelector('[product-attr="quantity"]'), v = (I == null ? void 0 : I.getAttribute("style")) || void 0;
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;
187
203
  return {
188
204
  orientation: S,
189
- itemsType: r,
190
- itemId: e,
191
- currencySymbol: d,
205
+ itemsType: e,
206
+ itemId: a,
207
+ currencySymbol: _,
192
208
  currencyLocation: f,
193
209
  formattedPrice: u,
194
210
  configBlockAttributes: s,
195
211
  nameStyles: T,
196
212
  buttonStyles: m,
197
- priceStyles: h,
198
- originalPriceStyles: k,
199
- quantityStyles: v
213
+ priceStyles: k,
214
+ originalPriceStyles: h,
215
+ quantityStyles: L
200
216
  };
201
217
  }
202
218
  /**
@@ -204,28 +220,29 @@ class N {
204
220
  * Returns a key-value mapping of all configuration attributes
205
221
  * @param block - The block element containing the esd-config-block
206
222
  * @param itemsType - The type of items (CART_ITEMS, BROWSED_ITEMS, PURCHASED_ITEMS)
223
+ * @param itemNumber - The item number (1-based index)
207
224
  */
208
- extractConfigBlockAttributes(t, r) {
209
- const c = t.querySelector("esd-config-block"), n = {};
210
- if (!c)
225
+ extractConfigBlockAttributes(t, e, i) {
226
+ const l = t.querySelector("esd-config-block"), n = {};
227
+ if (!l)
211
228
  return this.getDefaultConfigBlockAttributes();
212
- if (Array.from(c.attributes).forEach((e) => {
213
- e.name.startsWith("data-") && (n[e.name] = e.value);
229
+ if (Array.from(l.attributes).forEach((o) => {
230
+ o.name.startsWith("data-") && (n[o.name] = o.value);
214
231
  }), n["data-cart_items_select_control_value"]) {
215
- const e = n["data-cart_items_select_control_value"];
216
- if (/^\d+$/.test(e)) {
217
- const a = parseInt(e) - 1, d = E[r];
218
- d && d[a] && (n["data-cart_items_select_control_value"] = d[a].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);
219
236
  }
220
237
  }
221
238
  if (n["data-product_price_control_curency"]) {
222
- const e = n["data-product_price_control_curency"];
223
- let a = e;
224
- e === "before" ? a = "0" : e === "after" && (a = "1"), n["data-product_price_control_curency"] = a, n["data-product_price_currency_location"] = a;
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"] = _;
225
242
  }
226
- (!n["data-product_price_currency_symbol"] || n["data-product_price_currency_symbol"].trim() === "") && (n["data-product_price_currency_symbol"] = "USD");
227
- const i = { ...this.getDefaultConfigBlockAttributes(), ...n };
228
- return i["data-type"] = r, i["data-source"] = r, i;
243
+ (!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;
229
246
  }
230
247
  /**
231
248
  * Returns default esd-config-block attributes based on the old template structure
@@ -254,7 +271,7 @@ class N {
254
271
  "data-product_price_control_color": "#060606",
255
272
  "data-product_price_control_curency": "0",
256
273
  "data-product_price_currency_location": "0",
257
- "data-product_price_currency_symbol": "USD",
274
+ "data-product_price_control_currency_symbol": "USD",
258
275
  "data-product_price_control_formated": "1",
259
276
  "data-product_price_control_nodup": "1",
260
277
  "data-product_price_control_single_price": "false",
@@ -282,16 +299,16 @@ class N {
282
299
  * - Purchased Items: purchased_item_total_product_kind, purchased_item_price_N, purchased_item_originalprice_N
283
300
  */
284
301
  removeJinjaConditionals(t) {
285
- let r = t.replace(
302
+ let e = t.replace(
286
303
  /\{%\s*if\s+(ins_apr|browsed_item|purchased_item)_total_product_kind\s*(&gt;|>)\s*\d+\s*%\}/g,
287
304
  ""
288
305
  );
289
- return r = r.replace(
306
+ return e = e.replace(
290
307
  /\{%\s*if\s+(ins_apr|browsed_item|purchased_item)_price_\d+\s*(!&#61;|!=)\s*\1_originalprice_\d+\s*%\}/g,
291
308
  ""
292
- ), r = r.replace(/\{%\s*endif\s*%\}/g, ""), r = r.replace(/\n\s*\n\s*\n/g, `
309
+ ), e = e.replace(/\{%\s*endif\s*%\}/g, ""), e = e.replace(/\n\s*\n\s*\n/g, `
293
310
 
294
- `), r;
311
+ `), e;
295
312
  }
296
313
  /**
297
314
  * Replaces template variables with default values from productPairs
@@ -303,32 +320,32 @@ class N {
303
320
  * - {{purchased_item_formattedprice_5}} → '1,490.49' (PURCHASED_ITEMS)
304
321
  */
305
322
  replaceTemplateVariables(t) {
306
- const { PAIRS_FOR_EXTENSION: r } = B;
307
- return t.replace(/{{([^}]+)}}/g, (c, n) => {
308
- const i = n.match(/^(ins_apr|browsed_item|purchased_item)_([a-z_]+)_(\d+)$/);
309
- if (!i)
310
- return c;
311
- const [, e, a, d] = i, l = x[e];
312
- if (!l)
313
- return console.warn(`Unknown variable prefix: ${e}`), c;
314
- const f = w[a];
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+)$/);
326
+ 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];
315
332
  if (!f)
316
- return console.warn(`Unknown variable suffix mapping for: ${a}`), c;
317
- const { pairsKey: u, defaultKey: s, isArray: b } = f, p = r[u][l];
333
+ return console.warn(`Unknown variable suffix mapping for: ${o}`), i;
334
+ const { pairsKey: u, defaultKey: s, isArray: b } = f, p = e[u][c];
318
335
  if (!p)
319
- return console.warn(`No data found for: ${u}.${l}`), c;
336
+ return console.warn(`No data found for: ${u}.${c}`), i;
320
337
  if (b) {
321
- const y = parseInt(d) - 1, m = p[s];
322
- return Array.isArray(m) && m[y] ? m[y] : (console.warn(`Array value not found: ${u}.${l}.${s}[${y}]`), c);
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);
323
340
  }
324
341
  const T = p[s];
325
- return T !== void 0 ? String(T) : (console.warn(`Default value not found: ${u}.${l}.${s}`), c);
342
+ return T !== void 0 ? String(T) : (console.warn(`Default value not found: ${u}.${c}.${s}`), i);
326
343
  });
327
344
  }
328
345
  }
329
- function Y(o) {
330
- return new N().migrate(o);
346
+ function G(r) {
347
+ return new V().migrate(r);
331
348
  }
332
349
  export {
333
- Y as migrateItemsBlock
350
+ G as migrateItemsBlock
334
351
  };