@useinsider/guido 3.18.0 → 3.18.1-beta.6ae01b1

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.
@@ -12,9 +12,9 @@ var t = function() {
12
12
  s,
13
13
  !1,
14
14
  null,
15
- "5c588dc5"
15
+ "050dfa52"
16
16
  );
17
- const v = n.exports;
17
+ const f = n.exports;
18
18
  export {
19
- v as default
19
+ f as default
20
20
  };
@@ -1,54 +1,55 @@
1
- import { defineComponent as Z, defineAsyncComponent as l, ref as A, computed as u, watch as U, onMounted as ee, onUnmounted as te } from "vue";
2
- import { useCortexBlueprintBridge as oe } from "../composables/useCortexBlueprintBridge.js";
3
- import { provideGuidoActions as ne } from "../composables/useGuidoActions.js";
4
- import { useGuidoStateBridge as re } from "../composables/useGuidoStateBridge.js";
5
- import { usePartner as se } from "../composables/usePartner.js";
6
- import { useStripo as ae } from "../composables/useStripo.js";
7
- import { useTimerClone as ie } from "../composables/useTimerClone.js";
8
- import { migrate as _ } from "../config/migrator/index.js";
9
- import { ModuleFolderDefaults as N } from "../enums/defaults.js";
10
- import { RIBBON_SELECTOR as ce } from "../enums/onboarding.js";
11
- import { useRecommendationExtensionStore as O } from "../extensions/Blocks/Recommendation/store/recommendation.js";
12
- import de from "./organisms/AutoSaveController.vue.js";
13
- import me from "./organisms/base/Toaster.vue.js";
14
- import le from "./organisms/extensions/recommendation/FilterSelectionDrawer.vue.js";
15
- import ue from "./organisms/header/HeaderWrapper.vue.js";
16
- import pe from "./organisms/LoadingWrapper.vue.js";
17
- import fe from "./organisms/save-as-template/SaveAsTemplateDrawer.vue.js";
18
- import ye from "./organisms/unsubscribe/UnsubscribeWrapper.vue.js";
19
- import { useStripoApi as ge } from "../services/stripoApi.js";
20
- import { useConfigStore as ve } from "../stores/config.js";
21
- import { useDynamicContentStore as Se } from "../stores/dynamic-content.js";
22
- import { useEditorStore as P } from "../stores/editor.js";
23
- import { usePreviewStore as he } from "../stores/preview.js";
24
- import { useTemplateStore as be } from "../stores/template.js";
25
- import { useUnsubscribeStore as Ee } from "../stores/unsubscribe.js";
26
- import { readTrackFloor as W } from "../utils/linkTrackingIds.js";
27
- const je = /* @__PURE__ */ Z({
1
+ import { defineComponent as ne, defineAsyncComponent as l, ref as O, computed as u, watch as P, onMounted as re, onUnmounted as se } from "vue";
2
+ import { useCortexBlueprintBridge as ae } from "../composables/useCortexBlueprintBridge.js";
3
+ import { useEditorLock as ie } from "../composables/useEditorLock.js";
4
+ import { provideGuidoActions as ce } from "../composables/useGuidoActions.js";
5
+ import { useGuidoStateBridge as de } from "../composables/useGuidoStateBridge.js";
6
+ import { usePartner as me } from "../composables/usePartner.js";
7
+ import { useStripo as le } from "../composables/useStripo.js";
8
+ import { useTimerClone as ue } from "../composables/useTimerClone.js";
9
+ import { migrate as x } from "../config/migrator/index.js";
10
+ import { ModuleFolderDefaults as W } from "../enums/defaults.js";
11
+ import { RIBBON_SELECTOR as pe } from "../enums/onboarding.js";
12
+ import { useRecommendationExtensionStore as G } from "../extensions/Blocks/Recommendation/store/recommendation.js";
13
+ import fe from "./organisms/AutoSaveController.vue.js";
14
+ import ye from "./organisms/base/Toaster.vue.js";
15
+ import ge from "./organisms/extensions/recommendation/FilterSelectionDrawer.vue.js";
16
+ import ve from "./organisms/header/HeaderWrapper.vue.js";
17
+ import Se from "./organisms/LoadingWrapper.vue.js";
18
+ import be from "./organisms/save-as-template/SaveAsTemplateDrawer.vue.js";
19
+ import he from "./organisms/unsubscribe/UnsubscribeWrapper.vue.js";
20
+ import { useStripoApi as Ee } from "../services/stripoApi.js";
21
+ import { useConfigStore as we } from "../stores/config.js";
22
+ import { useDynamicContentStore as Ce } from "../stores/dynamic-content.js";
23
+ import { useEditorStore as H } from "../stores/editor.js";
24
+ import { usePreviewStore as De } from "../stores/preview.js";
25
+ import { useTemplateStore as ke } from "../stores/template.js";
26
+ import { useUnsubscribeStore as Te } from "../stores/unsubscribe.js";
27
+ import { readTrackFloor as $ } from "../utils/linkTrackingIds.js";
28
+ const et = /* @__PURE__ */ ne({
28
29
  __name: "Guido",
29
30
  props: {
30
31
  config: null,
31
32
  ready: { type: Boolean, default: !0 }
32
33
  },
33
34
  emits: ["dynamic-content:open", "back", "save:start", "save:complete", "on-change", "ready", "onboarding:finished", "test-email:click"],
34
- setup(x, { expose: G, emit: r }) {
35
- const a = x, H = l(
35
+ setup(z, { expose: q, emit: r }) {
36
+ const a = z, K = l(
36
37
  () => import("./organisms/email-preview/PreviewContainer.vue.js")
37
- ), $ = l(
38
+ ), V = l(
38
39
  () => import("./organisms/onboarding/OnboardingWrapper.vue.js")
39
- ), z = l(
40
+ ), j = l(
40
41
  () => import("./organisms/extensions/recommendation/AssignStrategyDrawer.vue.js")
41
- ), q = l(
42
+ ), J = l(
42
43
  () => import("./organisms/extensions/recommendation/RemoveStrategyModal.vue.js")
43
- ), h = A(), p = A(), f = Se(), b = Ee(), o = ve();
44
+ ), h = O(), p = O(), f = Ce(), E = Te(), o = we();
44
45
  a.ready && o.init(a.config);
45
- const c = P(), K = he(), m = u(() => c.hasChanges), { isTestPartner: V } = se(), E = () => {
46
+ const c = H(), Q = De(), m = u(() => c.hasChanges), { isTestPartner: X } = me(), w = () => {
46
47
  var t;
47
48
  return (t = h.value) == null ? void 0 : t.handleSave(!0);
48
- }, w = (t) => {
49
+ }, C = (t) => {
49
50
  c.loadingStatus = t;
50
51
  };
51
- oe(), re();
52
+ ae(), de();
52
53
  const y = () => {
53
54
  var t, e;
54
55
  return {
@@ -56,16 +57,18 @@ const je = /* @__PURE__ */ Z({
56
57
  userId: o.userId,
57
58
  username: o.username,
58
59
  partnerName: o.partnerName,
59
- savedModulesFolderName: ((t = o.editor) == null ? void 0 : t.savedModulesFolderName) || N.SAVED_MODULES,
60
- defaultModulesFolderName: ((e = o.editor) == null ? void 0 : e.defaultModulesFolderName) || N.DEFAULT_MODULES
60
+ savedModulesFolderName: ((t = o.editor) == null ? void 0 : t.savedModulesFolderName) || W.SAVED_MODULES,
61
+ defaultModulesFolderName: ((e = o.editor) == null ? void 0 : e.defaultModulesFolderName) || W.DEFAULT_MODULES
61
62
  };
62
- }, { initPlugin: C, preloadRuntime: D } = ae(), { getDefaultTemplate: k } = ge(), { cloneTimersOnSave: T, hasTimerBlocks: F } = ie(), j = u(() => {
63
+ }, { initPlugin: D, preloadRuntime: k } = le(), { runExclusive: T, beginMount: F, isCurrentMount: I } = ie();
64
+ let g = 0;
65
+ const { getDefaultTemplate: M } = Ee(), { cloneTimersOnSave: R, hasTimerBlocks: L } = ue(), Y = u(() => {
63
66
  var t;
64
67
  return !((t = o.ui) != null && t.showHeader);
65
- }), J = u(() => o.isFeatureEnabled("reusableRecommendationStrategy")), Q = u(
66
- () => !!O().recommendationConfigs.strategyId
68
+ }), Z = u(() => o.isFeatureEnabled("reusableRecommendationStrategy")), ee = u(
69
+ () => !!G().recommendationConfigs.strategyId
67
70
  );
68
- ne({
71
+ ce({
69
72
  onBack: () => {
70
73
  console.debug("guido:back"), r("back");
71
74
  },
@@ -80,79 +83,80 @@ const je = /* @__PURE__ */ Z({
80
83
  console.debug("guido:test-email:click"), r("test-email:click");
81
84
  }
82
85
  });
83
- const I = (t) => {
86
+ const B = (t) => {
84
87
  console.debug("dynamic-content:close", t), f.setSelectedDynamicContent(t), document.dispatchEvent(new CustomEvent("dynamic-content:close", { detail: t }));
85
- }, R = () => {
88
+ }, A = () => {
86
89
  console.debug("dynamic-content:close", "Without Data"), document.dispatchEvent(new CustomEvent("dynamic-content:close", { detail: { text: "", value: "" } }));
87
90
  };
88
- U(() => m.value, () => {
91
+ P(() => m.value, () => {
89
92
  r("on-change", m.value);
90
93
  });
91
- const g = (t) => {
94
+ const v = (t) => {
92
95
  const e = t, { attribute: s, position: d } = e.detail;
93
96
  console.debug("dynamic-content:open", e.detail), r("dynamic-content:open", s, d);
94
97
  };
95
98
  let i = null;
96
- const v = () => {
99
+ const S = () => {
97
100
  var e;
98
- const t = document.querySelector(ce);
101
+ const t = document.querySelector(pe);
99
102
  (e = p.value) == null || e.style.setProperty("--ribbon-offset", `${(t == null ? void 0 : t.offsetHeight) ?? 0}px`);
100
- }, S = async () => {
103
+ }, b = async () => {
101
104
  var t;
102
105
  try {
103
106
  o.initialized || o.init(a.config), c.templateId = o.templateId;
104
- const e = o.template, s = (e == null ? void 0 : e.html) || "", d = (e == null ? void 0 : e.css) || "", L = (e == null ? void 0 : e.preselectedDynamicContent) || [];
105
- b.selectedUnsubscribePages = (e == null ? void 0 : e.selectedUnsubscribePages) || [];
106
- const M = ((t = e == null ? void 0 : e.migration) == null ? void 0 : t.recommendationConfigs) ?? {}, B = o.isFeatureEnabled("linkTrackingIds");
107
+ const e = o.template, s = (e == null ? void 0 : e.html) || "", d = (e == null ? void 0 : e.css) || "", U = (e == null ? void 0 : e.preselectedDynamicContent) || [];
108
+ E.selectedUnsubscribePages = (e == null ? void 0 : e.selectedUnsubscribePages) || [];
109
+ const _ = ((t = e == null ? void 0 : e.migration) == null ? void 0 : t.recommendationConfigs) ?? {}, N = o.isFeatureEnabled("linkTrackingIds");
107
110
  let n = {
108
- html: s && await _(s, M),
111
+ html: s && await x(s, _),
109
112
  css: d
110
113
  };
111
- n.html || (n = await k(), n.html = await _(n.html, M));
112
- const X = B ? W(n.html, (e == null ? void 0 : e.trackIdCounter) || 0) : 0;
113
- F(n.html) && (n.html = await T(n.html)), B && (c.trackIdSessionFloor = Math.max(X, W(n.html)));
114
- const Y = {
115
- preselectedDynamicContentList: L,
114
+ n.html || (n = await M(), n.html = await x(n.html, _));
115
+ const te = N ? $(n.html, (e == null ? void 0 : e.trackIdCounter) || 0) : 0;
116
+ L(n.html) && (n.html = await R(n.html)), N && (c.trackIdSessionFloor = Math.max(te, $(n.html)));
117
+ const oe = {
118
+ preselectedDynamicContentList: U,
116
119
  onReady: () => {
117
120
  console.debug("guido:ready"), r("ready");
118
121
  }
119
122
  };
120
- await C(n, y(), Y), f.selectedDynamicContentList = L;
123
+ g = F(), await D(n, y(), oe), f.selectedDynamicContentList = U;
121
124
  } catch (e) {
122
125
  console.error("Failed to initialize Stripo editor:", e);
123
126
  }
124
127
  };
125
- return ee(async () => {
128
+ return re(async () => {
126
129
  var e;
127
- console.debug("Guido says happy coding 🎉"), console.debug("🚗 Ka-Chow"), O().$reset(), P().$reset(), be().$reset(), v();
130
+ console.debug("Guido says happy coding 🎉"), console.debug("🚗 Ka-Chow"), G().$reset(), H().$reset(), ke().$reset(), S();
128
131
  const t = (e = p.value) == null ? void 0 : e.parentElement;
129
- if (t && (i = new ResizeObserver(v), i.observe(t)), D(), a.ready)
130
- await S();
132
+ if (t && (i = new ResizeObserver(S), i.observe(t)), k(), a.ready)
133
+ await b();
131
134
  else {
132
- const s = U(() => a.ready, (d) => {
133
- d && (s(), S());
135
+ const s = P(() => a.ready, (d) => {
136
+ d && (s(), b());
134
137
  });
135
138
  }
136
- document.addEventListener("dynamic-content:open", g);
137
- }), te(() => {
138
- i == null || i.disconnect(), document.removeEventListener("dynamic-content:open", g);
139
- try {
140
- window.UIEditor.removeEditor();
141
- } catch {
142
- console.debug("Failed to remove Stripo editor: No editor found");
143
- }
144
- o.reset();
145
- }), G({
139
+ document.addEventListener("dynamic-content:open", v);
140
+ }), se(() => {
141
+ i == null || i.disconnect(), document.removeEventListener("dynamic-content:open", v), T(async () => {
142
+ if (I(g))
143
+ try {
144
+ window.UIEditor.removeEditor();
145
+ } catch {
146
+ console.debug("Failed to remove Stripo editor: No editor found");
147
+ }
148
+ }), o.reset();
149
+ }), q({
146
150
  dynamicContent: {
147
- insert: I,
148
- close: R
151
+ insert: B,
152
+ close: A
149
153
  },
150
154
  hasChanges: m,
151
- saveSilent: E,
152
- setLoading: w
153
- }), { __sfc: !0, PreviewContainer: H, OnboardingWrapper: $, AssignStrategyDrawer: z, RemoveStrategyModal: q, headerWrapperRef: h, wrapperRef: p, dynamicContentStore: f, unsubscribeStore: b, props: a, configStore: o, editorStore: c, previewStore: K, hasChanges: m, isTestPartner: V, saveSilent: E, setLoading: w, emit: r, buildMetadata: y, initPlugin: C, preloadRuntime: D, getDefaultTemplate: k, cloneTimersOnSave: T, hasTimerBlocks: F, noHeader: j, isRrsEnabled: J, hasAssignedStrategy: Q, insertDynamicContent: I, closeDynamicContent: R, handleDynamicContentOpen: g, ribbonObserver: i, updateRibbonOffset: v, startEditor: S, AutoSaveController: de, Toaster: me, FilterSelectionDrawer: le, HeaderWrapper: ue, LoadingWrapper: pe, SaveAsTemplateDrawer: fe, UnsubscribeWrapper: ye };
155
+ saveSilent: w,
156
+ setLoading: C
157
+ }), { __sfc: !0, PreviewContainer: K, OnboardingWrapper: V, AssignStrategyDrawer: j, RemoveStrategyModal: J, headerWrapperRef: h, wrapperRef: p, dynamicContentStore: f, unsubscribeStore: E, props: a, configStore: o, editorStore: c, previewStore: Q, hasChanges: m, isTestPartner: X, saveSilent: w, setLoading: C, emit: r, buildMetadata: y, initPlugin: D, preloadRuntime: k, runExclusive: T, beginMount: F, isCurrentMount: I, mountGeneration: g, getDefaultTemplate: M, cloneTimersOnSave: R, hasTimerBlocks: L, noHeader: Y, isRrsEnabled: Z, hasAssignedStrategy: ee, insertDynamicContent: B, closeDynamicContent: A, handleDynamicContentOpen: v, ribbonObserver: i, updateRibbonOffset: S, startEditor: b, AutoSaveController: fe, Toaster: ye, FilterSelectionDrawer: ge, HeaderWrapper: ve, LoadingWrapper: Se, SaveAsTemplateDrawer: be, UnsubscribeWrapper: he };
154
158
  }
155
159
  });
156
160
  export {
157
- je as default
161
+ et as default
158
162
  };
@@ -15,7 +15,7 @@ var u = function() {
15
15
  p,
16
16
  !1,
17
17
  null,
18
- "6e711fd7"
18
+ "1ca6baf0"
19
19
  );
20
20
  const v = c.exports;
21
21
  export {
@@ -1,66 +1,79 @@
1
- import { defineComponent as O, ref as n, computed as h } from "vue";
2
- import { useActionsApi as q } from "../../../composables/useActionsApi.js";
3
- import { useConfig as b } from "../../../composables/useConfig.js";
4
- import { useExport as k } from "../../../composables/useExport.js";
5
- import { useTestEmailClick as B } from "../../../composables/useGuidoActions.js";
6
- import { useHtmlCompiler as D } from "../../../composables/useHtmlCompiler.js";
7
- import { useSave as F } from "../../../composables/useSave.js";
8
- import { useTranslations as L } from "../../../composables/useTranslations.js";
9
- import { useVersionHistoryApi as R } from "../../../composables/useVersionHistoryApi.js";
10
- import { useLiquidValidator as z } from "../../../composables/validators/useLiquidValidator.js";
11
- import { useEditorStore as I } from "../../../stores/editor.js";
12
- import { useTemplateStore as P } from "../../../stores/template.js";
13
- import { getTooltipOptions as j } from "../../../utils/tooltipUtils.js";
14
- import { InButtonV2 as G } from "@useinsider/design-system-vue";
15
- import { storeToRefs as J } from "pinia";
16
- import K from "./MigrationConfirmModal.vue.js";
17
- const ut = /* @__PURE__ */ O({
1
+ import { defineComponent as q, ref as l, computed as w } from "vue";
2
+ import { useActionsApi as b } from "../../../composables/useActionsApi.js";
3
+ import { useConfig as k } from "../../../composables/useConfig.js";
4
+ import { useExport as B } from "../../../composables/useExport.js";
5
+ import { useTestEmailClick as D } from "../../../composables/useGuidoActions.js";
6
+ import { useHtmlCompiler as L } from "../../../composables/useHtmlCompiler.js";
7
+ import { useSave as R } from "../../../composables/useSave.js";
8
+ import { useToaster as z } from "../../../composables/useToaster.js";
9
+ import { useTranslations as I } from "../../../composables/useTranslations.js";
10
+ import { useVersionHistoryApi as P } from "../../../composables/useVersionHistoryApi.js";
11
+ import { useLiquidValidator as j } from "../../../composables/validators/useLiquidValidator.js";
12
+ import { useEditorStore as G } from "../../../stores/editor.js";
13
+ import { useTemplateStore as J } from "../../../stores/template.js";
14
+ import { getTooltipOptions as K } from "../../../utils/tooltipUtils.js";
15
+ import { InButtonV2 as N } from "@useinsider/design-system-vue";
16
+ import { storeToRefs as Q } from "pinia";
17
+ import U from "./MigrationConfirmModal.vue.js";
18
+ const ft = /* @__PURE__ */ q({
18
19
  __name: "EditorActions",
19
- setup(N, { expose: x }) {
20
- const { config: a, isFeatureEnabled: l } = b(), { exportHtml: m } = k(), { save: u } = F(), { openVersionHistory: c, closeVersionHistory: p } = R(), { getCompiledEmail: f } = q(), { compileHtml: d } = D(), { validateLiquidSyntax: v } = z(), e = I(), y = P(), { hasMigrations: g } = J(y), s = L(), i = n(!1), r = n(!1), S = n(), H = B(), T = () => {
20
+ setup(W, { expose: x }) {
21
+ const { config: m, isFeatureEnabled: c } = k(), { exportHtml: p } = B(), { save: u } = R(), { openVersionHistory: f, closeVersionHistory: d } = P(), { getCompiledEmail: v } = b(), { compileHtml: y } = L(), { validateLiquidSyntax: g } = j(), { handleError: r } = z(), e = G(), h = J(), { hasMigrations: H } = Q(h), s = I(), i = l(!1), a = l(!1), S = l(), V = D(), _ = () => {
21
22
  if (e.isVersionHistoryOpen) {
22
- p();
23
+ d();
23
24
  return;
24
25
  }
25
- c();
26
- }, w = async () => {
27
- i.value = !0, await m(), i.value = !1;
28
- }, _ = () => {
26
+ f();
27
+ }, C = async () => {
28
+ i.value = !0, await p(), i.value = !1;
29
+ }, A = () => {
29
30
  e.isSaveAsTemplateDrawerOpen = !0;
30
- }, C = h(() => e.isVersionHistoryOpen ? s("newsletter.close-version-history") : s("newsletter.version-history")), A = h(
31
+ }, M = w(() => e.isVersionHistoryOpen ? s("newsletter.close-version-history") : s("newsletter.version-history")), O = w(
31
32
  () => {
32
33
  var t, o;
33
- return ((o = (t = a.value) == null ? void 0 : t.features) == null ? void 0 : o.versionHistory) && !e.isPreviewModeOpen;
34
+ return ((o = (t = m.value) == null ? void 0 : t.features) == null ? void 0 : o.versionHistory) && !e.isPreviewModeOpen;
34
35
  }
35
- ), V = async (t) => {
36
- r.value = !0, t || (e.loadingStatus = !0);
37
- const o = await u(t);
38
- return r.value = !1, !t && !o && (e.loadingStatus = !1), o;
39
- }, E = (t) => {
36
+ ), E = async (t) => {
37
+ a.value = !0, t || (e.loadingStatus = !0);
38
+ let o;
39
+ try {
40
+ o = await u(t);
41
+ } catch (n) {
42
+ if (t)
43
+ throw n;
44
+ r(n, "Failed to save template");
45
+ } finally {
46
+ a.value = !1, !t && !o && (e.loadingStatus = !1);
47
+ }
48
+ return o;
49
+ }, T = (t) => {
40
50
  var o;
41
- if (!t && g.value) {
51
+ if (!t && H.value) {
42
52
  (o = S.value) == null || o.open();
43
53
  return;
44
54
  }
45
- return V(t);
46
- }, M = async () => {
47
- if (l("liquidSyntax")) {
55
+ return E(t);
56
+ }, F = async () => {
57
+ if (c("liquidSyntax")) {
48
58
  e.loadingStatus = !0;
49
59
  try {
50
- const { html: t } = await f({ minimize: !0, resetDataSavedFlag: !1 }), { compiledHtml: o } = d(t);
51
- if (!await v(o))
60
+ const { html: t } = await v({ minimize: !0, resetDataSavedFlag: !1 }), { compiledHtml: o } = y(t);
61
+ if (!await g(o))
52
62
  return;
63
+ } catch (t) {
64
+ r(t, "Failed to prepare test email");
65
+ return;
53
66
  } finally {
54
67
  e.loadingStatus = !1;
55
68
  }
56
69
  }
57
- H();
70
+ V();
58
71
  };
59
72
  return x({
60
- handleSave: E
61
- }), { __sfc: !0, config: a, isFeatureEnabled: l, exportHtml: m, save: u, openVersionHistory: c, closeVersionHistory: p, getCompiledEmail: f, compileHtml: d, validateLiquidSyntax: v, editorStore: e, templateStore: y, hasMigrations: g, trans: s, isExporting: i, isSaving: r, migrationModalRef: S, testEmailClick: H, handleVersionHistory: T, handleExport: w, handleSaveAs: _, versionHistoryTooltipText: C, isVersionHistoryButtonVisible: A, executeSave: V, handleSave: E, handleTestEmail: M, getTooltipOptions: j, InButtonV2: G, MigrationConfirmModal: K };
73
+ handleSave: T
74
+ }), { __sfc: !0, config: m, isFeatureEnabled: c, exportHtml: p, save: u, openVersionHistory: f, closeVersionHistory: d, getCompiledEmail: v, compileHtml: y, validateLiquidSyntax: g, handleError: r, editorStore: e, templateStore: h, hasMigrations: H, trans: s, isExporting: i, isSaving: a, migrationModalRef: S, testEmailClick: V, handleVersionHistory: _, handleExport: C, handleSaveAs: A, versionHistoryTooltipText: M, isVersionHistoryButtonVisible: O, executeSave: E, handleSave: T, handleTestEmail: F, getTooltipOptions: K, InButtonV2: N, MigrationConfirmModal: U };
62
75
  }
63
76
  });
64
77
  export {
65
- ut as default
78
+ ft as default
66
79
  };
@@ -1,52 +1,68 @@
1
- import { filterAmpErrors as T } from "../utils/ampErrorFilter.js";
2
- import { useToaster as A } from "./useToaster.js";
3
- const p = 1e4, D = () => {
4
- const { handleError: r } = A(), l = (t = {}) => new Promise((e, a) => {
5
- const o = { ...{
6
- minimize: !0,
7
- utmEntity: {
8
- utmSource: "",
9
- utmMedium: "",
10
- utmCampaign: "",
11
- utmContent: "",
12
- utmTerm: "",
13
- customUtms: [
14
- {
15
- name1: "val1",
16
- name2: "val2"
17
- }
18
- ]
19
- },
20
- mergeTags: ["Tag1", "Tag2"],
21
- forceAmp: !1,
22
- resetDataSavedFlag: !1,
23
- disableLineHeightsReplace: !0
24
- }, ...t }, n = {
25
- callback: (m, d, c, u, w) => {
26
- m ? a(m) : e({
27
- html: d,
28
- ampHtml: c,
29
- ampErrors: T(u ?? []),
30
- displayConditions: w
31
- });
32
- },
33
- ...o
34
- };
35
- window.StripoEditorApi.actionsApi.compileEmail(n);
36
- });
1
+ import { filterAmpErrors as v } from "../utils/ampErrorFilter.js";
2
+ import { useToaster as y } from "./useToaster.js";
3
+ const D = 1e4, d = 3e4, s = (n, l, u) => new Promise((T, m) => {
4
+ const w = setTimeout(
5
+ () => m(new Error(`${n} did not report completion within ${l}ms`)),
6
+ l
7
+ ), p = (A) => (t) => {
8
+ clearTimeout(w), A(t);
9
+ };
10
+ u(p(T), p(m));
11
+ }), I = () => {
12
+ const { handleError: n } = y(), l = (t = {}) => s(
13
+ "compileEmail",
14
+ d,
15
+ (e, a) => {
16
+ const o = { ...{
17
+ minimize: !0,
18
+ utmEntity: {
19
+ utmSource: "",
20
+ utmMedium: "",
21
+ utmCampaign: "",
22
+ utmContent: "",
23
+ utmTerm: "",
24
+ customUtms: [
25
+ {
26
+ name1: "val1",
27
+ name2: "val2"
28
+ }
29
+ ]
30
+ },
31
+ mergeTags: ["Tag1", "Tag2"],
32
+ forceAmp: !1,
33
+ resetDataSavedFlag: !1,
34
+ disableLineHeightsReplace: !0
35
+ }, ...t }, c = {
36
+ callback: (r, C, f, S, g) => {
37
+ r ? a(r) : e({
38
+ html: C,
39
+ ampHtml: f,
40
+ ampErrors: v(S ?? []),
41
+ displayConditions: g
42
+ });
43
+ },
44
+ ...o
45
+ };
46
+ window.StripoEditorApi.actionsApi.compileEmail(c);
47
+ }
48
+ );
37
49
  return {
38
50
  getCompiledEmail: l,
39
- getTemplateData: () => new Promise((t) => {
40
- const e = ({ html: a, css: i, width: o, height: s, utmParams: n, syncModulesIds: m }) => t({
41
- html: a,
42
- css: i,
43
- width: o,
44
- height: s,
45
- utmParams: n,
46
- syncModulesIds: m
47
- });
48
- window.StripoEditorApi.actionsApi.getTemplateData(e);
49
- }),
51
+ getTemplateData: () => s(
52
+ "getTemplateData",
53
+ d,
54
+ (t) => {
55
+ const e = ({ html: a, css: i, width: o, height: E, utmParams: c, syncModulesIds: r }) => t({
56
+ html: a,
57
+ css: i,
58
+ width: o,
59
+ height: E,
60
+ utmParams: c,
61
+ syncModulesIds: r
62
+ });
63
+ window.StripoEditorApi.actionsApi.getTemplateData(e);
64
+ }
65
+ ),
50
66
  activateCustomViewStyles: (t = !0) => {
51
67
  window.StripoEditorApi.actionsApi.activateCustomViewStyles(t);
52
68
  },
@@ -65,7 +81,7 @@ const p = 1e4, D = () => {
65
81
  displayConditions: a
66
82
  };
67
83
  } catch (e) {
68
- return r(e, "Error loading preview"), {
84
+ return n(e, "Error loading preview"), {
69
85
  html: "",
70
86
  ampHtml: "",
71
87
  ampErrors: [],
@@ -81,34 +97,33 @@ const p = 1e4, D = () => {
81
97
  }
82
98
  try {
83
99
  window.StripoEditorApi.actionsApi.updateTimerInClonedTemplate((i, o) => {
84
- i ? (r(i, "Failed to update timer in cloned template"), t(null)) : t(o || null);
100
+ i ? (n(i, "Failed to update timer in cloned template"), t(null)) : t(o || null);
85
101
  });
86
102
  } catch (i) {
87
- r(i, "Failed to call updateTimerInClonedTemplate"), t(null);
103
+ n(i, "Failed to call updateTimerInClonedTemplate"), t(null);
88
104
  }
89
105
  }),
90
106
  updateHtmlAndCss: (t, e) => {
91
107
  const { actionsApi: a } = window.StripoEditorApi;
92
- return new Promise((i, o) => {
93
- const s = new Error(
94
- `updateHtmlAndCss did not report completion within ${p}ms`
95
- ), n = setTimeout(() => o(s), p);
96
- a.updateHtmlAndCss(t, e, () => {
97
- clearTimeout(n), i();
98
- });
108
+ return s("updateHtmlAndCss", D, (i) => {
109
+ a.updateHtmlAndCss(t, e, () => i());
99
110
  });
100
111
  },
101
- editorSave: () => new Promise((t) => {
102
- window.StripoEditorApi.actionsApi.save((e) => {
103
- if (e) {
104
- r(e, "Failed to save template"), t(!1);
105
- return;
106
- }
107
- t(!0);
108
- });
109
- })
112
+ editorSave: () => s(
113
+ "save",
114
+ d,
115
+ (t) => {
116
+ window.StripoEditorApi.actionsApi.save((e) => {
117
+ if (e) {
118
+ n(e, "Failed to save template"), t(!1);
119
+ return;
120
+ }
121
+ t(!0);
122
+ });
123
+ }
124
+ )
110
125
  };
111
126
  };
112
127
  export {
113
- D as useActionsApi
128
+ I as useActionsApi
114
129
  };
@@ -1,21 +1,22 @@
1
- import { useConfig as m } from "./useConfig.js";
1
+ import { useConfig as E } from "./useConfig.js";
2
+ import { useEditorLock as p } from "./useEditorLock.js";
2
3
  import { useAutosaveStore as A, AUTOSAVE_STATUS as s } from "../stores/autosave.js";
3
- import { useEditorStore as E } from "../stores/editor.js";
4
- import { computed as f, watch as p, onUnmounted as y } from "vue";
5
- const I = 18e4, r = 6e4, T = (b) => {
6
- const { isFeatureEnabled: S } = m(), a = E(), t = A();
4
+ import { useEditorStore as f } from "../stores/editor.js";
5
+ import { computed as y, watch as I, onUnmounted as L } from "vue";
6
+ const w = 18e4, v = 6e4, R = (b) => {
7
+ const { isFeatureEnabled: S } = E(), o = f(), t = A(), { isEditorBusy: g } = p();
7
8
  let i = null, c = 0;
8
- const u = f(
9
+ const u = y(
9
10
  () => S("autosave") && t.isOn
10
- ), g = () => a.hasChanges && a.isInSaveableState, h = () => ({
11
- hasChanges: a.hasChanges,
12
- isInSaveableState: a.isInSaveableState
13
- }), l = async (e) => {
11
+ ), m = () => o.hasChanges && o.isInSaveableState, h = () => ({
12
+ hasChanges: o.hasChanges,
13
+ isInSaveableState: o.isInSaveableState
14
+ }), r = async (e) => {
14
15
  if (!u.value) {
15
16
  console.debug("guido:autosave:skipped", { trigger: e, reason: "not-active" });
16
17
  return;
17
18
  }
18
- if (!g()) {
19
+ if (!m()) {
19
20
  console.debug("guido:autosave:skipped", { trigger: e, reason: "gates-blocked", gates: h() });
20
21
  return;
21
22
  }
@@ -23,15 +24,19 @@ const I = 18e4, r = 6e4, T = (b) => {
23
24
  console.debug("guido:autosave:skipped", { trigger: e, reason: "already-saving" });
24
25
  return;
25
26
  }
27
+ if (g()) {
28
+ console.debug("guido:autosave:skipped", { trigger: e, reason: "editor-busy" });
29
+ return;
30
+ }
26
31
  console.debug("guido:autosave:save-start", { trigger: e }), t.status = s.SAVING;
27
32
  try {
28
33
  if (await b() === void 0) {
29
34
  console.debug("guido:autosave:blocked", { trigger: e, reason: "save-returned-undefined" }), t.status = s.ERROR;
30
35
  return;
31
36
  }
32
- a.hasChanges = !1, t.status = s.SAVED, t.lastSavedAt = /* @__PURE__ */ new Date(), console.debug("guido:autosave:save-complete", { trigger: e, at: t.lastSavedAt });
33
- } catch (o) {
34
- console.debug("guido:autosave:error", { trigger: e, error: o }), t.status = s.ERROR;
37
+ o.hasChanges = !1, t.status = s.SAVED, t.lastSavedAt = /* @__PURE__ */ new Date(), console.debug("guido:autosave:save-complete", { trigger: e, at: t.lastSavedAt });
38
+ } catch (a) {
39
+ console.debug("guido:autosave:error", { trigger: e, error: a }), t.status = s.ERROR;
35
40
  }
36
41
  }, n = () => {
37
42
  const { visibilityState: e } = document;
@@ -40,32 +45,32 @@ const I = 18e4, r = 6e4, T = (b) => {
40
45
  isActive: u.value
41
46
  }), e !== "hidden")
42
47
  return;
43
- const o = Date.now() - c;
44
- if (o < r) {
48
+ const a = Date.now() - c;
49
+ if (a < v) {
45
50
  console.debug("guido:autosave:visibility-debounced", {
46
- sinceLastMs: o,
47
- debounceMs: r
51
+ sinceLastMs: a,
52
+ debounceMs: v
48
53
  });
49
54
  return;
50
55
  }
51
- c = Date.now(), l("visibility");
56
+ c = Date.now(), r("visibility");
52
57
  }, d = () => {
53
58
  i && (clearInterval(i), i = null);
54
- }, v = () => {
59
+ }, l = () => {
55
60
  document.removeEventListener("visibilitychange", n), window.removeEventListener("pagehide", n);
56
61
  };
57
- p(
62
+ I(
58
63
  u,
59
64
  (e) => {
60
65
  console.debug("guido:autosave:active-changed", { active: e }), e ? (d(), i = setInterval(() => {
61
- console.debug("guido:autosave:interval-tick"), l("interval");
62
- }, I), document.addEventListener("visibilitychange", n), window.addEventListener("pagehide", n)) : (d(), v(), t.status = s.IDLE);
66
+ console.debug("guido:autosave:interval-tick"), r("interval");
67
+ }, w), document.addEventListener("visibilitychange", n), window.addEventListener("pagehide", n)) : (d(), l(), t.status = s.IDLE);
63
68
  },
64
69
  { immediate: !0 }
65
- ), y(() => {
66
- d(), v(), t.status = s.IDLE, t.lastSavedAt = null;
70
+ ), L(() => {
71
+ d(), l(), t.status = s.IDLE, t.lastSavedAt = null;
67
72
  });
68
73
  };
69
74
  export {
70
- T as useAutoSave
75
+ R as useAutoSave
71
76
  };
@@ -0,0 +1,20 @@
1
+ let o = Promise.resolve(), n = 0, e = 0;
2
+ const s = () => n > 0, c = () => (e += 1, e), u = (t) => t > 0 && t === e, i = (t) => {
3
+ const r = o.then(async () => {
4
+ n += 1;
5
+ try {
6
+ return await t();
7
+ } finally {
8
+ n -= 1;
9
+ }
10
+ });
11
+ return o = r.catch(() => {
12
+ }), r;
13
+ }, a = () => ({ runExclusive: i, isEditorBusy: s, beginMount: c, isCurrentMount: u });
14
+ export {
15
+ c as beginMount,
16
+ u as isCurrentMount,
17
+ s as isEditorBusy,
18
+ i as runExclusive,
19
+ a as useEditorLock
20
+ };
@@ -1,48 +1,54 @@
1
- import { useActionsApi as g } from "./useActionsApi.js";
2
- import { useConfigStore as I } from "../stores/config.js";
3
- import { useEditorStore as b } from "../stores/editor.js";
4
- import { useGuidoEmailEditorStore as E } from "../stores/guido-email-editor.js";
5
- import { watch as c, onUnmounted as T } from "vue";
6
- const w = 500, z = () => {
7
- const i = b(), a = E(), l = I(), { getTemplateData: m } = g();
8
- let e = null, n = !1;
9
- const r = () => {
10
- e && (clearTimeout(e), e = null);
11
- }, s = async () => {
12
- var t, o;
13
- if (!(n || !i.isStripoInitialized))
1
+ import { useActionsApi as b } from "./useActionsApi.js";
2
+ import { useEditorLock as v } from "./useEditorLock.js";
3
+ import { useConfigStore as T } from "../stores/config.js";
4
+ import { useEditorStore as w } from "../stores/editor.js";
5
+ import { useGuidoEmailEditorStore as y } from "../stores/guido-email-editor.js";
6
+ import { watch as a, onUnmounted as B } from "vue";
7
+ const C = 500, L = () => {
8
+ const i = w(), u = y(), l = T(), { getTemplateData: d } = b(), { runExclusive: m, isEditorBusy: p } = v();
9
+ let o = null, s = !1;
10
+ const n = () => {
11
+ o && (clearTimeout(o), o = null);
12
+ }, c = (t) => {
13
+ n(), o = setTimeout(() => {
14
+ o = null, t();
15
+ }, C);
16
+ }, e = async () => {
17
+ var t, r;
18
+ if (!(s || !i.isStripoInitialized)) {
19
+ if (p()) {
20
+ c(() => void e());
21
+ return;
22
+ }
14
23
  try {
15
- const { html: f, css: h } = await m(), S = ((o = (t = l.config) == null ? void 0 : t.identity) == null ? void 0 : o.templateId) ?? "";
16
- if (n)
24
+ const { html: E, css: g } = await m(d), I = ((r = (t = l.config) == null ? void 0 : t.identity) == null ? void 0 : r.templateId) ?? "";
25
+ if (s)
17
26
  return;
18
- a.$patch({
19
- html: f ?? "",
20
- css: h ?? "",
21
- templateId: S,
27
+ u.$patch({
28
+ html: E ?? "",
29
+ css: g ?? "",
30
+ templateId: I,
22
31
  lastUpdatedAt: Date.now()
23
32
  });
24
33
  } catch {
25
34
  }
26
- }, u = () => {
27
- r(), e = setTimeout(() => {
28
- e = null, s();
29
- }, w);
30
- }, d = c(
35
+ }
36
+ }, f = () => c(() => void e()), h = a(
31
37
  () => i.isStripoInitialized,
32
38
  (t) => {
33
- t && s();
39
+ t && e();
34
40
  },
35
41
  { immediate: !0 }
36
- ), p = c(
42
+ ), S = a(
37
43
  () => i.hasChanges,
38
- (t, o) => {
39
- i.isStripoInitialized && (t ? u() : o && (r(), s()));
44
+ (t, r) => {
45
+ i.isStripoInitialized && (t ? f() : r && (n(), e()));
40
46
  }
41
47
  );
42
- T(() => {
43
- n = !0, r(), d(), p();
48
+ B(() => {
49
+ s = !0, n(), h(), S();
44
50
  });
45
51
  };
46
52
  export {
47
- z as useGuidoStateBridge
53
+ L as useGuidoStateBridge
48
54
  };
@@ -1,52 +1,55 @@
1
- import { useActionsApi as x } from "./useActionsApi.js";
2
- import { useConfig as T } from "./useConfig.js";
3
- import { useSaveStart as E, useSaveComplete as q } from "./useGuidoActions.js";
4
- import { useSyncModuleExtractor as C } from "./useSyncModuleExtractor.js";
5
- import { ToasterTypeOptions as M } from "../enums/toaster.js";
6
- import { useStripoApi as D } from "../services/stripoApi.js";
7
- import { useTemplatePreparation as L } from "../utils/templatePreparation.js";
8
- import { useAllowlist as P } from "./useAllowlist.js";
9
- import { useHtmlValidator as U } from "./useHtmlValidator.js";
10
- import { useToaster as A } from "./useToaster.js";
11
- import { useCouponBlockValidator as h } from "./validators/useCouponBlockValidator.js";
12
- import { useLiquidValidator as F } from "./validators/useLiquidValidator.js";
13
- import { useSyncModuleBlockValidator as O } from "./validators/useSyncModuleBlockValidator.js";
14
- import { useUnsubscribeBlockValidator as W } from "./validators/useUnsubscribeBlockValidator.js";
15
- const it = () => {
16
- const l = E(), n = q(), { validateHtml: c } = U(), { validateLiquidSyntax: d } = F(), { validateCouponBlockTags: m } = h(), { validateUnsubscribeBlockUniqueness: u, validateUnsubscribeBlockHasTemplate: p } = W(), { validateSyncModuleBlocks: f } = O(), { callbacks: a, isFeatureEnabled: s } = T(), { extractSyncModuleData: v } = C(), { setSyncModuleUnsubscriptionPages: S } = D(), { editorSave: b } = x(), { showToaster: w } = A(), { getBlockedDomains: V, resolveToast: y } = P();
17
- return { save: async (H = !1, e = !1) => {
18
- var r;
19
- l();
20
- const { prepareTemplateDetails: k } = L(), t = await k();
21
- if (!f(t.rawHtml, e) || !m(t.compiledHtml) || !u(t.compiledHtml) || !p(t.compiledHtml))
1
+ import { useActionsApi as T } from "./useActionsApi.js";
2
+ import { useConfig as q } from "./useConfig.js";
3
+ import { useEditorLock as C } from "./useEditorLock.js";
4
+ import { useSaveStart as L, useSaveComplete as M } from "./useGuidoActions.js";
5
+ import { useSyncModuleExtractor as D } from "./useSyncModuleExtractor.js";
6
+ import { ToasterTypeOptions as P } from "../enums/toaster.js";
7
+ import { useStripoApi as U } from "../services/stripoApi.js";
8
+ import { useTemplatePreparation as A } from "../utils/templatePreparation.js";
9
+ import { useAllowlist as h } from "./useAllowlist.js";
10
+ import { useHtmlValidator as F } from "./useHtmlValidator.js";
11
+ import { useToaster as O } from "./useToaster.js";
12
+ import { useCouponBlockValidator as W } from "./validators/useCouponBlockValidator.js";
13
+ import { useLiquidValidator as j } from "./validators/useLiquidValidator.js";
14
+ import { useSyncModuleBlockValidator as z } from "./validators/useSyncModuleBlockValidator.js";
15
+ import { useUnsubscribeBlockValidator as G } from "./validators/useUnsubscribeBlockValidator.js";
16
+ const rt = () => {
17
+ const n = L(), c = M(), { validateHtml: d } = F(), { validateLiquidSyntax: m } = j(), { validateCouponBlockTags: u } = W(), { validateUnsubscribeBlockUniqueness: p, validateUnsubscribeBlockHasTemplate: f } = G(), { validateSyncModuleBlocks: v } = z(), { callbacks: s, isFeatureEnabled: r } = q(), { extractSyncModuleData: S } = D(), { setSyncModuleUnsubscriptionPages: b } = U(), { editorSave: w } = T(), { showToaster: V } = O(), { getBlockedDomains: y, resolveToast: k } = h(), { runExclusive: x } = C(), H = async (a, o) => {
18
+ var l;
19
+ n();
20
+ const { prepareTemplateDetails: B } = A(), t = await B();
21
+ if (!v(t.rawHtml, o) || !u(t.compiledHtml) || !p(t.compiledHtml) || !f(t.compiledHtml))
22
22
  return;
23
- if (s("liquidSyntax")) {
24
- if (!await d(t.compiledHtml))
23
+ if (r("liquidSyntax")) {
24
+ if (!await m(t.compiledHtml))
25
25
  return;
26
- } else if (!await c(t.compiledHtml, t.dynamicContentList, !0))
26
+ } else if (!await d(t.compiledHtml, t.dynamicContentList, !0))
27
27
  return;
28
- if ((r = a.value) != null && r.externalValidation && !await a.value.externalValidation(t))
28
+ if ((l = s.value) != null && l.externalValidation && !await s.value.externalValidation(t))
29
29
  return;
30
- if (s("allowlistEnabled")) {
31
- const o = await V(t.compiledHtml, t.css);
32
- if (o.length) {
33
- if (!e) {
34
- const i = await y(o);
35
- i != null && i.message && w({
36
- type: M.Warning,
37
- message: i.message,
38
- actionButton: i.actionButton
30
+ if (r("allowlistEnabled")) {
31
+ const i = await y(t.compiledHtml, t.css);
32
+ if (i.length) {
33
+ if (!o) {
34
+ const e = await k(i);
35
+ e != null && e.message && V({
36
+ type: P.Warning,
37
+ message: e.message,
38
+ actionButton: e.actionButton
39
39
  });
40
40
  }
41
41
  return;
42
42
  }
43
43
  }
44
- if (!await b())
44
+ if (!await w())
45
45
  return;
46
- const { unsubscribePayload: B, stripoModules: g } = v(t.rawHtml);
47
- return await S(B), t.modules = g, H || n({ ...t, silent: e }), t;
48
- } };
46
+ const { unsubscribePayload: E, stripoModules: g } = S(t.rawHtml);
47
+ return await b(E), t.modules = g, a || c({ ...t, silent: o }), t;
48
+ };
49
+ return { save: (a = !1, o = !1) => x(
50
+ () => H(a, o)
51
+ ) };
49
52
  };
50
53
  export {
51
- it as useSave
54
+ rt as useSave
52
55
  };
package/dist/guido.css CHANGED
@@ -1 +1 @@
1
- @charset "UTF-8";.gap-16[data-v-5553d071],.gap-16[data-v-0e1b0c54]{gap:16px}[data-v-73199fa4] .in-button-v2__wrapper{line-height:0}[data-v-22226124] .in-segments-wrapper__button_selected,[data-v-22226124] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb;color:#0010ac;border-color:#0010ac}[data-v-2cb418af] .in-progress-wrapper__progress p span:last-child{display:none!important}[data-v-2cb418af] .in-progress-description-status{display:none!important}.view-options-wrapper[data-v-87033101]{position:relative;display:inline-block}.new-tag[data-v-87033101]{position:absolute;top:-8px;right:-16px;z-index:10}[data-v-87033101] .guido__view-option-selection-desktop svg,[data-v-87033101] .guido__view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-87033101] .in-segments-wrapper__button_selected,[data-v-87033101] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}[data-v-87033101] .in-tooltip-wrapper-v2__icon{cursor:pointer}.editor-toolbar[data-v-173c3a40]{gap:4px}.version-history-item[data-v-ee4b9c3f]{flex-basis:200px}.version-history[data-v-fad98586]{gap:8px}.version-history__toolbar[data-v-fad98586]{gap:4px}.view-options-wrapper[data-v-6ebabfe4]{position:relative;display:inline-block}.new-tag[data-v-6ebabfe4]{position:absolute;top:-8px;right:-16px;z-index:10}[data-v-6ebabfe4] .guido__verion-history-view-option-selection-desktop svg,[data-v-6ebabfe4] .guido__verion-history-view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-6ebabfe4] .in-segments-wrapper__button_selected,[data-v-6ebabfe4] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}[data-v-6ebabfe4] .in-tooltip-wrapper-v2__icon{cursor:pointer}.auto-save-toggle[data-v-2c964af4]{position:relative}.auto-save-toggle__info-box[data-v-2c964af4]{position:absolute;top:100%;left:0;z-index:10;width:280px}.editor-actions[data-v-6e711fd7]{gap:4px}.header-wrapper[data-v-d11dd577]{min-width:1000px}.guido-loading__wrapper[data-v-07c4b2d8]{height:100%;top:75px!important;bottom:0!important}.guido-editor__wrapper[data-v-5c588dc5]{--ribbon-offset: 0px;position:relative;width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__container[data-v-5c588dc5]{width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__no-header[data-v-5c588dc5]{height:calc(100vh - 75px - var(--ribbon-offset))}[data-v-293f1c47] .in-breadcrumb-wrapper__links{cursor:pointer}.templates-wrapper[data-v-91a26acd]{gap:16px;grid-template-columns:repeat(3,1fr)}.templates-wrapper .template-wrapper[data-v-91a26acd]{cursor:pointer}.templates-wrapper .template-wrapper .template-container[data-v-91a26acd]{height:274px;padding:2px;transition:none}.templates-wrapper .template-wrapper .template-container.selected[data-v-91a26acd]{padding:1px}.templates-wrapper .template-wrapper .template-container .thumbnail[data-v-91a26acd]{object-fit:cover;transform:scale(1)}[data-v-b9a93c6e] .guido__verion-history-view-option-selection-desktop svg,[data-v-b9a93c6e] .guido__verion-history-view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-b9a93c6e] .in-segments-wrapper__button_selected,[data-v-b9a93c6e] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}.error-list[data-v-c3fd5d4b]{gap:16px}.desktop-browser-header[data-v-d86c5af5]{height:79px;min-height:79px}.desktop-browser-header__left[data-v-d86c5af5]{-webkit-user-drag:none;height:79px;width:378px}.desktop-browser-header__center[data-v-d86c5af5]{height:79px;background-repeat:repeat-x;background-size:auto 100%;background-position:left top}.desktop-browser-header__right[data-v-d86c5af5]{-webkit-user-drag:none;height:79px;width:112px}.desktop-preview[data-v-cf946232]{min-width:602px;height:70vh;min-height:583px;border-radius:10px}.desktop-preview iframe[data-v-cf946232]{min-height:504px}.iframe-wrapper[data-v-f255b2bb]{width:258px}.iframe-scaled[data-v-f255b2bb]{width:320px;height:124.0310077519%;transform:scale(.80625);transform-origin:top left}.cropped-text[data-v-eb3d05d7]{width:220px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mobile-preview-wrapper__phone[data-v-3f472f96]{width:282px}.mobile-preview-wrapper__phone img[data-v-3f472f96]{object-fit:cover;border-radius:44px}.mobile-preview-wrapper__content[data-v-3f472f96]{width:258px;height:450px;left:12px}[data-v-6bcaca8a] .vueperslides__parallax-wrapper{padding-bottom:110px!important}[data-v-f16f20f8] .vueperslides__bullets{pointer-events:none!important}[data-v-f16f20f8] .vueperslides__parallax-wrapper{padding-bottom:110px!important}[data-v-bb3cca55] .vueperslides__bullets{pointer-events:none!important}[data-v-bb3cca55] .vueperslides__parallax-wrapper{height:110px!important;padding-bottom:110px!important}[data-v-b09e80c4] .vueperslides__bullets{pointer-events:none!important}[data-v-b09e80c4] .vueperslides__parallax-wrapper{height:110px!important;padding-bottom:110px!important}[data-v-9bdef600] .vueperslides__parallax-wrapper{padding-bottom:110px!important}.assign-strategy-drawer-content .assign-strategy-select[data-v-2580a7d9]{width:100%;max-width:none}.assign-strategy-drawer-content .assign-strategy-select[data-v-2580a7d9] .in-dropdown-box__container{width:413px}.assign-strategy-drawer .spaced-dot-sep{background-image:linear-gradient(90deg,#91949f 20%,#fff0 0);background-position:center bottom;background-repeat:repeat-x;background-size:5px 1px}.assign-strategy-drawer .spaced-dot-sep--top{background-position:center top}.assign-strategy-drawer .spaced-dot-sep--fc-n:first-child{background:none}
1
+ @charset "UTF-8";.gap-16[data-v-5553d071],.gap-16[data-v-0e1b0c54]{gap:16px}[data-v-73199fa4] .in-button-v2__wrapper{line-height:0}[data-v-22226124] .in-segments-wrapper__button_selected,[data-v-22226124] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb;color:#0010ac;border-color:#0010ac}[data-v-2cb418af] .in-progress-wrapper__progress p span:last-child{display:none!important}[data-v-2cb418af] .in-progress-description-status{display:none!important}.view-options-wrapper[data-v-87033101]{position:relative;display:inline-block}.new-tag[data-v-87033101]{position:absolute;top:-8px;right:-16px;z-index:10}[data-v-87033101] .guido__view-option-selection-desktop svg,[data-v-87033101] .guido__view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-87033101] .in-segments-wrapper__button_selected,[data-v-87033101] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}[data-v-87033101] .in-tooltip-wrapper-v2__icon{cursor:pointer}.editor-toolbar[data-v-173c3a40]{gap:4px}.version-history-item[data-v-ee4b9c3f]{flex-basis:200px}.version-history[data-v-fad98586]{gap:8px}.version-history__toolbar[data-v-fad98586]{gap:4px}.view-options-wrapper[data-v-6ebabfe4]{position:relative;display:inline-block}.new-tag[data-v-6ebabfe4]{position:absolute;top:-8px;right:-16px;z-index:10}[data-v-6ebabfe4] .guido__verion-history-view-option-selection-desktop svg,[data-v-6ebabfe4] .guido__verion-history-view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-6ebabfe4] .in-segments-wrapper__button_selected,[data-v-6ebabfe4] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}[data-v-6ebabfe4] .in-tooltip-wrapper-v2__icon{cursor:pointer}.auto-save-toggle[data-v-2c964af4]{position:relative}.auto-save-toggle__info-box[data-v-2c964af4]{position:absolute;top:100%;left:0;z-index:10;width:280px}.editor-actions[data-v-1ca6baf0]{gap:4px}.header-wrapper[data-v-d11dd577]{min-width:1000px}.guido-loading__wrapper[data-v-07c4b2d8]{height:100%;top:75px!important;bottom:0!important}.guido-editor__wrapper[data-v-050dfa52]{--ribbon-offset: 0px;position:relative;width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__container[data-v-050dfa52]{width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__no-header[data-v-050dfa52]{height:calc(100vh - 75px - var(--ribbon-offset))}[data-v-293f1c47] .in-breadcrumb-wrapper__links{cursor:pointer}.templates-wrapper[data-v-91a26acd]{gap:16px;grid-template-columns:repeat(3,1fr)}.templates-wrapper .template-wrapper[data-v-91a26acd]{cursor:pointer}.templates-wrapper .template-wrapper .template-container[data-v-91a26acd]{height:274px;padding:2px;transition:none}.templates-wrapper .template-wrapper .template-container.selected[data-v-91a26acd]{padding:1px}.templates-wrapper .template-wrapper .template-container .thumbnail[data-v-91a26acd]{object-fit:cover;transform:scale(1)}[data-v-b9a93c6e] .guido__verion-history-view-option-selection-desktop svg,[data-v-b9a93c6e] .guido__verion-history-view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-b9a93c6e] .in-segments-wrapper__button_selected,[data-v-b9a93c6e] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}.error-list[data-v-c3fd5d4b]{gap:16px}.desktop-browser-header[data-v-d86c5af5]{height:79px;min-height:79px}.desktop-browser-header__left[data-v-d86c5af5]{-webkit-user-drag:none;height:79px;width:378px}.desktop-browser-header__center[data-v-d86c5af5]{height:79px;background-repeat:repeat-x;background-size:auto 100%;background-position:left top}.desktop-browser-header__right[data-v-d86c5af5]{-webkit-user-drag:none;height:79px;width:112px}.desktop-preview[data-v-cf946232]{min-width:602px;height:70vh;min-height:583px;border-radius:10px}.desktop-preview iframe[data-v-cf946232]{min-height:504px}.iframe-wrapper[data-v-f255b2bb]{width:258px}.iframe-scaled[data-v-f255b2bb]{width:320px;height:124.0310077519%;transform:scale(.80625);transform-origin:top left}.cropped-text[data-v-eb3d05d7]{width:220px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mobile-preview-wrapper__phone[data-v-3f472f96]{width:282px}.mobile-preview-wrapper__phone img[data-v-3f472f96]{object-fit:cover;border-radius:44px}.mobile-preview-wrapper__content[data-v-3f472f96]{width:258px;height:450px;left:12px}[data-v-6bcaca8a] .vueperslides__parallax-wrapper{padding-bottom:110px!important}[data-v-f16f20f8] .vueperslides__bullets{pointer-events:none!important}[data-v-f16f20f8] .vueperslides__parallax-wrapper{padding-bottom:110px!important}[data-v-bb3cca55] .vueperslides__bullets{pointer-events:none!important}[data-v-bb3cca55] .vueperslides__parallax-wrapper{height:110px!important;padding-bottom:110px!important}[data-v-b09e80c4] .vueperslides__bullets{pointer-events:none!important}[data-v-b09e80c4] .vueperslides__parallax-wrapper{height:110px!important;padding-bottom:110px!important}[data-v-9bdef600] .vueperslides__parallax-wrapper{padding-bottom:110px!important}.assign-strategy-drawer-content .assign-strategy-select[data-v-2580a7d9]{width:100%;max-width:none}.assign-strategy-drawer-content .assign-strategy-select[data-v-2580a7d9] .in-dropdown-box__container{width:413px}.assign-strategy-drawer .spaced-dot-sep{background-image:linear-gradient(90deg,#91949f 20%,#fff0 0);background-position:center bottom;background-repeat:repeat-x;background-size:5px 1px}.assign-strategy-drawer .spaced-dot-sep--top{background-position:center top}.assign-strategy-drawer .spaced-dot-sep--fc-n:first-child{background:none}
@@ -1,4 +1,4 @@
1
- const o = { stripo: { version: "2.72.1" } }, s = {
1
+ const o = { stripo: { version: "2.73.0" } }, s = {
2
2
  guido: o
3
3
  };
4
4
  export {
@@ -0,0 +1,10 @@
1
+ export declare const isEditorBusy: () => boolean;
2
+ export declare const beginMount: () => number;
3
+ export declare const isCurrentMount: (generation: number) => boolean;
4
+ export declare const runExclusive: <T>(task: () => Promise<T>) => Promise<T>;
5
+ export declare const useEditorLock: () => {
6
+ runExclusive: <T>(task: () => Promise<T>) => Promise<T>;
7
+ isEditorBusy: () => boolean;
8
+ beginMount: () => number;
9
+ isCurrentMount: (generation: number) => boolean;
10
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@useinsider/guido",
3
- "version": "3.18.0",
3
+ "version": "3.18.1-beta.6ae01b1",
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",
@@ -118,7 +118,7 @@
118
118
  },
119
119
  "guido": {
120
120
  "stripo": {
121
- "version": "2.72.1"
121
+ "version": "2.73.0"
122
122
  }
123
123
  }
124
124
  }