@useinsider/guido 3.18.1 → 3.18.2-beta.320e07f

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 (48) hide show
  1. package/dist/components/Guido.vue.js +3 -3
  2. package/dist/components/Guido.vue2.js +30 -30
  3. package/dist/components/organisms/extensions/recommendation/AssignStrategyDrawer.vue.js +13 -11
  4. package/dist/components/organisms/extensions/recommendation/AssignStrategyDrawer.vue2.js +76 -57
  5. package/dist/components/organisms/extensions/recommendation/RemoveStrategyModal.vue2.js +23 -37
  6. package/dist/components/organisms/onboarding/OnboardingWrapper.vue2.js +20 -18
  7. package/dist/components/organisms/onboarding/RecommendationStrategyOnboarding.vue.js +21 -0
  8. package/dist/components/organisms/onboarding/RecommendationStrategyOnboarding.vue2.js +47 -0
  9. package/dist/components/organisms/save-as-template/SaveAsTemplateDrawer.vue2.js +34 -34
  10. package/dist/composables/useCustomInterfaceAppearance.js +56 -46
  11. package/dist/composables/useHtmlValidator.js +87 -82
  12. package/dist/composables/useHttp.js +24 -22
  13. package/dist/composables/useRecommendation.js +40 -35
  14. package/dist/composables/useStripo.js +30 -30
  15. package/dist/enums/extensions/recommendationBlock.js +38 -31
  16. package/dist/extensions/Blocks/Recommendation/block.js +43 -39
  17. package/dist/extensions/Blocks/Recommendation/constants/defaultConfig.js +21 -20
  18. package/dist/extensions/Blocks/Recommendation/controls/main/index.js +55 -44
  19. package/dist/extensions/Blocks/Recommendation/controls/main/strategy.js +84 -52
  20. package/dist/extensions/Blocks/Recommendation/controls/main/utils.js +74 -74
  21. package/dist/extensions/Blocks/Recommendation/store/recommendation.js +190 -90
  22. package/dist/extensions/Blocks/Recommendation/utils/nodeConfigWriter.js +26 -16
  23. package/dist/extensions/Blocks/Recommendation/utils/strategyCommit.js +24 -0
  24. package/dist/extensions/Blocks/Recommendation/validation/requiredFields.js +21 -12
  25. package/dist/guido.css +1 -1
  26. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js +29 -28
  27. package/dist/package.json.js +1 -1
  28. package/dist/services/templateLibraryApi.js +17 -14
  29. package/dist/src/components/organisms/onboarding/RecommendationStrategyOnboarding.vue.d.ts +2 -0
  30. package/dist/src/enums/extensions/recommendationBlock.d.ts +2 -0
  31. package/dist/src/extensions/Blocks/Recommendation/constants/defaultConfig.d.ts +1 -0
  32. package/dist/src/extensions/Blocks/Recommendation/constants/index.d.ts +1 -1
  33. package/dist/src/extensions/Blocks/Recommendation/controls/main/index.d.ts +7 -1
  34. package/dist/src/extensions/Blocks/Recommendation/controls/main/strategy.d.ts +9 -0
  35. package/dist/src/extensions/Blocks/Recommendation/controls/main/utils.d.ts +7 -2
  36. package/dist/src/extensions/Blocks/Recommendation/store/recommendation.d.ts +87 -0
  37. package/dist/src/extensions/Blocks/Recommendation/utils/strategyCommit.d.ts +14 -0
  38. package/dist/src/extensions/Blocks/Recommendation/validation/requiredFields.d.ts +4 -0
  39. package/dist/src/stores/onboarding.d.ts +377 -0
  40. package/dist/src/utils/genericUtil.d.ts +6 -0
  41. package/dist/src/utils/liquidDynamicContent.d.ts +20 -0
  42. package/dist/static/styles/components/recommendation-strategy.css.js +34 -4
  43. package/dist/static/styles/components/skeleton.css.js +23 -0
  44. package/dist/stores/onboarding.js +41 -36
  45. package/dist/utils/genericUtil.js +63 -54
  46. package/dist/utils/liquidDynamicContent.js +15 -0
  47. package/dist/utils/templatePreparation.js +61 -59
  48. package/package.json +7 -7
@@ -1,5 +1,5 @@
1
- import { useOnboardingApi as s } from "../services/onboardingApi.js";
2
- import { defineStore as e } from "pinia";
1
+ import { useOnboardingApi as e } from "../services/onboardingApi.js";
2
+ import { defineStore as s } from "pinia";
3
3
  const t = () => ({
4
4
  cardIndex: 0,
5
5
  isActive: !1,
@@ -11,49 +11,54 @@ const t = () => ({
11
11
  textBlockOnboarding: t(),
12
12
  versionHistoryOnboarding: t(),
13
13
  ampOnboarding: t(),
14
- itemsOnboarding: t()
14
+ itemsOnboarding: t(),
15
+ recommendationStrategyOnboarding: t()
15
16
  },
16
17
  userModalState: {},
17
18
  isFetched: !1
18
- }), c = e("guidoOnboarding", {
19
+ }), c = s("guidoOnboarding", {
19
20
  state: () => a(),
20
21
  getters: {
21
- getOnboarding: (n) => (i) => n.onboardings[i],
22
- isActive: (n) => (i) => n.onboardings[i].isActive,
23
- getCurrentCard: (n) => (i) => {
24
- const o = n.onboardings[i];
25
- return o.config[o.cardIndex];
22
+ getOnboarding: (n) => (o) => n.onboardings[o],
23
+ isActive: (n) => (o) => n.onboardings[o].isActive,
24
+ getCurrentCard: (n) => (o) => {
25
+ const i = n.onboardings[o];
26
+ return i.config[i.cardIndex];
26
27
  },
27
28
  getGenericCurrentCard: (n) => {
28
- const { genericOnboarding: i } = n.onboardings;
29
- return i.config[i.cardIndex];
29
+ const { genericOnboarding: o } = n.onboardings;
30
+ return o.config[o.cardIndex];
30
31
  },
31
32
  getTextBlockCurrentCard: (n) => {
32
- const { textBlockOnboarding: i } = n.onboardings;
33
- return i.config[i.cardIndex];
33
+ const { textBlockOnboarding: o } = n.onboardings;
34
+ return o.config[o.cardIndex];
34
35
  },
35
36
  getVersionHistoryCurrentCard: (n) => {
36
- const { versionHistoryOnboarding: i } = n.onboardings;
37
- return i.config[i.cardIndex];
37
+ const { versionHistoryOnboarding: o } = n.onboardings;
38
+ return o.config[o.cardIndex];
38
39
  },
39
40
  getAmpCurrentCard: (n) => {
40
- const { ampOnboarding: i } = n.onboardings;
41
- return i.config[i.cardIndex];
41
+ const { ampOnboarding: o } = n.onboardings;
42
+ return o.config[o.cardIndex];
42
43
  },
43
44
  getItemsCurrentCard: (n) => {
44
- const { itemsOnboarding: i } = n.onboardings;
45
- return i.config[i.cardIndex];
45
+ const { itemsOnboarding: o } = n.onboardings;
46
+ return o.config[o.cardIndex];
47
+ },
48
+ getRecommendationStrategyCurrentCard: (n) => {
49
+ const { recommendationStrategyOnboarding: o } = n.onboardings;
50
+ return o.config[o.cardIndex];
46
51
  },
47
- shouldShowOnboarding: (n) => (i) => {
48
- const o = n.userModalState.Guido;
49
- return i === "newVersionPopup" && (o != null && o.genericOnboarding) ? !1 : o ? !o[i] : !0;
52
+ shouldShowOnboarding: (n) => (o) => {
53
+ const i = n.userModalState.Guido;
54
+ return o === "newVersionPopup" && (i != null && i.genericOnboarding) ? !1 : i ? !i[o] : !0;
50
55
  }
51
56
  },
52
57
  actions: {
53
58
  closeOtherOnboardings(n) {
54
- Object.keys(this.onboardings).forEach((i) => {
55
- const o = i;
56
- o !== n && this.onboardings[o].isActive && (this.onboardings[o].isActive = !1, this.onboardings[o].cardIndex = 0, this.onboardings[o].config = []);
59
+ Object.keys(this.onboardings).forEach((o) => {
60
+ const i = o;
61
+ i !== n && this.onboardings[i].isActive && (this.onboardings[i].isActive = !1, this.onboardings[i].cardIndex = 0, this.onboardings[i].config = []);
57
62
  });
58
63
  },
59
64
  start(n) {
@@ -71,12 +76,12 @@ const t = () => ({
71
76
  previous(n) {
72
77
  this.onboardings[n].cardIndex > 0 && this.onboardings[n].cardIndex--;
73
78
  },
74
- updateCardPosition(n, i, o) {
75
- const r = this.onboardings[n].config[i];
76
- r && (r.top = o.top, r.position = o.position);
79
+ updateCardPosition(n, o, i) {
80
+ const r = this.onboardings[n].config[o];
81
+ r && (r.top = i.top, r.position = i.position);
77
82
  },
78
- setConfig(n, i) {
79
- this.onboardings[n].config = i ?? [], this.onboardings[n].cardIndex >= this.onboardings[n].config.length && (this.onboardings[n].cardIndex = 0);
83
+ setConfig(n, o) {
84
+ this.onboardings[n].config = o ?? [], this.onboardings[n].cardIndex >= this.onboardings[n].config.length && (this.onboardings[n].cardIndex = 0);
80
85
  },
81
86
  async onDiscoverNowClicked() {
82
87
  await this.setUserModalState("newVersionPopup", "true", "Guido"), await this.setUserModalState("genericOnboarding", "true", "Guido"), this.start("genericOnboarding");
@@ -93,16 +98,16 @@ const t = () => ({
93
98
  async fetchUserModalState() {
94
99
  if (this.isFetched)
95
100
  return;
96
- const { fetchUserModalState: n } = s();
101
+ const { fetchUserModalState: n } = e();
97
102
  try {
98
- const i = await n();
99
- this.userModalState = i, this.isFetched = !0;
103
+ const o = await n();
104
+ this.userModalState = o, this.isFetched = !0;
100
105
  } catch {
101
106
  }
102
107
  },
103
- async setUserModalState(n, i, o) {
104
- const { setUserModalState: r } = s();
105
- await r(n, i, o), this.isFetched = !1, await this.fetchUserModalState();
108
+ async setUserModalState(n, o, i) {
109
+ const { setUserModalState: r } = e();
110
+ await r(n, o, i), this.isFetched = !1, await this.fetchUserModalState();
106
111
  }
107
112
  }
108
113
  });
@@ -1,69 +1,78 @@
1
- const o = (t) => {
2
- const a = t.value.match(/\{\{([^}]+)\}\}/)[1].split("|").map((l) => l.trim()), [s] = a, r = {
1
+ import { formatToLiquidFilter as b, quoteArgument as y, liquidFilterToFormat as h } from "./liquidDynamicContent.js";
2
+ const g = (t) => {
3
+ if (!t.includes("="))
4
+ return null;
5
+ const [r, e] = t.split("=");
6
+ return { key: r.trim(), value: e.trim() };
7
+ }, c = "default:", f = (t) => {
8
+ if (!t.startsWith(c))
9
+ return t;
10
+ const r = t.slice(c.length).trim(), e = (l) => r.length >= 2 && r.startsWith(l) && r.endsWith(l);
11
+ return e('"') || e("'") ? r.slice(1, -1) : r;
12
+ }, k = (t) => {
13
+ const e = t.value.match(/\{\{([^}]+)\}\}/)[1].split("|").map((a) => a.trim()), [l] = e, s = {
3
14
  text: t.label,
4
- value: s || ""
15
+ value: l || ""
5
16
  };
6
- if (a.length >= 2) {
7
- const [, l, e] = a;
8
- if (l.startsWith("default:")) {
9
- let n = l.slice(8).trim();
10
- n.startsWith('"') && n.endsWith('"') && (n = n.slice(1, -1)), r.fallback = n;
11
- } else {
12
- const n = l.includes("=") ? { key: l.split("=")[0].trim(), value: l.split("=")[1].trim() } : null;
13
- n ? r.format = n : e || (r.fallback = l), e && (r.fallback = e);
17
+ if (e.length >= 2) {
18
+ const [, a, n] = e;
19
+ if (a.startsWith(c))
20
+ s.fallback = f(a);
21
+ else {
22
+ const o = h(a) ?? g(a);
23
+ o ? s.format = o : n || (s.fallback = a), n && (s.fallback = f(n));
14
24
  }
15
25
  }
16
- return r;
17
- }, f = (t, c = !1) => t.map((a) => {
18
- if (a.format)
19
- return {
20
- label: `${a.text} | ${a.format.key}=${a.format.value}`,
21
- value: `{{${a.value}|${a.format.key}=${a.format.value}}}`
22
- };
23
- if (c) {
24
- if (!a.fallback)
25
- return {
26
- label: a.text,
27
- value: `{{ ${a.value} }}`
28
- };
29
- const r = !Number.isNaN(Number(a.fallback)) && a.fallback.trim() !== "" ? a.fallback : `"${a.fallback}"`;
30
- return {
31
- label: `${a.text} | ${a.fallback}`,
32
- value: `{{ ${a.value} | default: ${r} }}`
33
- };
34
- }
26
+ return s;
27
+ }, p = (t) => {
28
+ const e = !Number.isNaN(Number(t)) && t.trim() !== "" ? t : y(t);
29
+ return e === null ? null : `${c} ${e}`;
30
+ }, v = (t) => {
31
+ const r = t.format ? b(t.format) : null, e = t.fallback ? p(t.fallback) : null, l = [t.value, r, e].filter(Boolean);
35
32
  return {
36
- label: a.fallback ? `${a.text} | ${a.fallback}` : a.text,
37
- value: a.fallback ? `{{${a.value}|${a.fallback}}}` : `{{${a.value}}}`
33
+ label: [t.text, r, e && t.fallback].filter(Boolean).join(" | "),
34
+ value: `{{ ${l.join(" | ")} }}`
38
35
  };
39
- }), b = (t) => {
40
- const c = [], a = /* @__PURE__ */ new Set(), s = (l) => {
41
- Array.isArray(l) && l.forEach((e) => {
42
- const n = [...e.children ?? [], ...e.select_items ?? []];
43
- if (n.length > 0) {
44
- s(n);
36
+ }, i = (t, r = !1) => t.map((e) => r ? v(e) : e.format ? {
37
+ label: `${e.text} | ${e.format.key}=${e.format.value}`,
38
+ value: `{{${e.value}|${e.format.key}=${e.format.value}}}`
39
+ } : {
40
+ label: e.fallback ? `${e.text} | ${e.fallback}` : e.text,
41
+ value: e.fallback ? `{{${e.value}|${e.fallback}}}` : `{{${e.value}}}`
42
+ }), $ = (t) => {
43
+ const r = [], e = /* @__PURE__ */ new Set(), l = (a) => {
44
+ Array.isArray(a) && a.forEach((n) => {
45
+ const o = [...n.children ?? [], ...n.select_items ?? []];
46
+ if (o.length > 0) {
47
+ l(o);
45
48
  return;
46
49
  }
47
- const u = e.text || e.tag_text;
48
- u && e.value && !a.has(e.value) && (a.add(e.value), c.push({ text: u, value: e.value }));
50
+ const u = n.text || n.tag_text;
51
+ u && n.value && !e.has(n.value) && (e.add(n.value), r.push({ text: u, value: n.value }));
49
52
  });
50
- }, [r] = Object.values(t ?? {});
51
- return s(r), c;
52
- }, i = (t, c, a = !1) => {
53
- const s = new Set(t.map((l) => l.value)), r = c.filter((l) => s.has(l.value) ? !1 : (s.add(l.value), !0));
53
+ }, [s] = Object.values(t ?? {});
54
+ return l(s), r;
55
+ }, d = (t, r, e = !1) => {
56
+ const l = new Set(t.map((a) => a.value)), s = r.filter((a) => l.has(a.value) ? !1 : (l.add(a.value), !0));
54
57
  return [
55
- ...f(t, a),
56
- ...f(r, a)
58
+ ...i(t, e),
59
+ ...i(s, e)
57
60
  ];
58
- }, v = () => {
61
+ }, F = () => {
59
62
  var t;
60
63
  return ((t = document.head.querySelector('meta[name="csrf-token"]')) == null ? void 0 : t.getAttribute("content")) ?? "";
61
- }, k = (t) => typeof t == "string" ? t : typeof t == "number" ? String(t) : "";
64
+ }, T = (t) => typeof t == "string" ? t : typeof t == "number" ? String(t) : "", x = (t) => {
65
+ if (t === null || typeof t != "object" || Array.isArray(t))
66
+ return !1;
67
+ const r = Object.getPrototypeOf(t);
68
+ return r === Object.prototype || r === null;
69
+ };
62
70
  export {
63
- k as asText,
64
- i as buildMergeTagEntries,
65
- f as dynamicContentToMergeTags,
66
- b as flattenDynamicContentList,
67
- v as getCsrfToken,
68
- o as mergeTagToDynamicContent
71
+ T as asText,
72
+ d as buildMergeTagEntries,
73
+ i as dynamicContentToMergeTags,
74
+ $ as flattenDynamicContentList,
75
+ F as getCsrfToken,
76
+ x as isPlainObject,
77
+ k as mergeTagToDynamicContent
69
78
  };
@@ -0,0 +1,15 @@
1
+ const E = "time-format", r = "date", u = new RegExp(`^${r}\\s*:\\s*(?:"([^"]*)"|'([^']*)')$`), s = /%[-_0^#]?\d*[a-zA-Z%]/, c = new RegExp(s, "g"), l = /\b(?:Y{2,4}|M{2,4}|D{1,4}|d{3,4}|H{2}|h{2}|m{2}|s{2}|S{1,3}|A|a)\b/, T = (t) => t.includes('"') ? t.includes("'") ? null : `'${t}'` : `"${t}"`, i = (t) => s.test(t) && !l.test(t.replace(c, "")), R = (t) => {
2
+ if (t.key !== E || !i(t.value ?? ""))
3
+ return null;
4
+ const n = T(t.value);
5
+ return n === null ? null : `${r}: ${n}`;
6
+ }, _ = (t) => {
7
+ const [, n, o] = t.match(u) ?? [], e = n ?? o;
8
+ return e ? { key: E, value: e } : null;
9
+ };
10
+ export {
11
+ E as TIME_FORMAT_KEY,
12
+ R as formatToLiquidFilter,
13
+ _ as liquidFilterToFormat,
14
+ T as quoteArgument
15
+ };
@@ -1,31 +1,32 @@
1
- import { useActionsApi as k } from "../composables/useActionsApi.js";
2
- import { useConfig as U } from "../composables/useConfig.js";
3
- import { useHtmlCompiler as x } from "../composables/useHtmlCompiler.js";
4
- import { DEFAULT_CURRENCY as d, DEFAULT_NODE_CONFIG as a } from "../extensions/Blocks/Recommendation/constants/defaultConfig.js";
5
- import { useRecommendationExtensionStore as C } from "../extensions/Blocks/Recommendation/store/recommendation.js";
6
- import { mapLegacyStrategy as L } from "../extensions/Blocks/Recommendation/utils/legacyStrategyMap.js";
1
+ import { useActionsApi as R } from "../composables/useActionsApi.js";
2
+ import { useConfig as k } from "../composables/useConfig.js";
3
+ import { useHtmlCompiler as N } from "../composables/useHtmlCompiler.js";
4
+ import { RRS_CONFIG_VERSION as U, DEFAULT_CURRENCY as m, DEFAULT_NODE_CONFIG as n } from "../extensions/Blocks/Recommendation/constants/defaultConfig.js";
5
+ import { useRecommendationExtensionStore as I } from "../extensions/Blocks/Recommendation/store/recommendation.js";
6
+ import { mapLegacyStrategy as x } from "../extensions/Blocks/Recommendation/utils/legacyStrategyMap.js";
7
7
  import { DATA_ATTRIBUTES as A } from "../extensions/Blocks/Unsubscribe/utils/constants.js";
8
- import { parsePageList as R } from "../extensions/Blocks/Unsubscribe/utils/utils.js";
9
- import { useDynamicContentStore as N } from "../stores/dynamic-content.js";
10
- import { useEditorStore as z } from "../stores/editor.js";
8
+ import { parsePageList as L } from "../extensions/Blocks/Unsubscribe/utils/utils.js";
9
+ import { useDynamicContentStore as z } from "../stores/dynamic-content.js";
10
+ import { useEditorStore as O } from "../stores/editor.js";
11
11
  import { useUnsubscribeStore as _ } from "../stores/unsubscribe.js";
12
- import { assignTrackingIds as v } from "./linkTrackingIds.js";
13
- function O(m) {
14
- const i = new DOMParser().parseFromString(m, "text/html").querySelectorAll(`[${A.PAGE_LIST}]`), t = [];
12
+ import { isPlainObject as v } from "./genericUtil.js";
13
+ import { assignTrackingIds as B } from "./linkTrackingIds.js";
14
+ function G(l) {
15
+ const i = new DOMParser().parseFromString(l, "text/html").querySelectorAll(`[${A.PAGE_LIST}]`), t = [];
15
16
  return i.forEach((s) => {
16
- const o = s.getAttribute(A.PAGE_LIST);
17
- o && t.push(...R(o));
17
+ const r = s.getAttribute(A.PAGE_LIST);
18
+ r && t.push(...L(r));
18
19
  }), [...new Set(t)];
19
20
  }
20
- async function M(m) {
21
- const n = new DOMParser().parseFromString(m, "text/html").querySelectorAll(".recommendation-block-v2");
22
- if (n.length === 0)
21
+ async function M(l) {
22
+ const a = new DOMParser().parseFromString(l, "text/html").querySelectorAll(".recommendation-block-v2");
23
+ if (a.length === 0)
23
24
  return;
24
- const i = C();
25
- n.forEach((t) => {
26
- var r, l, g, f, c;
27
- const s = t.getAttribute("recommendation-id"), o = s ? Number(s) : NaN;
28
- if (!Number.isFinite(o))
25
+ const i = I();
26
+ a.forEach((t) => {
27
+ var d, g, f, c, y, S;
28
+ const s = t.getAttribute("recommendation-id"), r = s ? Number(s) : NaN;
29
+ if (!Number.isFinite(r))
29
30
  return;
30
31
  const p = t.getAttribute("esd-ext-config");
31
32
  if (!p)
@@ -36,28 +37,29 @@ async function M(m) {
36
37
  } catch {
37
38
  return;
38
39
  }
39
- if (!e || typeof e != "object" || Array.isArray(e))
40
+ if (!v(e))
40
41
  return;
41
- const h = {
42
+ const C = !!e.strategyId || (e.configVersion ?? 0) >= U, o = {
42
43
  // Normalize legacy strategy keys (e.g. `mostViewed` → `mostPopular`) so
43
44
  // already-saved blocks that never re-run the migrator don't emit a
44
45
  // strategy-less campaign URL. `||` also catches '' / undefined (SD-144882).
45
- strategy: L(e.strategy) || a.strategy,
46
- strategyId: e.strategyId ?? a.strategyId,
47
- language: e.language ?? a.language,
48
- size: e.size ?? a.size,
46
+ strategy: x(e.strategy) || (C ? "" : n.strategy),
47
+ strategyId: e.strategyId ?? n.strategyId,
48
+ language: e.language ?? n.language,
49
+ size: e.size ?? n.size,
49
50
  // Spread the default arrays so each block gets a fresh reference
50
51
  // instead of sharing the singleton in DEFAULT_NODE_CONFIG.
51
- productIds: e.productIds ?? [...a.productIds],
52
- filters: e.filters ?? [...a.filters],
53
- shuffleProducts: e.shuffleProducts ?? a.shuffleProducts,
54
- currencyCode: ((r = e.currency) == null ? void 0 : r.code) ?? d.code,
55
- currencyAlignment: ((l = e.currency) == null ? void 0 : l.alignment) ?? d.alignment,
56
- currencyDecimalCount: ((g = e.currency) == null ? void 0 : g.decimalCount) ?? d.decimalCount,
57
- currencyDecimalSeparator: ((f = e.currency) == null ? void 0 : f.decimalSeparator) ?? d.decimalSeparator,
58
- currencyThousandSeparator: ((c = e.currency) == null ? void 0 : c.thousandSeparator) ?? d.thousandSeparator
52
+ productIds: e.productIds ?? [...n.productIds],
53
+ filters: e.filters ?? [...n.filters],
54
+ shuffleProducts: e.shuffleProducts ?? n.shuffleProducts,
55
+ currencyCode: ((d = e.currency) == null ? void 0 : d.code) ?? m.code,
56
+ currencySymbol: ((g = e.currency) == null ? void 0 : g.symbol) ?? m.symbol,
57
+ currencyAlignment: ((f = e.currency) == null ? void 0 : f.alignment) ?? m.alignment,
58
+ currencyDecimalCount: ((c = e.currency) == null ? void 0 : c.decimalCount) ?? m.decimalCount,
59
+ currencyDecimalSeparator: ((y = e.currency) == null ? void 0 : y.decimalSeparator) ?? m.decimalSeparator,
60
+ currencyThousandSeparator: ((S = e.currency) == null ? void 0 : S.thousandSeparator) ?? m.thousandSeparator
59
61
  };
60
- i.seedBlockUrlConfig(o, h);
62
+ i.seedBlockUrlConfig(r, o);
61
63
  });
62
64
  try {
63
65
  await i.fetchRecommendationCreateData();
@@ -68,51 +70,51 @@ async function M(m) {
68
70
  );
69
71
  }
70
72
  }
71
- const Z = () => {
72
- const m = N(), u = z(), n = _(), { getCompiledEmail: i, getTemplateData: t, updateHtmlAndCss: s } = k(), { compileHtml: o, compileAmpHtml: p } = x(), { isFeatureEnabled: e } = U();
73
+ const re = () => {
74
+ const l = z(), u = O(), a = _(), { getCompiledEmail: i, getTemplateData: t, updateHtmlAndCss: s } = R(), { compileHtml: r, compileAmpHtml: p } = N(), { isFeatureEnabled: e } = k();
73
75
  return {
74
76
  prepareTemplateDetails: async () => {
75
- let { html: r, css: l, syncModulesIds: g = [] } = await t();
77
+ let { html: o, css: d, syncModulesIds: g = [] } = await t();
76
78
  if (e("linkTrackingIds"))
77
79
  try {
78
- const { html: S, changed: F, nextSeq: H } = v(r, u.trackIdSessionFloor);
79
- u.trackIdSessionFloor = H, F && (r = S, await s(S, l));
80
- } catch (S) {
81
- console.error("Tracking-id step failed, saving anyway:", S);
80
+ const { html: b, changed: F, nextSeq: H } = B(o, u.trackIdSessionFloor);
81
+ u.trackIdSessionFloor = H, F && (o = b, await s(b, d));
82
+ } catch (b) {
83
+ console.error("Tracking-id step failed, saving anyway:", b);
82
84
  }
83
- const { html: f, ampHtml: c = "", ampErrors: T = [] } = await i({
85
+ const { html: f, ampHtml: c = "", ampErrors: y = [] } = await i({
84
86
  minimize: !0,
85
87
  resetDataSavedFlag: !1
86
88
  });
87
- n.selectedUnsubscribePages.length && await n.fetchTemplates(), await M(r);
88
- const { compiledHtml: I, stats: y, appliedRules: w } = o(f), D = c && p(c).compiledHtml, E = m.getSelectedDynamicContentList, P = C(), b = O(r);
89
+ a.selectedUnsubscribePages.length && await a.fetchTemplates(), await M(o);
90
+ const { compiledHtml: S, stats: h, appliedRules: w } = r(f), D = c && p(c).compiledHtml, E = l.getSelectedDynamicContentList, P = I(), T = G(o);
89
91
  return console.debug("HTML Compilation Stats:", {
90
- originalSize: y.originalSize,
91
- compiledSize: y.compiledSize,
92
- reduction: `${y.reductionPercentage.toFixed(2)}%`,
92
+ originalSize: h.originalSize,
93
+ compiledSize: h.compiledSize,
94
+ reduction: `${h.reductionPercentage.toFixed(2)}%`,
93
95
  appliedRules: w,
94
- executionTime: `${y.executionTime.toFixed(2)}ms`
96
+ executionTime: `${h.executionTime.toFixed(2)}ms`
95
97
  }), {
96
98
  dynamicContentList: E,
97
- compiledHtml: I,
98
- rawHtml: r,
99
- css: l,
99
+ compiledHtml: S,
100
+ rawHtml: o,
101
+ css: d,
100
102
  ampHtml: D,
101
- ampErrors: T,
103
+ ampErrors: y,
102
104
  modules: g.map(Number),
103
105
  recommendation: {
104
106
  campaignUrls: P.recommendationCampaignUrls,
105
107
  configs: {}
106
108
  },
107
109
  unsubscribe: {
108
- status: b.length > 0,
109
- config: b
110
+ status: T.length > 0,
111
+ config: T
110
112
  }
111
113
  };
112
114
  }
113
115
  };
114
116
  };
115
117
  export {
116
- O as getHtmlReferencedUnsubscribePages,
117
- Z as useTemplatePreparation
118
+ G as getHtmlReferencedUnsubscribePages,
119
+ re as useTemplatePreparation
118
120
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@useinsider/guido",
3
- "version": "3.18.1",
3
+ "version": "3.18.2-beta.320e07f",
4
4
  "description": "Guido is a Vue + TypeScript wrapper for Email Plugin. Easily embed the email editor in your Vue applications.",
5
5
  "main": "./dist/guido.umd.cjs",
6
6
  "module": "./dist/library.js",
@@ -47,7 +47,7 @@
47
47
  "author": "",
48
48
  "license": "ISC",
49
49
  "dependencies": {
50
- "@stripoinc/ui-editor-extensions": "3.9.0",
50
+ "@stripoinc/ui-editor-extensions": "3.10.0",
51
51
  "@useinsider/design-system-organisms": "0.0.3-beta.d816f06",
52
52
  "@useinsider/design-system-vue": "1.5.0",
53
53
  "@vueuse/core": "11.3.0",
@@ -77,7 +77,7 @@
77
77
  "@typescript-eslint/parser": "7.18.0",
78
78
  "@useinsider/eslint-config": "1.5.3",
79
79
  "@vitejs/plugin-vue2": "2.3.1",
80
- "@vitest/coverage-v8": "2.1.9",
80
+ "@vitest/coverage-v8": "4.1.11",
81
81
  "eslint": "8.57.1",
82
82
  "eslint-config-airbnb-base": "15.0.0",
83
83
  "eslint-config-airbnb-typescript": "18.0.0",
@@ -90,17 +90,17 @@
90
90
  "happy-dom": "15.11.7",
91
91
  "husky": "9.1.7",
92
92
  "msw": "2.10.3",
93
- "nyc": "17.1.0",
93
+ "nyc": "18.0.0",
94
94
  "sass": "1.69.7",
95
95
  "typescript": "5.5.4",
96
96
  "typescript-eslint": "8.26.0",
97
97
  "vite-plugin-dts": "4.5.4",
98
98
  "vite-plugin-istanbul": "7.0.0",
99
- "vitest": "2.1.9",
99
+ "vitest": "4.1.11",
100
100
  "vue-tsc": "2.2.10"
101
101
  },
102
102
  "overrides": {
103
- "axios": "1.8.2",
103
+ "axios": "1.20.0",
104
104
  "flatted": "3.4.2",
105
105
  "micromatch": "4.0.8",
106
106
  "path-to-regexp": "6.3.0"
@@ -118,7 +118,7 @@
118
118
  },
119
119
  "guido": {
120
120
  "stripo": {
121
- "version": "2.73.0"
121
+ "version": "2.76.0"
122
122
  }
123
123
  }
124
124
  }