@useinsider/guido 3.16.0-beta.20cd2fe → 3.16.0-beta.77f2873

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 (62) hide show
  1. package/dist/@types/config/schemas.js +23 -25
  2. package/dist/components/organisms/header/AutoSaveToggle.vue.js +22 -0
  3. package/dist/components/organisms/header/AutoSaveToggle.vue2.js +19 -0
  4. package/dist/components/organisms/header/EditorActions.vue.js +11 -11
  5. package/dist/components/organisms/header/EditorActions.vue2.js +50 -34
  6. package/dist/components/organisms/header/LeftSlot.vue.js +5 -5
  7. package/dist/components/organisms/header/LeftSlot.vue2.js +23 -28
  8. package/dist/components/organisms/header/MiddleSlot.vue.js +4 -4
  9. package/dist/components/organisms/header/MiddleSlot.vue2.js +7 -8
  10. package/dist/components/organisms/header/RightSlot.vue.js +6 -6
  11. package/dist/components/organisms/header/RightSlot.vue2.js +15 -17
  12. package/dist/components/organisms/onboarding/OnboardingWrapper.vue2.js +34 -43
  13. package/dist/composables/useRecommendation.js +20 -19
  14. package/dist/config/i18n/en/labels.json.js +4 -28
  15. package/dist/config/migrator/itemsBlockMigrator.js +1 -1
  16. package/dist/enums/recommendation.js +17 -17
  17. package/dist/extensions/Blocks/Items/block.js +98 -49
  18. package/dist/extensions/Blocks/Items/constants/currency.js +11 -0
  19. package/dist/extensions/Blocks/Items/controls/price/currencyLocation.js +25 -24
  20. package/dist/extensions/Blocks/Items/controls/price/currencySymbol.js +12 -11
  21. package/dist/extensions/Blocks/Items/enums/productEnums.js +45 -45
  22. package/dist/extensions/Blocks/Items/template.js +103 -102
  23. package/dist/extensions/Blocks/Recommendation/controls/main/algorithm.js +37 -26
  24. package/dist/extensions/Blocks/Recommendation/controls/main/index.js +21 -21
  25. package/dist/extensions/Blocks/Recommendation/store/recommendation.js +13 -12
  26. package/dist/extensions/Blocks/Recommendation/utils/productIds.js +6 -0
  27. package/dist/guido.css +1 -1
  28. package/dist/node_modules/@vueuse/shared/index.js +28 -40
  29. package/dist/src/@types/config/schemas.d.ts +0 -4
  30. package/dist/src/composables/useActionsApi.d.ts +2 -2
  31. package/dist/src/composables/useConfig.d.ts +0 -2
  32. package/dist/src/extensions/Blocks/Items/block.d.ts +21 -0
  33. package/dist/src/extensions/Blocks/Items/constants/currency.d.ts +19 -0
  34. package/dist/src/extensions/Blocks/Recommendation/utils/productIds.d.ts +6 -0
  35. package/dist/src/stores/config.d.ts +0 -18
  36. package/dist/src/stores/editor.d.ts +0 -107
  37. package/dist/src/stores/onboarding.d.ts +0 -377
  38. package/dist/src/stores/version-history.d.ts +1 -1
  39. package/dist/src/utils/timeUtil.d.ts +0 -10
  40. package/dist/stores/editor.js +1 -5
  41. package/dist/stores/onboarding.js +11 -16
  42. package/dist/utils/pairProductVariables.js +60 -59
  43. package/dist/utils/timeUtil.js +17 -6
  44. package/package.json +1 -1
  45. package/dist/components/organisms/header/AutoSaveStatus.vue.js +0 -17
  46. package/dist/components/organisms/header/AutoSaveStatus.vue2.js +0 -21
  47. package/dist/components/organisms/header/EditorActionsMenu.vue.js +0 -20
  48. package/dist/components/organisms/header/EditorActionsMenu.vue2.js +0 -39
  49. package/dist/components/organisms/header/accessibility/AccessibilityToolbar.vue.js +0 -18
  50. package/dist/components/organisms/header/accessibility/AccessibilityToolbar.vue2.js +0 -37
  51. package/dist/components/organisms/header/accessibility/ColorVisionSelect.vue.js +0 -24
  52. package/dist/components/organisms/header/accessibility/ColorVisionSelect.vue2.js +0 -48
  53. package/dist/components/organisms/onboarding/EditorTabBarOnboarding.vue.js +0 -18
  54. package/dist/components/organisms/onboarding/EditorTabBarOnboarding.vue2.js +0 -74
  55. package/dist/composables/useAccessibilityApi.js +0 -31
  56. package/dist/node_modules/@vueuse/core/index.js +0 -102
  57. package/dist/src/components/organisms/header/EditorActionsMenu.vue.d.ts +0 -2
  58. package/dist/src/components/organisms/header/accessibility/AccessibilityToolbar.vue.d.ts +0 -2
  59. package/dist/src/components/organisms/header/accessibility/ColorVisionSelect.vue.d.ts +0 -2
  60. package/dist/src/components/organisms/onboarding/EditorTabBarOnboarding.vue.d.ts +0 -2
  61. package/dist/src/composables/useAccessibilityApi.d.ts +0 -15
  62. /package/dist/src/components/organisms/header/{AutoSaveStatus.vue.d.ts → AutoSaveToggle.vue.d.ts} +0 -0
@@ -1,82 +1,83 @@
1
+ import { ITEMS_CURRENCY_ATTR as N } from "../extensions/Blocks/Items/constants/currency.js";
1
2
  import { productPairs as L } from "../extensions/Blocks/Items/enums/productEnums.js";
2
- import { DefaultConfigValues as V } from "../extensions/Blocks/Items/enums/settingsEnums.js";
3
- import { escapeReplacement as G } from "../extensions/Blocks/Items/utils/nodeConfigUtils.js";
3
+ import { DefaultConfigValues as G } from "../extensions/Blocks/Items/enums/settingsEnums.js";
4
+ import { escapeReplacement as X } from "../extensions/Blocks/Items/utils/nodeConfigUtils.js";
4
5
  import { preserveTextStyles as F } from "./preserveTextStyles.js";
5
- import { unwrapProductNameLinks as X } from "./unwrapProductNameLink.js";
6
+ import { unwrapProductNameLinks as Y } from "./unwrapProductNameLink.js";
6
7
  const x = {
7
8
  CART_ITEMS: "ins_apr",
8
9
  BROWSED_ITEMS: "browsed_item",
9
10
  PURCHASED_ITEMS: "purchased_item"
10
- }, N = (S) => S.replaceAll("{%", "<!--{%").replaceAll("%}", "%}-->");
11
- function v(S, H, g) {
12
- let $ = H;
13
- for (; $ > 0 && /\s/.test(S[$ - 1]); )
14
- $ -= 1;
15
- return g.some((I) => S.endsWith(I, $));
11
+ }, O = (S) => S.replaceAll("{%", "<!--{%").replaceAll("%}", "%}-->");
12
+ function v(S, I, b) {
13
+ let h = I;
14
+ for (; h > 0 && /\s/.test(S[h - 1]); )
15
+ h -= 1;
16
+ return b.some((P) => S.endsWith(P, h));
16
17
  }
17
- function J(S) {
18
- const H = N(S), g = new DOMParser().parseFromString(H, "text/html");
19
- X(g);
20
- const $ = L.PAIRS_FOR_EXTENSION;
21
- Object.entries($).forEach(([n, d]) => {
22
- g.querySelectorAll(".ins-product-td").forEach((r) => {
18
+ function Z(S) {
19
+ const I = O(S), b = new DOMParser().parseFromString(I, "text/html");
20
+ Y(b);
21
+ const h = L.PAIRS_FOR_EXTENSION;
22
+ Object.entries(h).forEach(([n, d]) => {
23
+ b.querySelectorAll(".ins-product-td").forEach((r) => {
23
24
  const E = r.getAttribute("data-number") || "1", m = r.getAttribute("data-type") || "CART_ITEMS";
24
25
  r.querySelectorAll(`[product-attr="${n}"]`).forEach((t) => {
25
- var T, P, D;
26
- const R = t.getAttribute("data-type") || m, o = t.getAttribute("data-number") || E, f = d[R];
27
- if (f)
26
+ var $, H, D;
27
+ const g = t.getAttribute("data-type") || m, o = t.getAttribute("data-number") || E, u = d[g];
28
+ if (u)
28
29
  switch (n) {
29
30
  case "imageSrc": {
30
31
  let e = null, s = null;
31
32
  if (t.tagName === "IMG" ? (e = t, s = e.closest("a")) : (e = t.querySelector("img"), s = t.querySelector("a") || t.closest("a")), !e)
32
33
  break;
33
- const a = f.DEFAULT, l = f.ATTR;
34
+ const a = u.DEFAULT, l = u.ATTR;
34
35
  if (a && e.src) {
35
36
  const i = e.src;
36
- a.some((b) => {
37
- const u = b.split("/").pop() || "", y = i.split("/").pop() || "";
38
- return i.includes(b) || i.includes(u) || y === u;
37
+ a.some((_) => {
38
+ const f = _.split("/").pop() || "", C = i.split("/").pop() || "";
39
+ return i.includes(_) || i.includes(f) || C === f;
39
40
  }) && (e.src = `{{${l}_${o}}}`);
40
41
  }
41
- const c = (P = (T = $.name) == null ? void 0 : T[R]) == null ? void 0 : P.ATTR;
42
+ const c = (H = ($ = h.name) == null ? void 0 : $[g]) == null ? void 0 : H.ATTR;
42
43
  if (c && e.setAttribute("alt", `{{${c}_${o}}}`), s) {
43
- const i = (D = $.itemLink) == null ? void 0 : D[R];
44
+ const i = (D = h.itemLink) == null ? void 0 : D[g];
44
45
  if (i) {
45
- const _ = i.HREF, b = i.DEFAULT_HREF || "#!", u = s.href;
46
- (u === "#" || u === "" || u.endsWith("#!") || u.endsWith(b) || u === `${window.location.href}${b}` || !u || u === window.location.href) && (s.href = `{{${_}_${o}}}`);
46
+ const R = i.HREF, _ = i.DEFAULT_HREF || "#!", f = s.href;
47
+ (f === "#" || f === "" || f.endsWith("#!") || f.endsWith(_) || f === `${window.location.href}${_}` || !f || f === window.location.href) && (s.href = `{{${R}_${o}}}`);
47
48
  }
48
49
  }
49
50
  break;
50
51
  }
51
52
  case "name": {
52
- const e = f, s = e.ATTR, a = e.DEFAULT_HREF || "#!", l = e.HREF;
53
+ const e = u, s = e.ATTR, a = e.DEFAULT_HREF || "#!", l = e.HREF;
53
54
  t.textContent && (t.innerHTML = F(t, `{{${s}_${o}}}`));
54
55
  const c = t.closest("a") || (t.tagName === "A" ? t : null);
55
56
  if (c && l) {
56
- const i = c.href, _ = `${window.location.href}${a}`;
57
- (i === _ || i.endsWith(a)) && (c.href = `{{${l}_${o}}}`);
57
+ const i = c.href, R = `${window.location.href}${a}`;
58
+ (i === R || i.endsWith(a)) && (c.href = `{{${l}_${o}}}`);
58
59
  }
59
60
  break;
60
61
  }
61
62
  case "price":
62
63
  case "originalPrice": {
63
- const e = f, s = t.getAttribute("data-formated"), a = t.getAttribute("data-single_price"), l = s === "true", c = a === "true", i = t.getAttribute("data-curency") || "before";
64
- let _;
65
- c ? _ = l ? e.SINGLE_PRICE_FORMATTED : e.SINGLE_PRICE : _ = l ? e.PRICE_FORMATTED : e.PRICE;
66
- const b = e.CURRENCY;
67
- let u = `{{${_}_${o}}}`;
68
- const y = (t.getAttribute("data-currency_symbol") || "").trim(), W = y !== "" && y !== V.productPriceCurrencySymbolControlValue;
69
- let C = "";
70
- W ? C = y : b && (C = `{{${b}_${o}}}`), C && (u = i === "after" ? `${u} ${C}` : `${C} ${u}`), t.innerHTML = F(t, u);
64
+ const e = u, s = t.getAttribute("data-formated"), a = t.getAttribute("data-single_price"), l = s === "true", c = a === "true", i = t.getAttribute(N.POSITION) || "before";
65
+ let R;
66
+ c ? R = l ? e.SINGLE_PRICE_FORMATTED : e.SINGLE_PRICE : R = l ? e.PRICE_FORMATTED : e.PRICE;
67
+ const _ = e.CURRENCY;
68
+ let f = `{{${R}_${o}}}`;
69
+ const C = (t.getAttribute(N.SYMBOL) || "").trim(), V = C !== "" && C !== G.productPriceCurrencySymbolControlValue;
70
+ let y = "";
71
+ V ? y = C : _ && (y = `{{${_}_${o}}}`), y && (f = i === "after" ? `${f} ${y}` : `${y} ${f}`), t.innerHTML = F(t, f);
71
72
  break;
72
73
  }
73
74
  case "quantity": {
74
- const e = f, s = e.ATTR, a = e.DEFAULT;
75
+ const e = u, s = e.ATTR, a = e.DEFAULT;
75
76
  t.textContent && t.textContent.trim() === a && (t.innerHTML = F(t, `{{${s}_${o}}}`));
76
77
  break;
77
78
  }
78
79
  case "button": {
79
- const e = f, s = e.HREF, a = e.DEFAULT_HREF || "#!", l = t.tagName === "A" ? t : t.querySelector("a");
80
+ const e = u, s = e.HREF, a = e.DEFAULT_HREF || "#!", l = t.tagName === "A" ? t : t.querySelector("a");
80
81
  if (l) {
81
82
  const c = l.href || "", i = `${window.location.href}${a}`;
82
83
  (c === "" || c === "#" || c === i || c.endsWith(a) || c.endsWith("#!") || c === window.location.href) && (l.href = `{{${s}_${o}}}`);
@@ -84,7 +85,7 @@ function J(S) {
84
85
  break;
85
86
  }
86
87
  case "itemLink": {
87
- const e = f, s = e.HREF, a = e.DEFAULT_HREF || "#!", l = t;
88
+ const e = u, s = e.HREF, a = e.DEFAULT_HREF || "#!", l = t;
88
89
  if (l.href) {
89
90
  const c = l.href, i = `${window.location.href}${a}`;
90
91
  (c === i || c.endsWith(a)) && (l.href = `{{${s}_${o}}}`);
@@ -92,8 +93,8 @@ function J(S) {
92
93
  break;
93
94
  }
94
95
  default: {
95
- if ("ATTR" in f) {
96
- const e = f.ATTR;
96
+ if ("ATTR" in u) {
97
+ const e = u.ATTR;
97
98
  t.textContent && (t.innerHTML = F(t, `{{${e}_${o}}}`));
98
99
  }
99
100
  break;
@@ -102,9 +103,9 @@ function J(S) {
102
103
  });
103
104
  });
104
105
  });
105
- const I = H.match(/<!DOCTYPE[^>]*>/i), O = I ? `${I[0]}
106
- ` : "", q = g.querySelectorAll(".ins-product-td"), M = [];
107
- q.forEach((n) => {
106
+ const P = I.match(/<!DOCTYPE[^>]*>/i), q = P ? `${P[0]}
107
+ ` : "", U = b.querySelectorAll(".ins-product-td"), M = [];
108
+ U.forEach((n) => {
108
109
  const d = n.getAttribute("data-type") || "CART_ITEMS", p = n.getAttribute("data-number") || "1", r = n.outerHTML;
109
110
  M.push({
110
111
  element: n,
@@ -113,16 +114,16 @@ function J(S) {
113
114
  number: p
114
115
  });
115
116
  });
116
- let A = O + g.documentElement.outerHTML;
117
+ let A = q + b.documentElement.outerHTML;
117
118
  M.reverse().forEach(({ outerHtml: n, type: d, number: p }) => {
118
119
  const r = x[d], E = r ? `${r}_total_product_kind` : "";
119
120
  if (E) {
120
- const h = parseInt(p) - 1, o = `${`{% if ${E} > ${h} %}`}${n}{% endif %}`;
121
- A = A.replace(n, G(o));
121
+ const T = parseInt(p) - 1, o = `${`{% if ${E} > ${T} %}`}${n}{% endif %}`;
122
+ A = A.replace(n, X(o));
122
123
  }
123
124
  });
124
- const U = g.querySelectorAll('[product-attr="originalPrice"][data-type]'), w = /* @__PURE__ */ new Map(), k = /* @__PURE__ */ new Set();
125
- return U.forEach((n) => {
125
+ const W = b.querySelectorAll('[product-attr="originalPrice"][data-type]'), w = /* @__PURE__ */ new Map(), k = /* @__PURE__ */ new Set();
126
+ return W.forEach((n) => {
126
127
  var t;
127
128
  const d = n.getAttribute("data-number"), p = n.getAttribute("data-type");
128
129
  if (!d || !x[p])
@@ -131,20 +132,20 @@ function J(S) {
131
132
  if (!r || k.has(r))
132
133
  return;
133
134
  k.add(r);
134
- const E = r.outerHTML, m = (t = n.closest(".ins-product-td")) == null ? void 0 : t.getAttribute("data-nodup"), h = w.get(E) ?? { number: d, type: p, wrap: [] };
135
- h.wrap.push(m !== "false"), w.set(E, h);
135
+ const E = r.outerHTML, m = (t = n.closest(".ins-product-td")) == null ? void 0 : t.getAttribute("data-nodup"), T = w.get(E) ?? { number: d, type: p, wrap: [] };
136
+ T.wrap.push(m !== "false"), w.set(E, T);
136
137
  }), w.forEach(({ number: n, type: d, wrap: p }, r) => {
137
138
  if (r.includes("{% if") || !p.some(Boolean))
138
139
  return;
139
- const E = L.PAIRS_FOR_EXTENSION.price[d].PRICE, m = L.PAIRS_FOR_EXTENSION.originalPrice[d].PRICE, h = `{% if ${E}_${n} != ${m}_${n} %}`, t = [h, N(h)];
140
- let R = "", o = 0, f = 0, T = A.indexOf(r);
141
- for (; T !== -1; ) {
142
- const P = p[f] === !0 && !v(A, T, t);
143
- R += A.slice(o, T) + (P ? `${h}${r}{% endif %}` : r), o = T + r.length, f += 1, T = A.indexOf(r, o);
140
+ const E = L.PAIRS_FOR_EXTENSION.price[d].PRICE, m = L.PAIRS_FOR_EXTENSION.originalPrice[d].PRICE, T = `{% if ${E}_${n} != ${m}_${n} %}`, t = [T, O(T)];
141
+ let g = "", o = 0, u = 0, $ = A.indexOf(r);
142
+ for (; $ !== -1; ) {
143
+ const H = p[u] === !0 && !v(A, $, t);
144
+ g += A.slice(o, $) + (H ? `${T}${r}{% endif %}` : r), o = $ + r.length, u += 1, $ = A.indexOf(r, o);
144
145
  }
145
- A = R + A.slice(o);
146
+ A = g + A.slice(o);
146
147
  }), A.replaceAll("<!--{%", "{%").replaceAll("%}-->", "%}").replaceAll("&lt;!--{%", "{%").replaceAll("%}--&gt;", "%}");
147
148
  }
148
149
  export {
149
- J as pairProductVariables
150
+ Z as pairProductVariables
150
151
  };
@@ -1,8 +1,19 @@
1
- const g = (t) => String(t).padStart(2, "0"), a = (t, e) => t.getFullYear() === e.getFullYear() && t.getMonth() === e.getMonth() && t.getDate() === e.getDate(), o = (t, e = /* @__PURE__ */ new Date()) => ({
2
- isToday: a(t, e),
3
- time: `${g(t.getHours())}:${g(t.getMinutes())}`,
4
- date: `${g(t.getDate())}.${g(t.getMonth() + 1)}.${t.getFullYear()}`
5
- });
1
+ const r = (t) => {
2
+ const e = -t.getTimezoneOffset(), o = e >= 0 ? "+" : "-", n = Math.abs(e), s = Math.floor(n / 60), i = n % 60;
3
+ return i === 0 ? `UTC${o}${s}` : `UTC${o}${s}:${String(i).padStart(2, "0")}`;
4
+ }, a = () => {
5
+ var e;
6
+ const { timeZone: t } = new Intl.DateTimeFormat().resolvedOptions();
7
+ return ((e = t.split("/").pop()) == null ? void 0 : e.replace(/_/g, " ")) ?? t;
8
+ }, c = (t, e = !1) => {
9
+ const o = t.toLocaleTimeString([], {
10
+ hour: "2-digit",
11
+ hour12: !1,
12
+ minute: "2-digit",
13
+ second: "2-digit"
14
+ });
15
+ return e ? `${o} (${r(t)} ${a()})` : o;
16
+ };
6
17
  export {
7
- o as autoSaveTimestamp
18
+ c as formatLocalTime
8
19
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@useinsider/guido",
3
- "version": "3.16.0-beta.20cd2fe",
3
+ "version": "3.16.0-beta.77f2873",
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",
@@ -1,17 +0,0 @@
1
- import e from "./AutoSaveStatus.vue2.js";
2
- import r from "../../../_virtual/_plugin-vue2_normalizer.js";
3
- var n = function() {
4
- var s = this, t = s._self._c, a = s._self._setupProxy;
5
- return a.isFeatureEnabled("autosave") ? t("div", { staticClass: "d-f a-i-c mr-3 auto-save-status" }, [a.autosaveStore.status === a.AUTOSAVE_STATUS.SAVING ? t("span", { staticClass: "d-f a-i-c f-s-1" }, [t(a.InLoading, { attrs: { "color-class": "i-c-53", size: "16" } }), t("span", { staticClass: "ml-1 t-c-53" }, [s._v(s._s(a.trans("newsletter.saving")))])], 1) : a.savedLabel ? t("span", { staticClass: "f-s-1 t-c-53" }, [s._v(s._s(a.savedLabel))]) : s._e()]) : s._e();
6
- }, _ = [], o = /* @__PURE__ */ r(
7
- e,
8
- n,
9
- _,
10
- !1,
11
- null,
12
- null
13
- );
14
- const u = o.exports;
15
- export {
16
- u as default
17
- };
@@ -1,21 +0,0 @@
1
- import { defineComponent as i, computed as u } from "vue";
2
- import { useConfig as d } from "../../../composables/useConfig.js";
3
- import { useTranslations as p } from "../../../composables/useTranslations.js";
4
- import { useAutosaveStore as f, AUTOSAVE_STATUS as o } from "../../../stores/autosave.js";
5
- import { autoSaveTimestamp as S } from "../../../utils/timeUtil.js";
6
- import { InLoading as c } from "@useinsider/design-system-vue";
7
- const g = /* @__PURE__ */ i({
8
- __name: "AutoSaveStatus",
9
- setup(v) {
10
- const { isFeatureEnabled: a } = d(), t = f(), e = p(), s = u(() => {
11
- if (t.status !== o.SAVED || !t.lastSavedAt)
12
- return "";
13
- const { isToday: r, time: m, date: n } = S(t.lastSavedAt);
14
- return r ? e("email-editor.autosaved-at-today", { time: m }) : e("email-editor.autosaved-at-date", { date: n });
15
- });
16
- return { __sfc: !0, isFeatureEnabled: a, autosaveStore: t, trans: e, savedLabel: s, AUTOSAVE_STATUS: o, InLoading: c };
17
- }
18
- });
19
- export {
20
- g as default
21
- };
@@ -1,20 +0,0 @@
1
- import i from "./EditorActionsMenu.vue2.js";
2
- /* empty css */
3
- import a from "../../../_virtual/_plugin-vue2_normalizer.js";
4
- var o = function() {
5
- var e = this, s = e._self._c, t = e._self._setupProxy;
6
- return s("div", { ref: "root", staticClass: "editor-actions-menu p-r" }, [s(t.InButtonV2, { attrs: { id: "guido__kebab-button", "data-testid": "Editor Actions Menu", "left-icon": "line-more-vertical", styling: "ghost", type: "secondary", "disabled-status": t.editorStore.loadingStatus, "label-text-status": !1, "selected-status": t.isOpen, "tooltip-options": t.getTooltipOptions("guido__kebab-button"), "tooltip-text": t.trans("email-editor.more-actions") }, on: { click: function(l) {
7
- t.isOpen = !t.isOpen;
8
- } } }), t.isOpen ? s("div", { staticClass: "editor-actions-menu__panel p-a" }, [t.isAutosaveVisible ? [s("p", { staticClass: "editor-actions-menu__section f-s-1 t-c-55" }, [e._v(" " + e._s(t.trans("email-editor.preferences")) + " ")]), s("div", { staticClass: "editor-actions-menu__row editor-actions-menu__row_static d-f a-i-c j-c-s-b" }, [s("span", { staticClass: "f-s-2" }, [e._v(e._s(t.trans("email-editor.auto-save")))]), s(t.InToggle, { attrs: { id: "guido__kebab-autosave-toggle", name: "guido-kebab-autosave-toggle", checked: t.autosaveStore.isOn, disable: t.editorStore.loadingStatus }, on: { click: t.toggleAutosave } })], 1), s("div", { staticClass: "editor-actions-menu__divider" })] : e._e(), s("p", { staticClass: "editor-actions-menu__section f-s-1 t-c-55" }, [e._v(" " + e._s(t.trans("email-editor.actions")) + " ")]), t.isVersionHistoryVisible ? s("button", { staticClass: "editor-actions-menu__row d-f a-i-c", attrs: { id: "guido__kebab-version-history", type: "button", disabled: t.editorStore.isVersionHistoryButtonDisabled }, on: { click: t.handleVersionHistory } }, [s(t.InIcons, { staticClass: "mr-2", attrs: { name: "line-architect-version-history", size: "16" } }), s("span", { staticClass: "f-s-2" }, [e._v(e._s(t.trans("newsletter.version-history")))])], 1) : e._e(), t.isAccessibilityVisible ? s("button", { staticClass: "editor-actions-menu__row d-f a-i-c", attrs: { id: "guido__kebab-accessibility", type: "button", disabled: t.editorStore.loadingStatus }, on: { click: t.handleAccessibility } }, [s("svg", { staticClass: "mr-2 editor-actions-menu__icon", attrs: { "aria-hidden": "true", fill: "currentColor", height: "16", viewBox: "0 0 24 24", width: "16" } }, [s("path", { attrs: { d: "M12 2c1.1 0 2 .9 2 2s-.9 2-2 2-2-.9-2-2 .9-2 2-2Zm9 7h-6v13h-2v-6h-2v6H9V9H3V7h18v2Z" } })]), s("span", { staticClass: "f-s-2" }, [e._v(e._s(t.trans("email-editor.accessibility-test")))])]) : e._e(), t.isSaveAsVisible ? s("button", { staticClass: "editor-actions-menu__row d-f a-i-c", attrs: { id: "guido__kebab-save-as", type: "button", disabled: t.editorStore.isSaveAsButtonDisabled }, on: { click: t.handleSaveAs } }, [s(t.InIcons, { staticClass: "mr-2", attrs: { name: "line-newsletter-save-as-template", size: "16" } }), s("span", { staticClass: "f-s-2" }, [e._v(e._s(t.trans("newsletter.save-templates")))])], 1) : e._e(), s("button", { staticClass: "editor-actions-menu__row d-f a-i-c", attrs: { id: "guido__kebab-export", type: "button", disabled: t.isExporting || t.editorStore.isExportButtonDisabled }, on: { click: t.handleExport } }, [s(t.InIcons, { staticClass: "mr-2", attrs: { name: "line-export", size: "16" } }), s("span", { staticClass: "f-s-2" }, [e._v(e._s(t.trans("email-editor.export-html")))])], 1)], 2) : e._e()], 1);
9
- }, n = [], r = /* @__PURE__ */ a(
10
- i,
11
- o,
12
- n,
13
- !1,
14
- null,
15
- "cbfbc6ef"
16
- );
17
- const b = r.exports;
18
- export {
19
- b as default
20
- };
@@ -1,39 +0,0 @@
1
- import { defineComponent as O, ref as c, computed as t } from "vue";
2
- import { useAccessibilityApi as x } from "../../../composables/useAccessibilityApi.js";
3
- import { useConfig as h } from "../../../composables/useConfig.js";
4
- import { useExport as I } from "../../../composables/useExport.js";
5
- import { useTranslations as B } from "../../../composables/useTranslations.js";
6
- import { useVersionHistoryApi as C } from "../../../composables/useVersionHistoryApi.js";
7
- import { useAutosaveStore as w } from "../../../stores/autosave.js";
8
- import { useEditorStore as M } from "../../../stores/editor.js";
9
- import { getTooltipOptions as k } from "../../../utils/tooltipUtils.js";
10
- import { InToggle as D, InIcons as F, InButtonV2 as j } from "@useinsider/design-system-vue";
11
- import { onClickOutside as q } from "../../../node_modules/@vueuse/core/index.js";
12
- const Y = /* @__PURE__ */ O({
13
- __name: "EditorActionsMenu",
14
- setup(z) {
15
- const { config: i, isFeatureEnabled: n } = h(), { exportHtml: l } = I(), { openVersionHistory: p, closeVersionHistory: u } = C(), { toggleAccessibilityTestingMode: m } = x(), r = M(), f = w(), d = B(), v = c(!1), a = c(!1), A = c(null), y = t(() => n("autosave")), g = t(() => {
16
- var o, e;
17
- return !!((e = (o = i.value) == null ? void 0 : o.features) != null && e.versionHistory);
18
- }), V = t(() => n("accessibilityTesting")), b = t(() => {
19
- var o, e;
20
- return !!((e = (o = i.value) == null ? void 0 : o.features) != null && e.saveAsTemplate);
21
- }), s = () => {
22
- v.value = !1;
23
- }, H = () => {
24
- r.isVersionHistoryOpen ? u() : p(), s();
25
- }, _ = () => {
26
- m(), s();
27
- }, S = () => {
28
- r.isSaveAsTemplateDrawerOpen = !0, s();
29
- }, T = async () => {
30
- a.value = !0, await l(), a.value = !1, s();
31
- }, E = (o) => {
32
- f.isOn = o;
33
- };
34
- return q(A, s), { __sfc: !0, config: i, isFeatureEnabled: n, exportHtml: l, openVersionHistory: p, closeVersionHistory: u, toggleAccessibilityTestingMode: m, editorStore: r, autosaveStore: f, trans: d, isOpen: v, isExporting: a, root: A, isAutosaveVisible: y, isVersionHistoryVisible: g, isAccessibilityVisible: V, isSaveAsVisible: b, close: s, handleVersionHistory: H, handleAccessibility: _, handleSaveAs: S, handleExport: T, toggleAutosave: E, getTooltipOptions: k, InButtonV2: j, InIcons: F, InToggle: D };
35
- }
36
- });
37
- export {
38
- Y as default
39
- };
@@ -1,18 +0,0 @@
1
- import o from "./AccessibilityToolbar.vue2.js";
2
- /* empty css */
3
- import s from "../../../../_virtual/_plugin-vue2_normalizer.js";
4
- var a = function() {
5
- var i = this, e = i._self._c, t = i._self._setupProxy;
6
- return e("div", { staticClass: "d-f a-i-c accessibility-toolbar" }, [e(t.InButtonV2, { attrs: { id: "guido__a11y-no-images", "data-testid": "Accessibility No Images", "left-icon": "line-image", styling: "ghost", type: "secondary", "disabled-status": t.editorStore.loadingStatus, "label-text-status": !1, "selected-status": t.editorStore.imagesHidden, "tooltip-options": t.getTooltipOptions("guido__a11y-no-images"), "tooltip-text": t.imagesTooltip }, on: { click: t.toggleImages } }), e(t.InButtonV2, { attrs: { id: "guido__a11y-code", "data-testid": "Accessibility Code Editor", "left-icon": "line-code", styling: "ghost", type: "secondary", "disabled-status": t.editorStore.loadingStatus, "label-text-status": !1, "selected-status": t.editorStore.isCodeEditorOpen, "tooltip-options": t.getTooltipOptions("guido__a11y-code"), "tooltip-text": t.trans("newsletter.html-editor") }, on: { click: t.toggleCodeEditor } }), e("div", { staticClass: "accessibility-toolbar__divider" }), e(t.ColorVisionSelect), e(t.InSegments, { staticClass: "ml-2", attrs: { id: "guido__a11y-view-selection", "with-icon": "", "segment-list": t.segmentList, selected: t.editorStore.editorVisualMode }, on: { click: t.handleView } })], 1);
7
- }, l = [], d = /* @__PURE__ */ s(
8
- o,
9
- a,
10
- l,
11
- !1,
12
- null,
13
- "e222d603"
14
- );
15
- const g = d.exports;
16
- export {
17
- g as default
18
- };
@@ -1,37 +0,0 @@
1
- import { defineComponent as d, computed as n } from "vue";
2
- import { useAccessibilityApi as c } from "../../../../composables/useAccessibilityApi.js";
3
- import { useTranslations as g } from "../../../../composables/useTranslations.js";
4
- import { useEditorStore as u } from "../../../../stores/editor.js";
5
- import { getTooltipOptions as e } from "../../../../utils/tooltipUtils.js";
6
- import { InSegments as _, InButtonV2 as f } from "@useinsider/design-system-vue";
7
- import w from "./ColorVisionSelect.vue.js";
8
- const A = /* @__PURE__ */ d({
9
- __name: "AccessibilityToolbar",
10
- setup(b) {
11
- const t = u(), o = g(), {
12
- toggleImages: r,
13
- toggleCodeEditor: m,
14
- switchToDesktopPreview: i,
15
- switchToMobilePreview: s
16
- } = c(), l = n(() => [
17
- {
18
- text: "",
19
- icon: "line-desktop",
20
- value: "desktop",
21
- tooltipText: o("newsletter.desktop"),
22
- tooltipOptions: e("guido__a11y-view-desktop")
23
- },
24
- {
25
- text: "",
26
- icon: "line-menu-mobileapp",
27
- value: "mobile",
28
- tooltipText: o("newsletter.mobile"),
29
- tooltipOptions: e("guido__a11y-view-mobile")
30
- }
31
- ]), p = n(() => t.imagesHidden ? o("email-editor.a11y-show-images") : o("email-editor.a11y-hide-images"));
32
- return { __sfc: !0, editorStore: t, trans: o, toggleImages: r, toggleCodeEditor: m, switchToDesktopPreview: i, switchToMobilePreview: s, segmentList: l, imagesTooltip: p, handleView: (a) => a === "mobile" ? s() : i(), getTooltipOptions: e, InButtonV2: f, InSegments: _, ColorVisionSelect: w };
33
- }
34
- });
35
- export {
36
- A as default
37
- };
@@ -1,24 +0,0 @@
1
- import i from "./ColorVisionSelect.vue2.js";
2
- /* empty css */
3
- import n from "../../../../_virtual/_plugin-vue2_normalizer.js";
4
- var l = function() {
5
- var e = this, t = e._self._c, s = e._self._setupProxy;
6
- return t("div", { ref: "root", staticClass: "color-vision-select p-r" }, [t("button", { staticClass: "color-vision-select__trigger d-f a-i-c", attrs: { id: "guido__a11y-color-vision-trigger", type: "button", disabled: s.editorStore.loadingStatus }, on: { click: function(o) {
7
- s.isOpen = !s.isOpen;
8
- } } }, [t(s.InIcons, { staticClass: "mr-2", attrs: { name: "line-show-on", size: "16" } }), t("span", { staticClass: "color-vision-select__label f-s-2" }, [e._v(e._s(s.selectedLabel))]), t(s.InIcons, { staticClass: "ml-2", attrs: { name: "line-chevron-small-down", size: "16" } })], 1), s.isOpen ? t("div", { staticClass: "color-vision-select__menu p-a" }, e._l(s.OPTIONS, function(o) {
9
- return t("button", { key: o.value || "none", staticClass: "color-vision-select__option d-f f-d-c", class: { "color-vision-select__option_selected": o.value === s.editorStore.colorVisionDeficiency }, attrs: { type: "button" }, on: { click: function(_) {
10
- return s.select(o.value);
11
- } } }, [t("span", { staticClass: "color-vision-select__option-label f-s-2" }, [e._v(e._s(s.trans(o.labelKey)))]), o.descriptionKey ? t("span", { staticClass: "color-vision-select__option-description f-s-1 t-c-55" }, [e._v(" " + e._s(s.trans(o.descriptionKey)) + " ")]) : e._e()]);
12
- }), 0) : e._e()]);
13
- }, c = [], r = /* @__PURE__ */ n(
14
- i,
15
- l,
16
- c,
17
- !1,
18
- null,
19
- "383f6378"
20
- );
21
- const p = r.exports;
22
- export {
23
- p as default
24
- };
@@ -1,48 +0,0 @@
1
- import { defineComponent as p, ref as c, computed as m } from "vue";
2
- import { useAccessibilityApi as u } from "../../../../composables/useAccessibilityApi.js";
3
- import { useTranslations as v } from "../../../../composables/useTranslations.js";
4
- import { useEditorStore as f } from "../../../../stores/editor.js";
5
- import { InIcons as y } from "@useinsider/design-system-vue";
6
- import { onClickOutside as K } from "../../../../node_modules/@vueuse/core/index.js";
7
- const V = /* @__PURE__ */ p({
8
- __name: "ColorVisionSelect",
9
- setup(b) {
10
- const e = [
11
- {
12
- value: "",
13
- labelKey: "email-editor.cvd-none"
14
- },
15
- {
16
- value: "protanopia",
17
- labelKey: "email-editor.cvd-protanopia",
18
- descriptionKey: "email-editor.cvd-protanopia-description"
19
- },
20
- {
21
- value: "deuteranopia",
22
- labelKey: "email-editor.cvd-deuteranopia",
23
- descriptionKey: "email-editor.cvd-deuteranopia-description"
24
- },
25
- {
26
- value: "tritanopia",
27
- labelKey: "email-editor.cvd-tritanopia",
28
- descriptionKey: "email-editor.cvd-tritanopia-description"
29
- },
30
- {
31
- value: "achromatopsia",
32
- labelKey: "email-editor.cvd-achromatopsia",
33
- descriptionKey: "email-editor.cvd-achromatopsia-description"
34
- }
35
- ], t = f(), a = v(), { setColorVisionDeficiency: r } = u(), o = c(!1), n = c(null), s = m(() => {
36
- const i = e.find((d) => d.value === t.colorVisionDeficiency) ?? e[0];
37
- return a(i.labelKey);
38
- }), l = (i) => {
39
- r(i), o.value = !1;
40
- };
41
- return K(n, () => {
42
- o.value = !1;
43
- }), { __sfc: !0, OPTIONS: e, editorStore: t, trans: a, setColorVisionDeficiency: r, isOpen: o, root: n, selectedLabel: s, select: l, InIcons: y };
44
- }
45
- });
46
- export {
47
- V as default
48
- };
@@ -1,18 +0,0 @@
1
- import b from "./EditorTabBarOnboarding.vue2.js";
2
- import g from "../../../_virtual/_plugin-vue2_normalizer.js";
3
- var l = function() {
4
- var t, a, n, i, e, s;
5
- var r = this, d = r._self._c, o = r._self._setupProxy;
6
- return o.isVisible ? d(o.InOnboard, { key: "guido__tab-bar-onboard", staticClass: "w-21-s p-a z-11", class: (t = o.onboardingStore.getEditorTabBarCurrentCard) == null ? void 0 : t.classes, attrs: { id: "guido__tab-bar-onboard", "is-multiple-page": "", visible: "", "image-source": "", title: "", "bottom-position": (a = o.onboardingStore.getEditorTabBarCurrentCard) == null ? void 0 : a.bottom, "left-position": (n = o.onboardingStore.getEditorTabBarCurrentCard) == null ? void 0 : n.left, "pages-config": o.onboardingStore.onboardings.editorTabBarOnboarding.config, "pointer-position": (i = o.onboardingStore.getEditorTabBarCurrentCard) == null ? void 0 : i.position, "right-position": (e = o.onboardingStore.getEditorTabBarCurrentCard) == null ? void 0 : e.right, "top-position": (s = o.onboardingStore.getEditorTabBarCurrentCard) == null ? void 0 : s.top }, on: { backButtonClick: o.handleBack, close: o.finish, nextButtonClick: o.handleNext } }) : r._e();
7
- }, _ = [], p = /* @__PURE__ */ g(
8
- b,
9
- l,
10
- _,
11
- !1,
12
- null,
13
- null
14
- );
15
- const f = p.exports;
16
- export {
17
- f as default
18
- };
@@ -1,74 +0,0 @@
1
- import { defineComponent as p, computed as d, watch as x } from "vue";
2
- import { useRibbonOffset as B } from "../../../composables/useRibbonOffset.js";
3
- import { useTranslations as m } from "../../../composables/useTranslations.js";
4
- import { useOnboardingStore as k } from "../../../stores/onboarding.js";
5
- import { InOnboard as T } from "@useinsider/design-system-vue";
6
- const y = /* @__PURE__ */ p({
7
- __name: "EditorTabBarOnboarding",
8
- setup(f) {
9
- const n = "editorTabBarOnboarding", t = m(), i = k(), { getTopPosition: a } = B(), r = () => i.next(n), c = () => i.previous(n), s = () => void i.close(n), b = d(() => [
10
- {
11
- classes: "guido-tab-bar-onboarding",
12
- right: "150px",
13
- top: a(56),
14
- position: "Right Top",
15
- title: t("email-editor.onboarding-kebab-title"),
16
- description: t("email-editor.onboarding-kebab-description"),
17
- imageSource: "",
18
- backButtonClick: () => {
19
- },
20
- nextButtonType: "text",
21
- nextButtonText: t("action-builder.next"),
22
- nextButtonClick: r
23
- },
24
- {
25
- classes: "guido-tab-bar-onboarding",
26
- right: "320px",
27
- top: a(56),
28
- position: "Right Top",
29
- title: t("email-editor.onboarding-autosave-title"),
30
- description: t("email-editor.onboarding-autosave-description"),
31
- imageSource: "",
32
- backButtonType: "text",
33
- backButtonText: t("action-builder.back"),
34
- backButtonClick: c,
35
- nextButtonType: "text",
36
- nextButtonText: t("action-builder.next"),
37
- nextButtonClick: r
38
- },
39
- {
40
- classes: "guido-tab-bar-onboarding",
41
- right: "150px",
42
- top: a(56),
43
- position: "Right Top",
44
- title: t("email-editor.onboarding-accessibility-title"),
45
- description: t("email-editor.onboarding-accessibility-description"),
46
- imageSource: "",
47
- backButtonType: "text",
48
- backButtonText: t("action-builder.back"),
49
- backButtonClick: c,
50
- nextButtonType: "text",
51
- nextButtonText: t("action-builder.ok"),
52
- nextButtonClick: s
53
- }
54
- ]), u = d(
55
- () => i.onboardings.editorTabBarOnboarding.config.length > 0 && i.onboardings.editorTabBarOnboarding.isActive
56
- ), g = () => {
57
- var o, e;
58
- (e = (o = i.getEditorTabBarCurrentCard) == null ? void 0 : o.nextButtonClick) == null || e.call(o);
59
- }, l = () => {
60
- var o, e;
61
- (e = (o = i.getEditorTabBarCurrentCard) == null ? void 0 : o.backButtonClick) == null || e.call(o);
62
- };
63
- return x(
64
- () => i.onboardings.editorTabBarOnboarding.isActive,
65
- (o) => {
66
- o && i.setConfig(n, b.value);
67
- },
68
- { immediate: !0 }
69
- ), { __sfc: !0, ONBOARDING: n, trans: t, onboardingStore: i, getTopPosition: a, goNext: r, goBack: c, finish: s, onboardingCardsConfig: b, isVisible: u, handleNext: g, handleBack: l, InOnboard: T };
70
- }
71
- });
72
- export {
73
- y as default
74
- };
@@ -1,31 +0,0 @@
1
- import { useEditorStore as r } from "../stores/editor.js";
2
- const A = () => {
3
- const e = r(), i = () => window.StripoEditorApi.accessibilityApi, s = () => {
4
- i().openAccessibilityTestingMode(), e.isAccessibilityTestingOpen = !0;
5
- }, o = () => {
6
- i().closeAccessibilityTestingMode(), e.isAccessibilityTestingOpen = !1, e.imagesHidden = !1, e.colorVisionDeficiency = "";
7
- }, g = () => e.isAccessibilityTestingOpen ? o() : s(), l = () => i().isAccessibilityTestingModeOpen(), t = () => {
8
- i().showImages(), e.imagesHidden = !1;
9
- }, c = () => {
10
- i().hideImages(), e.imagesHidden = !0;
11
- };
12
- return {
13
- openAccessibilityTestingMode: s,
14
- closeAccessibilityTestingMode: o,
15
- toggleAccessibilityTestingMode: g,
16
- isAccessibilityTestingModeOpen: l,
17
- showImages: t,
18
- hideImages: c,
19
- toggleImages: () => e.imagesHidden ? t() : c(),
20
- setColorVisionDeficiency: (n) => {
21
- i().setColorVisionDeficiency(n), e.colorVisionDeficiency = n;
22
- },
23
- getColorVisionDeficiency: () => i().getColorVisionDeficiency(),
24
- switchToDesktopPreview: () => i().switchToDesktopPreview(),
25
- switchToMobilePreview: () => i().switchToMobilePreview(),
26
- toggleCodeEditor: () => i().emitToggleCodeEditor()
27
- };
28
- };
29
- export {
30
- A as useAccessibilityApi
31
- };