@useinsider/guido 3.10.0-beta.37c2e49 → 3.10.0-beta.53eb239

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.
@@ -1,30 +1,29 @@
1
- import { useActionsApi as U } from "./useActionsApi.js";
2
- import { useBlocksConfig as R } from "./useBlocksConfig.js";
3
- import { useConfig as x } from "./useConfig.js";
4
- import { useCustomInterfaceAppearance as O } from "./useCustomInterfaceAppearance.js";
5
- import { useFullStoryBridge as q } from "./useFullStoryBridge.js";
6
- import { useStripoEventHandler as H } from "./useStripoEventHandler.js";
7
- import { useStripoNotifications as N } from "./useStripoNotifications.js";
8
- import { useToaster as z } from "./useToaster.js";
9
- import { localePatch as L } from "../config/i18n/index.js";
1
+ import { useActionsApi as I } from "./useActionsApi.js";
2
+ import { useBlocksConfig as U } from "./useBlocksConfig.js";
3
+ import { useConfig as R } from "./useConfig.js";
4
+ import { useCustomInterfaceAppearance as x } from "./useCustomInterfaceAppearance.js";
5
+ import { useFullStoryBridge as O } from "./useFullStoryBridge.js";
6
+ import { useStripoEventHandler as q } from "./useStripoEventHandler.js";
7
+ import { useToaster as H } from "./useToaster.js";
8
+ import { localePatch as z } from "../config/i18n/index.js";
10
9
  import { en as h } from "../config/i18n/en/index.js";
11
- import { ToasterTypeOptions as $ } from "../enums/toaster.js";
12
- import { useStripoApi as G } from "../services/stripoApi.js";
13
- import J from "../static/styles/customEditorStyle.css.js";
14
- import { useEditorStore as E } from "../stores/editor.js";
15
- import { dynamicContentToMergeTags as X } from "../utils/genericUtil.js";
16
- import j from "../package.json.js";
17
- const fo = (C, l) => {
18
- const { features: c, template: w, isFeatureEnabled: u } = x(), { handleError: m, showToaster: b } = z(), { getToken: T, getCustomFonts: k, getSyncModulesStatus: B } = G(), { handleEvent: F } = H(), { getStripoBlocksConfig: v } = R(), { getStripoNotifications: V } = N(), _ = async (s, i = [], r = !1) => {
10
+ import { ToasterTypeOptions as L } from "../enums/toaster.js";
11
+ import { useStripoApi as $ } from "../services/stripoApi.js";
12
+ import G from "../static/styles/customEditorStyle.css.js";
13
+ import { useEditorStore as C } from "../stores/editor.js";
14
+ import { dynamicContentToMergeTags as J } from "../utils/genericUtil.js";
15
+ import N from "../package.json.js";
16
+ const ce = (E, l) => {
17
+ const { features: c, template: w, isFeatureEnabled: u } = R(), { handleError: m, showToaster: b } = H(), { getToken: T, getCustomFonts: k, getSyncModulesStatus: B } = $(), { handleEvent: F } = q(), { getStripoBlocksConfig: v } = U(), V = async (s, r = [], i = !1) => {
19
18
  var g, S, y;
20
- const o = E(), { html: p, css: a } = s, { baseBlocks: t, extensions: d } = await v(), f = ((g = c.value) == null ? void 0 : g.displayConditions) ?? !0, M = ((S = c.value) == null ? void 0 : S.modulesDisabled) ?? !1, P = ((y = w.value) == null ? void 0 : y.forceRecreate) ?? !1;
19
+ const e = C(), { html: p, css: a } = s, { baseBlocks: t, extensions: d } = await v(), f = ((g = c.value) == null ? void 0 : g.displayConditions) ?? !0, A = ((S = c.value) == null ? void 0 : S.modulesDisabled) ?? !1, M = ((y = w.value) == null ? void 0 : y.forceRecreate) ?? !1;
21
20
  await window.UIEditor.initEditor(
22
21
  document.querySelector("#guido-editor"),
23
22
  {
24
- metadata: C,
23
+ metadata: E,
25
24
  html: p,
26
25
  css: a,
27
- forceRecreate: P,
26
+ forceRecreate: M,
28
27
  locale: "en",
29
28
  undoButtonSelector: "#guido__undo-button",
30
29
  redoButtonSelector: "#guido__redo-button",
@@ -34,12 +33,12 @@ const fo = (C, l) => {
34
33
  customAppearanceMergetags: !u("liquidSyntax"),
35
34
  customAppearanceMergetagsBorderColor: "#f1f3fe",
36
35
  customAppearanceMergetagsBackgroundColor: "#f1f3fe",
37
- customViewStyles: J,
36
+ customViewStyles: G,
38
37
  conditionsEnabled: f,
39
38
  customConditionsEnabled: f,
40
39
  enableXSSSecurity: !0,
41
- modulesDisabled: M,
42
- syncModulesEnabled: r,
40
+ modulesDisabled: A,
41
+ syncModulesEnabled: i,
43
42
  messageSettingsEnabled: !0,
44
43
  displayGmailAnnotations: !0,
45
44
  displayHiddenPreheader: !1,
@@ -52,83 +51,82 @@ const fo = (C, l) => {
52
51
  editorFonts: {
53
52
  showDefaultStandardFonts: !0,
54
53
  showDefaultNotStandardFonts: !0,
55
- customFonts: i
54
+ customFonts: r
56
55
  },
57
56
  mergeTags: [
58
57
  {
59
- entries: X(
58
+ entries: J(
60
59
  l.preselectedDynamicContentList,
61
60
  u("liquidSyntax")
62
61
  )
63
62
  }
64
63
  ],
65
- async onTokenRefreshRequest(e) {
64
+ async onTokenRefreshRequest(o) {
66
65
  try {
67
66
  const n = await T();
68
- e(n);
67
+ o(n);
69
68
  } catch (n) {
70
69
  m(n, "Failed to refresh token");
71
70
  }
72
71
  },
73
72
  onTemplateLoaded() {
74
73
  try {
75
- const { importCss: e } = O(), { activateCustomViewStyles: n, updateTimerInClonedTemplate: D } = U(), { injectFullStory: I } = q();
76
- e(), n(), I(), D(), l.onReady(), o.isStripoInitialized = !0, o.loadingStatus = !1, setTimeout(() => {
77
- o.hasChanges = !1;
74
+ const { importCss: o } = x(), { activateCustomViewStyles: n, updateTimerInClonedTemplate: P } = I(), { injectFullStory: D } = O();
75
+ o(), n(), D(), P(), l.onReady(), e.isStripoInitialized = !0, e.loadingStatus = !1, setTimeout(() => {
76
+ e.hasChanges = !1;
78
77
  }, 1e3);
79
- } catch (e) {
80
- m(e, "Failed to load custom interface appearance");
78
+ } catch (o) {
79
+ m(o, "Failed to load custom interface appearance");
81
80
  }
82
81
  },
83
- onCodeEditorVisibilityChanged(e) {
84
- o.isCodeEditorOpen = e;
82
+ onCodeEditorVisibilityChanged(o) {
83
+ e.isCodeEditorOpen = o;
85
84
  },
86
- onEditorVisualModeChanged(e) {
87
- o.editorVisualMode = e.toLowerCase();
85
+ onEditorVisualModeChanged(o) {
86
+ e.editorVisualMode = o.toLowerCase();
88
87
  },
89
- onVersionHistoryVisibilityChanged(e) {
90
- o.isVersionHistoryOpen = e;
88
+ onVersionHistoryVisibilityChanged(o) {
89
+ e.isVersionHistoryOpen = o;
91
90
  },
92
91
  onDataChanged() {
93
- o.hasChanges = !0;
92
+ e.hasChanges = !0;
94
93
  },
95
94
  onEvent: F,
96
- notifications: V(),
97
95
  ignoreClickOutsideSelectors: [
98
96
  "#guido-dynamic-content-modal",
99
97
  ".in-on-board-wrapper",
100
98
  ".in-drawer__container"
101
99
  ],
102
100
  extensions: d,
103
- localePatch: L
101
+ localePatch: z
104
102
  }
105
103
  );
106
- }, A = (s) => new Promise((i, r) => {
104
+ }, _ = (s) => new Promise((r, i) => {
107
105
  var d;
108
106
  if (document.getElementById("UiEditorScript")) {
109
- Promise.resolve(s()).then(i, r);
107
+ Promise.resolve(s()).then(r, i);
110
108
  return;
111
109
  }
112
- const o = j.guido, a = `https://email-static.useinsider.com/guido/${(d = o == null ? void 0 : o.stripo) == null ? void 0 : d.version}/UIEditor.js`, t = document.createElement("script");
110
+ const e = N.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");
113
111
  t.id = "UiEditorScript", t.type = "module", t.src = a, t.onload = () => {
114
- Promise.resolve(s()).then(i, r);
112
+ Promise.resolve(s()).then(r, i);
115
113
  }, t.onerror = () => {
116
- r(new Error(`Failed to load Stripo UIEditor script from S3: ${a}`));
114
+ i(new Error(`Failed to load Stripo UIEditor script from S3: ${a}`));
117
115
  }, document.body.appendChild(t);
118
116
  });
119
117
  return { initPlugin: async (s) => {
120
- const i = E();
118
+ const r = C();
121
119
  try {
122
- await A(async () => {
123
- const [r, o] = await Promise.all([
120
+ await _(async () => {
121
+ const [i, e] = await Promise.all([
124
122
  k(),
125
123
  B()
126
124
  ]);
127
- i.syncModulesEnabled = o, await _(s, r, o);
125
+ r.syncModulesEnabled = e, await V(s, i, e);
128
126
  });
129
127
  } catch {
130
- i.loadingStatus = !1, b({
131
- type: $.Error,
128
+ r.loadingStatus = !1, b({
129
+ type: L.Alert,
132
130
  message: h["An error has occurred. Please report the error code to support."],
133
131
  actionButton: {
134
132
  text: h["Reload page"],
@@ -139,5 +137,5 @@ const fo = (C, l) => {
139
137
  } };
140
138
  };
141
139
  export {
142
- fo as useStripo
140
+ ce as useStripo
143
141
  };
@@ -1,29 +1,29 @@
1
1
  import { ToasterTypeOptions as T } from "../enums/toaster.js";
2
2
  import { useToasterStore as c } from "../stores/toaster.js";
3
- import { watch as u, nextTick as f } from "vue";
3
+ import { watch as u, nextTick as l } from "vue";
4
4
  const p = () => {
5
- const o = c();
6
- let t = null;
5
+ const t = c();
6
+ let o = null;
7
7
  const s = () => {
8
- t && (clearTimeout(t), t = null);
8
+ o && (clearTimeout(o), o = null);
9
9
  };
10
10
  function r(e = { message: "" }) {
11
- s(), o.hideToaster(), f(() => {
12
- o.showToaster(e);
11
+ s(), t.hideToaster(), l(() => {
12
+ t.showToaster(e);
13
13
  });
14
14
  }
15
15
  function i() {
16
- s(), o.hideToaster();
16
+ s(), t.hideToaster();
17
17
  }
18
18
  function n(e, a) {
19
19
  const m = e instanceof Error ? e.message : String(e);
20
- r({ type: T.Error, message: `${a}: ${m}` });
20
+ r({ type: T.Alert, message: `${a}: ${m}` });
21
21
  }
22
22
  return u(
23
- () => o.shouldAutoHide,
23
+ () => t.shouldAutoHide,
24
24
  (e) => {
25
- s(), e && (t = setTimeout(() => {
26
- o.hideToaster(), s();
25
+ s(), e && (o = setTimeout(() => {
26
+ t.hideToaster(), s();
27
27
  }, 6e3));
28
28
  }
29
29
  ), { showToaster: r, hideToaster: i, handleError: n };
@@ -24,7 +24,7 @@ const S = () => {
24
24
  window.StripoEditorApi.versionHistoryApi.previewVersion(e, (o) => {
25
25
  const r = o instanceof Error ? o.message : String(o);
26
26
  s({
27
- type: t.Error,
27
+ type: t.Alert,
28
28
  message: `Error compiling email: ${r}`
29
29
  });
30
30
  });
@@ -41,7 +41,7 @@ const S = () => {
41
41
  (o) => {
42
42
  const r = o instanceof Error ? o.message : String(o);
43
43
  s({
44
- type: t.Error,
44
+ type: t.Alert,
45
45
  message: `Error compiling email: ${r}`
46
46
  });
47
47
  }
@@ -31,7 +31,7 @@ const v = () => {
31
31
  }), !1) : !0;
32
32
  } catch {
33
33
  return e({
34
- type: a.Error,
34
+ type: a.Alert,
35
35
  message: s("journey-builder.liquid-validation-failed")
36
36
  }), !1;
37
37
  }
@@ -1,8 +1,8 @@
1
1
  import { ToasterTypeOptions as i } from "../../enums/toaster.js";
2
2
  import { PAGE_TYPES as u } from "../../enums/unsubscribe.js";
3
3
  import { UNSUBSCRIBE_BLOCK_SELECTOR as l, DATA_ATTRIBUTES as a } from "../../extensions/Blocks/Unsubscribe/utils/constants.js";
4
- import { useToaster as E } from "../useToaster.js";
5
- import { useTranslations as m } from "../useTranslations.js";
4
+ import { useToaster as m } from "../useToaster.js";
5
+ import { useTranslations as E } from "../useTranslations.js";
6
6
  const T = [
7
7
  {
8
8
  pageType: u.GLOBAL_UNSUBSCRIBE,
@@ -13,23 +13,23 @@ const T = [
13
13
  messageKey: "unsubscription-preference.duplicate-pref-center"
14
14
  }
15
15
  ], g = "unsubscription-preference.duplicate-both", b = "unsubscription-preference.select-page-to-continue", P = () => {
16
- const { showToaster: c } = E(), p = m();
16
+ const { showToaster: c } = m(), p = E();
17
17
  return { validateUnsubscribeBlockUniqueness: (n) => {
18
- const o = new DOMParser().parseFromString(n, "text/html"), r = /* @__PURE__ */ new Map();
18
+ const o = new DOMParser().parseFromString(n, "text/html"), s = /* @__PURE__ */ new Map();
19
19
  o.querySelectorAll(l).forEach((e) => {
20
- const s = Number(e.getAttribute(a.PAGE_TYPE));
21
- r.set(s, (r.get(s) ?? 0) + 1);
20
+ const r = Number(e.getAttribute(a.PAGE_TYPE));
21
+ s.set(r, (s.get(r) ?? 0) + 1);
22
22
  });
23
- const t = T.filter((e) => (r.get(e.pageType) ?? 0) > 1).map((e) => e.messageKey);
23
+ const t = T.filter((e) => (s.get(e.pageType) ?? 0) > 1).map((e) => e.messageKey);
24
24
  return t.length ? (c({
25
- type: i.Error,
25
+ type: i.Alert,
26
26
  message: p(t.length > 1 ? g : t[0])
27
27
  }), !1) : !0;
28
28
  }, validateUnsubscribeBlockHasTemplate: (n) => {
29
29
  const o = new DOMParser().parseFromString(n, "text/html");
30
30
  return Array.from(o.querySelectorAll(l)).some((t) => {
31
- const e = t.getAttribute(a.PAGE_TYPE), s = t.getAttribute(a.PAGE_LIST);
32
- return !e || !s;
31
+ const e = t.getAttribute(a.PAGE_TYPE), r = t.getAttribute(a.PAGE_LIST);
32
+ return !e || !r;
33
33
  }) ? (c({
34
34
  type: i.Warning,
35
35
  message: p(b)
@@ -1,30 +1,30 @@
1
- import { useConfig as C } from "../../../composables/useConfig.js";
2
- import { useRecommendation as E } from "../../../composables/useRecommendation.js";
3
- import { CSS_CLASS_RECO_BUTTON as q } from "../../../extensions/Blocks/Recommendation/constants/selectors.js";
4
- import { useRecommendationExtensionStore as w } from "../../../extensions/Blocks/Recommendation/store/recommendation.js";
5
- import { isIgnoredRecommendationBlock as P } from "./recommendationIgnoreUtils.js";
6
- function R(t, r, e, o, s = "") {
7
- const i = `{{${s}${t}_${r}_${e}}}`, n = `{{${s}${t}_${r}_currency}}`;
8
- return o === "before" ? `${n} ${i}` : `${i} ${n}`;
9
- }
10
- function y(t) {
1
+ import { useConfig as _ } from "../../../composables/useConfig.js";
2
+ import { useRecommendation as q } from "../../../composables/useRecommendation.js";
3
+ import { CSS_CLASS_RECO_BUTTON as C } from "../../../extensions/Blocks/Recommendation/constants/selectors.js";
4
+ import { useRecommendationExtensionStore as E } from "../../../extensions/Blocks/Recommendation/store/recommendation.js";
5
+ import { isIgnoredRecommendationBlock as w } from "./recommendationIgnoreUtils.js";
6
+ function P(t, r, e, n, s = "") {
7
+ const c = `{{${s}${t}_${r}_${e}}}`, o = `{{${s}${t}_${r}_currency}}`;
8
+ return n === "before" ? `${o} ${c}` : `${c} ${o}`;
9
+ }
10
+ function m(t) {
11
11
  let r = t;
12
12
  for (; r.children.length === 1; )
13
13
  [r] = r.children;
14
14
  return r;
15
15
  }
16
- function A(t, r, e, o, s, i) {
16
+ function b(t, r, e, n, s, c) {
17
17
  switch (r) {
18
18
  case "productImage": {
19
- const n = t.querySelector("img");
20
- n && (n.setAttribute("src", `{{${i}${e}_${o}_image_url}}`), n.setAttribute("alt", `{{${i}${e}_${o}_name}}`));
21
- const c = t.querySelector("a");
22
- c && (c.setAttribute("href", `{{${i}${e}_${o}_url}}`), c.classList.add(q));
19
+ const o = t.querySelector("img");
20
+ o && (o.setAttribute("src", `{{${c}${e}_${n}_image_url}}`), o.setAttribute("alt", `{{${c}${e}_${n}_name}}`));
21
+ const i = t.querySelector("a");
22
+ i && (i.setAttribute("href", `{{${c}${e}_${n}_url}}`), i.classList.add(C));
23
23
  break;
24
24
  }
25
25
  case "productName": {
26
- const n = t.querySelector("p");
27
- n && (y(n).textContent = `{{${i}${e}_${o}_name}}`);
26
+ const o = t.querySelector("p");
27
+ o && (m(o).textContent = `{{${c}${e}_${n}_name}}`);
28
28
  break;
29
29
  }
30
30
  // Inline mode ("Move to next line" OFF) merges BOTH prices into one row
@@ -32,176 +32,145 @@ function A(t, r, e, o, s, i) {
32
32
  // substitute by cell content, not by the row's anchor (SD-145161).
33
33
  case "productPrice":
34
34
  case "productOldPrice": {
35
- const n = (l, d) => {
36
- l && (y(l).textContent = R(
35
+ const o = (d, l) => {
36
+ d && (m(d).textContent = P(
37
37
  e,
38
- o,
39
- d,
38
+ n,
39
+ l,
40
40
  s,
41
- i
41
+ c
42
42
  ));
43
- }, c = t.querySelector(".product-price p"), a = t.querySelector(".product-old-price p"), u = !c && !a ? t.querySelector("p") : null;
44
- n(c ?? (r === "productPrice" ? u : null), "price"), n(a ?? (r === "productOldPrice" ? u : null), "original_price");
43
+ }, i = t.querySelector(".product-price p"), a = t.querySelector(".product-old-price p"), u = !i && !a ? t.querySelector("p") : null;
44
+ o(i ?? (r === "productPrice" ? u : null), "price"), o(a ?? (r === "productOldPrice" ? u : null), "original_price");
45
45
  break;
46
46
  }
47
47
  case "productButton": {
48
- const n = t.querySelector("a");
49
- n && n.setAttribute("href", `{{${i}${e}_${o}_url}}`);
48
+ const o = t.querySelector("a");
49
+ o && o.setAttribute("href", `{{${c}${e}_${n}_url}}`);
50
50
  break;
51
51
  }
52
52
  case "productOmnibusPrice": {
53
- const n = t.querySelector(".omnibus-price-value");
54
- if (n) {
55
- n.textContent = `{{${i}${e}_${o}_omnibus_price}}`;
56
- const c = n.closest("p");
57
- c && (c.setAttribute("product-attr", "omnibus_price"), c.setAttribute("composition", "true"));
53
+ const o = t.querySelector(".omnibus-price-value");
54
+ if (o) {
55
+ o.textContent = `{{${c}${e}_${n}_omnibus_price}}`;
56
+ const i = o.closest("p");
57
+ i && (i.setAttribute("product-attr", "omnibus_price"), i.setAttribute("composition", "true"));
58
58
  }
59
59
  break;
60
60
  }
61
61
  case "productOmnibusDiscount": {
62
- const n = t.querySelector(".omnibus-discount-value");
63
- if (n) {
64
- n.textContent = `{{${i}${e}_${o}_omnibus_discount}}`;
65
- const c = n.closest("p");
66
- c && (c.setAttribute("product-attr", "omnibus_discount"), c.setAttribute("composition", "true"));
62
+ const o = t.querySelector(".omnibus-discount-value");
63
+ if (o) {
64
+ o.textContent = `{{${c}${e}_${n}_omnibus_discount}}`;
65
+ const i = o.closest("p");
66
+ i && (i.setAttribute("product-attr", "omnibus_discount"), i.setAttribute("composition", "true"));
67
67
  }
68
68
  break;
69
69
  }
70
70
  default: {
71
- const n = t.getAttribute("product-attr") ? t : t.querySelector("[product-attr]");
72
- if (n) {
73
- const c = n.getAttribute("product-attr"), a = n.querySelector("p");
74
- a && (y(a).textContent = `{{${i}${e}_${o}_${c}}}`);
71
+ const o = t.getAttribute("product-attr") ? t : t.querySelector("[product-attr]");
72
+ if (o) {
73
+ const i = o.getAttribute("product-attr"), a = o.querySelector("p");
74
+ a && (m(a).textContent = `{{${c}${e}_${n}_${i}}}`);
75
75
  }
76
76
  break;
77
77
  }
78
78
  }
79
79
  }
80
- const B = "name";
81
- function S(t, r, e, o) {
82
- const s = `${o}${r}_${e}_${B}`;
83
- return {
84
- open: t.createComment(`{% if ${s} and ${s} != "" %}`),
85
- close: t.createComment("{% endif %}")
86
- };
87
- }
88
- function L(t, r, e) {
89
- return S(t, r, 0, e);
90
- }
91
- function N(t, r, e, o) {
92
- if (!t.innerHTML.includes("{{"))
93
- return;
94
- const { open: s, close: i } = S(t.ownerDocument, r, e, o);
95
- t.insertBefore(s, t.firstChild), t.appendChild(i);
96
- }
97
- function T(t, r, e, o) {
98
- var n, c;
99
- if (!t.innerHTML.includes("{{"))
100
- return;
101
- const { open: s, close: i } = S(t.ownerDocument, r, e, o);
102
- (n = t.parentNode) == null || n.insertBefore(s, t), (c = t.parentNode) == null || c.insertBefore(i, t.nextSibling);
103
- }
104
- function v(t, r, e, o) {
105
- t.querySelectorAll(".recommendation-product-row").forEach((i, n) => {
106
- i.querySelectorAll("[data-attribute-type]").forEach((a) => {
107
- const u = a.getAttribute("data-attribute-type") || "", l = a.querySelectorAll(".attribute-cell");
108
- l.length > 0 ? l.forEach((d) => {
109
- A(d, u, r, n, e, o);
110
- }) : A(a, u, r, n, e, o);
111
- }), T(i, r, n, o);
80
+ function R(t, r, e, n) {
81
+ t.querySelectorAll(".recommendation-product-row").forEach((c, o) => {
82
+ c.querySelectorAll("[data-attribute-type]").forEach((a) => {
83
+ const u = a.getAttribute("data-attribute-type") || "", d = a.querySelectorAll(".attribute-cell");
84
+ d.length > 0 ? d.forEach((l) => {
85
+ b(l, u, r, o, e, n);
86
+ }) : b(a, u, r, o, e, n);
87
+ });
112
88
  });
113
89
  }
114
- function O(t, r, e, o) {
90
+ function W(t, r, e, n) {
115
91
  const s = t.querySelectorAll(".recommendation-product-row");
116
92
  if (!s.length)
117
93
  return;
118
- const [i] = s, n = i.querySelector("[data-attribute-type]"), c = n ? n.querySelectorAll(".attribute-cell").length : 1;
94
+ const [c] = s, o = c.querySelector("[data-attribute-type]"), i = o ? o.querySelectorAll(".attribute-cell").length : 1;
119
95
  s.forEach((a, u) => {
120
- a.querySelectorAll("[data-attribute-type]").forEach((d) => {
121
- const p = d.getAttribute("data-attribute-type") || "";
122
- d.querySelectorAll(".attribute-cell").forEach((m, f) => {
123
- const h = u * c + f;
124
- A(m, p, r, h, e, o), N(m, r, h, o);
96
+ a.querySelectorAll("[data-attribute-type]").forEach((l) => {
97
+ const p = l.getAttribute("data-attribute-type") || "";
98
+ l.querySelectorAll(".attribute-cell").forEach(($, S) => {
99
+ const g = u * i + S;
100
+ b($, p, r, g, e, n);
125
101
  });
126
102
  });
127
103
  });
128
104
  }
129
- function W(t, r, e, o) {
130
- t.querySelectorAll(".ins-recommendation-product-container").forEach((i) => {
131
- O(i, r, e, o);
105
+ function v(t, r, e, n) {
106
+ t.querySelectorAll(".ins-recommendation-product-container").forEach((c) => {
107
+ W(c, r, e, n);
132
108
  });
133
109
  }
134
- function D(t, r, e) {
135
- const o = t.getAttribute("data-layout") || "grid", s = t.getAttribute("currency-alignment") || "after";
136
- o === "list" ? v(t, r, s, e) : W(t, r, s, e);
110
+ function O(t, r, e) {
111
+ const n = t.getAttribute("data-layout") || "grid", s = t.getAttribute("currency-alignment") || "after";
112
+ n === "list" ? R(t, r, s, e) : v(t, r, s, e);
137
113
  }
138
- function $(t, r, e) {
139
- const o = new RegExp(`${r}\\s*:\\s*(\\d+)\\s*px`, "i"), s = t.match(o);
114
+ function f(t, r, e) {
115
+ const n = new RegExp(`${r}\\s*:\\s*(\\d+)\\s*px`, "i"), s = t.match(n);
140
116
  return s ? parseInt(s[1]) : e;
141
117
  }
142
- function _(t) {
118
+ function y(t) {
143
119
  const r = t.trim();
144
120
  return r.endsWith("%") ? parseFloat(r) < 100 : /^\d+(?:\.\d+)?(?:px)?$/.test(r) && parseInt(r) > 0;
145
121
  }
146
- function g(t) {
122
+ function A(t) {
147
123
  const r = t.getAttribute("width");
148
- if (r && _(r))
124
+ if (r && y(r))
149
125
  return r.trim();
150
126
  const e = (t.getAttribute("style") || "").match(/(?:^|[;\s])width\s*:\s*(\d+(?:\.\d+)?(?:px|%))/i);
151
- return e && _(e[1]) ? e[1] : null;
127
+ return e && y(e[1]) ? e[1] : null;
152
128
  }
153
129
  function M(t, r) {
154
130
  let e = t.parentElement;
155
131
  for (; e && e !== r; ) {
156
- if (e.tagName === "TD" && g(e))
132
+ if (e.tagName === "TD" && A(e))
157
133
  return e;
158
134
  e = e.parentElement;
159
135
  }
160
136
  return null;
161
137
  }
162
- function G(t) {
163
- const r = t.getAttribute("style") || "", e = $(r, "width", 600), o = $(r, "padding", 0) * 2, s = Math.max(0, e - o);
164
- s !== 0 && t.querySelectorAll("img.adapt-img").forEach((i) => {
165
- if (i.hasAttribute("width"))
138
+ function T(t) {
139
+ const r = t.getAttribute("style") || "", e = f(r, "width", 600), n = f(r, "padding", 0) * 2, s = Math.max(0, e - n);
140
+ s !== 0 && t.querySelectorAll("img.adapt-img").forEach((c) => {
141
+ if (c.hasAttribute("width"))
166
142
  return;
167
- const n = M(i, t);
168
- if (!n)
143
+ const o = M(c, t);
144
+ if (!o)
169
145
  return;
170
- const c = g(n), a = $(n.getAttribute("style") || "", "padding", 0) * 2, u = c.endsWith("%") ? Math.floor(s * parseFloat(c) / 100) : parseInt(c), l = Math.max(1, u - a);
171
- i.setAttribute("width", String(l));
172
- const d = i.getAttribute("style") || "";
173
- if (!/\bwidth\s*:\s*\d/i.test(d)) {
174
- const p = d && !d.trim().endsWith(";") ? "; " : "";
175
- i.setAttribute("style", `${d}${p}width: ${l}px`);
146
+ const i = A(o), a = f(o.getAttribute("style") || "", "padding", 0) * 2, u = i.endsWith("%") ? Math.floor(s * parseFloat(i) / 100) : parseInt(i), d = Math.max(1, u - a);
147
+ c.setAttribute("width", String(d));
148
+ const l = c.getAttribute("style") || "";
149
+ if (!/\bwidth\s*:\s*\d/i.test(l)) {
150
+ const p = l && !l.trim().endsWith(";") ? "; " : "";
151
+ c.setAttribute("style", `${l}${p}width: ${d}px`);
176
152
  }
177
153
  });
178
154
  }
179
- function H(t, r) {
155
+ function B(t, r) {
180
156
  const e = t.match(/<!DOCTYPE[^>]*>/i);
181
157
  return (e ? `${e[0]}
182
158
  ` : "") + r.documentElement.outerHTML;
183
159
  }
184
- function Y(t) {
185
- const r = t.replaceAll("{%", "<!--{%").replaceAll("%}", "%}-->"), e = new DOMParser().parseFromString(r, "text/html"), o = e.querySelectorAll(".recommendation-block-v2");
186
- if (!o.length)
160
+ function G(t) {
161
+ const r = t.replaceAll("{%", "<!--{%").replaceAll("%}", "%}-->"), e = new DOMParser().parseFromString(r, "text/html"), n = e.querySelectorAll(".recommendation-block-v2");
162
+ if (!n.length)
187
163
  return t;
188
- const { buildCampaignUrl: s } = E(), i = w();
189
- i.recommendationCampaignUrls = {};
190
- const { isFeatureEnabled: n } = C(), c = n("liquidSyntax") ? "reco_" : "";
191
- return o.forEach((u) => {
192
- var d, p, b, m;
193
- const l = u.getAttribute("recommendation-id");
194
- if (l) {
195
- if ((d = u.parentNode) == null || d.insertBefore(e.createComment("REC_START"), u), (p = u.parentNode) == null || p.insertBefore(e.createComment("REC_END"), u.nextSibling), u.querySelectorAll('[data-visibility="0"]').forEach((f) => f.remove()), s(l), !P(u)) {
196
- D(u, l, c);
197
- const { open: f, close: h } = L(e, l, c);
198
- (b = u.parentNode) == null || b.insertBefore(f, u), (m = u.parentNode) == null || m.insertBefore(h, u.nextSibling);
199
- }
200
- G(u);
201
- }
202
- }), H(r, e).replaceAll("<!--{%", "{%").replaceAll("%}-->", "%}").replaceAll("&lt;!--{%", "{%").replaceAll("%}--&gt;", "%}");
164
+ const { buildCampaignUrl: s } = q(), c = E();
165
+ c.recommendationCampaignUrls = {};
166
+ const { isFeatureEnabled: o } = _(), i = o("liquidSyntax") ? "reco_" : "";
167
+ return n.forEach((u) => {
168
+ var l, p;
169
+ const d = u.getAttribute("recommendation-id");
170
+ d && ((l = u.parentNode) == null || l.insertBefore(e.createComment("REC_START"), u), (p = u.parentNode) == null || p.insertBefore(e.createComment("REC_END"), u.nextSibling), u.querySelectorAll('[data-visibility="0"]').forEach((h) => h.remove()), s(d), w(u) || O(u, d, i), T(u));
171
+ }), B(r, e).replaceAll("<!--{%", "{%").replaceAll("%}-->", "%}").replaceAll("&lt;!--{%", "{%").replaceAll("%}--&gt;", "%}");
203
172
  }
204
173
  export {
205
- R as formatPriceVariable,
206
- Y as prepareRecommendationBlocks
174
+ P as formatPriceVariable,
175
+ G as prepareRecommendationBlocks
207
176
  };
@@ -1,4 +1,4 @@
1
- var n = /* @__PURE__ */ ((r) => (r.Success = "success", r.Warning = "warning", r.Error = "error", r.Info = "information", r))(n || {});
1
+ var c = /* @__PURE__ */ ((r) => (r.Success = "success", r.Warning = "warning", r.Alert = "alert", r.Dark = "dark", r))(c || {});
2
2
  export {
3
- n as ToasterTypeOptions
3
+ c as ToasterTypeOptions
4
4
  };
@@ -1,16 +1,16 @@
1
- import { useToaster as n } from "../../../composables/useToaster.js";
1
+ import { useToaster as r } from "../../../composables/useToaster.js";
2
2
  import { useTranslations as s } from "../../../composables/useTranslations.js";
3
- import { ToasterTypeOptions as r } from "../../../enums/toaster.js";
3
+ import { ToasterTypeOptions as n } from "../../../enums/toaster.js";
4
4
  import { countLiveRecommendationBlocks as i } from "./utils/recommendationBlockCount.js";
5
- const c = "newsletter.multiple-reco-blocks-warning", u = () => {
6
- const { showToaster: o } = n(), t = s();
5
+ const a = "newsletter.multiple-reco-blocks-warning", f = () => {
6
+ const { showToaster: o } = r(), t = s();
7
7
  return { warnIfMultipleBlocks: (e) => {
8
8
  i(e) > 1 && o({
9
- type: r.Info,
10
- message: t(c)
9
+ type: n.Dark,
10
+ message: t(a)
11
11
  });
12
12
  } };
13
13
  };
14
14
  export {
15
- u as useRecommendationBlockWarning
15
+ f as useRecommendationBlockWarning
16
16
  };