@useinsider/guido 3.19.0-beta.575d19c → 3.19.0-beta.6a2624a

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 (63) hide show
  1. package/dist/@types/config/schemas.js +20 -21
  2. package/dist/components/Guido.vue.js +8 -8
  3. package/dist/components/Guido.vue2.js +71 -72
  4. package/dist/components/organisms/AutoSaveController.vue2.js +8 -18
  5. package/dist/components/organisms/header/AutoSaveToggle.vue.js +22 -0
  6. package/dist/components/organisms/header/AutoSaveToggle.vue2.js +19 -0
  7. package/dist/components/organisms/header/EditorActions.vue.js +13 -13
  8. package/dist/components/organisms/header/EditorActions.vue2.js +51 -35
  9. package/dist/components/organisms/header/HeaderWrapper.vue.js +6 -6
  10. package/dist/components/organisms/header/HeaderWrapper.vue2.js +17 -9
  11. package/dist/components/organisms/header/LeftSlot.vue.js +5 -5
  12. package/dist/components/organisms/header/LeftSlot.vue2.js +23 -32
  13. package/dist/components/organisms/header/MiddleSlot.vue.js +4 -4
  14. package/dist/components/organisms/header/MiddleSlot.vue2.js +7 -8
  15. package/dist/components/organisms/header/RightSlot.vue.js +8 -9
  16. package/dist/components/organisms/header/RightSlot.vue2.js +18 -13
  17. package/dist/components/organisms/onboarding/OnboardingWrapper.vue.js +12 -12
  18. package/dist/components/organisms/onboarding/OnboardingWrapper.vue2.js +38 -56
  19. package/dist/composables/useCortexBlueprintBridge.js +122 -54
  20. package/dist/composables/useCustomInterfaceAppearance.js +41 -42
  21. package/dist/composables/useEmailTemplateApplier.js +106 -50
  22. package/dist/config/i18n/en/labels.json.js +4 -36
  23. package/dist/config/i18n/en/tooltips.json.js +1 -2
  24. package/dist/guido.css +1 -1
  25. package/dist/sprite.svg +0 -6
  26. package/dist/src/@types/config/schemas.d.ts +0 -2
  27. package/dist/src/components/organisms/AutoSaveController.vue.d.ts +1 -3
  28. package/dist/src/components/organisms/header/HeaderWrapper.vue.d.ts +3 -1
  29. package/dist/src/components/organisms/header/RightSlot.vue.d.ts +3 -1
  30. package/dist/src/composables/useActionsApi.d.ts +2 -2
  31. package/dist/src/composables/useConfig.d.ts +0 -2
  32. package/dist/src/composables/useCortexBlueprintBridge.d.ts +2 -3
  33. package/dist/src/composables/useEmailTemplateApplier.d.ts +18 -5
  34. package/dist/src/stores/config.d.ts +0 -20
  35. package/dist/src/stores/editor.d.ts +0 -109
  36. package/dist/src/stores/guido-email-editor.d.ts +20 -10
  37. package/dist/src/stores/onboarding.d.ts +21 -952
  38. package/dist/src/stores/version-history.d.ts +1 -1
  39. package/dist/src/utils/timeUtil.d.ts +0 -5
  40. package/dist/static/styles/variables.css.js +0 -2
  41. package/dist/stores/editor.js +4 -7
  42. package/dist/stores/guido-email-editor.js +3 -1
  43. package/dist/stores/onboarding.js +21 -43
  44. package/dist/utils/timeUtil.js +17 -6
  45. package/package.json +1 -1
  46. package/dist/components/organisms/header/AutoSaveStatus.vue.js +0 -17
  47. package/dist/components/organisms/header/AutoSaveStatus.vue2.js +0 -25
  48. package/dist/components/organisms/header/EditorActionsMenu.vue.js +0 -20
  49. package/dist/components/organisms/header/EditorActionsMenu.vue2.js +0 -98
  50. package/dist/components/organisms/header/accessibility/AccessibilityToolbar.vue.js +0 -18
  51. package/dist/components/organisms/header/accessibility/AccessibilityToolbar.vue2.js +0 -37
  52. package/dist/components/organisms/header/accessibility/ColorVisionSelect.vue.js +0 -22
  53. package/dist/components/organisms/header/accessibility/ColorVisionSelect.vue2.js +0 -48
  54. package/dist/components/organisms/onboarding/EditorTabBarOnboarding.vue.js +0 -19
  55. package/dist/components/organisms/onboarding/EditorTabBarOnboarding.vue2.js +0 -90
  56. package/dist/composables/useAccessibilityApi.js +0 -45
  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 -13
  62. package/dist/static/styles/components/accessibility.css.js +0 -234
  63. /package/dist/src/components/organisms/header/{AutoSaveStatus.vue.d.ts → AutoSaveToggle.vue.d.ts} +0 -0
@@ -1,11 +1,11 @@
1
- import { ModuleFolderDefaults as S } from "../../enums/defaults.js";
2
- import { object as o, number as n, optional as e, string as t, picklist as l, pipe as m, minLength as b, custom as h, boolean as a, array as c, transform as C, record as k, fallback as R, literal as u, looseObject as g, variant as T, union as y, unknown as r, lazy as I } from "../../node_modules/valibot/dist/index.js";
1
+ import { ModuleFolderDefaults as f } from "../../enums/defaults.js";
2
+ import { object as o, number as n, optional as e, string as t, picklist as i, pipe as m, minLength as b, custom as h, boolean as a, array as c, transform as C, record as k, fallback as R, literal as u, looseObject as g, variant as I, union as y, unknown as r, lazy as T } from "../../node_modules/valibot/dist/index.js";
3
3
  const p = {
4
4
  /** Promotional/marketing emails */
5
5
  PROMOTIONAL: 1,
6
6
  /** Transactional/system emails */
7
7
  TRANSACTIONAL: 2
8
- }, i = {
8
+ }, l = {
9
9
  /** Standard email campaigns */
10
10
  EMAIL: 60,
11
11
  /** Architect journey builder */
@@ -46,16 +46,16 @@ const p = {
46
46
  ),
47
47
  /** Product type identifier */
48
48
  productType: e(
49
- l([
50
- i.EMAIL,
51
- i.ARCHITECT,
52
- i.UNSUBSCRIBE_PAGES
49
+ i([
50
+ l.EMAIL,
51
+ l.ARCHITECT,
52
+ l.UNSUBSCRIBE_PAGES
53
53
  ]),
54
- i.EMAIL
54
+ l.EMAIL
55
55
  ),
56
56
  /** Message type (promotional or transactional) */
57
57
  messageType: e(
58
- l([p.PROMOTIONAL, p.TRANSACTIONAL]),
58
+ i([p.PROMOTIONAL, p.TRANSACTIONAL]),
59
59
  p.PROMOTIONAL
60
60
  ),
61
61
  /** Display name for the current user */
@@ -76,17 +76,17 @@ const p = {
76
76
  value: t()
77
77
  })
78
78
  )
79
- }), f = I(() => g({
79
+ }), S = T(() => g({
80
80
  text: e(t()),
81
81
  // eslint-disable-next-line camelcase -- backend field name
82
82
  tag_text: e(t()),
83
83
  value: e(t()),
84
- children: e(c(f)),
84
+ children: e(c(S)),
85
85
  // eslint-disable-next-line camelcase -- backend field name
86
- select_items: e(c(f))
86
+ select_items: e(c(S))
87
87
  })), N = k(
88
88
  t(),
89
- R(c(f), [])
89
+ R(c(S), [])
90
90
  ), P = g({
91
91
  /** Block ID (matches the dictionary key and the legacy HTML element id) */
92
92
  id: e(n()),
@@ -197,9 +197,9 @@ const p = {
197
197
  /** Email header settings */
198
198
  emailHeader: e(D, { senderName: "", subject: "" }),
199
199
  /** Folder name for user-saved modules (used by Stripo plugin panel for path construction) */
200
- savedModulesFolderName: e(t(), S.SAVED_MODULES),
200
+ savedModulesFolderName: e(t(), f.SAVED_MODULES),
201
201
  /** Folder name for default/prebuilt modules (used by Stripo plugin panel for path construction) */
202
- defaultModulesFolderName: e(t(), S.DEFAULT_MODULES)
202
+ defaultModulesFolderName: e(t(), f.DEFAULT_MODULES)
203
203
  }), F = o({
204
204
  /** Whether to show the header bar */
205
205
  showHeader: e(a(), !0),
@@ -224,13 +224,12 @@ const p = {
224
224
  liquidSyntax: e(a(), !1),
225
225
  /** Enable autosave (3-min interval + tab-hide). User toggles on/off from the header. */
226
226
  autosave: e(a(), !1),
227
- accessibilityTesting: e(a(), !1),
228
227
  /** Enable pre-save domain-allowlist validation (opt-in; Guido self-serves the block toaster) */
229
228
  allowlistEnabled: e(a(), !1),
230
229
  /** Enable persistent link tracking-id assignment for the click heatmap (opt-in) */
231
230
  linkTrackingIds: e(a(), !1),
232
231
  reusableRecommendationStrategy: e(a(), !1)
233
- }), B = l([
232
+ }), B = i([
234
233
  "amp-accordion",
235
234
  "amp-carousel",
236
235
  "amp-form-controls",
@@ -244,7 +243,7 @@ const p = {
244
243
  "text-block",
245
244
  "timer-block",
246
245
  "video-block"
247
- ]), w = l([
246
+ ]), w = i([
248
247
  "dynamic-content",
249
248
  "checkbox-block",
250
249
  "radio-button-block",
@@ -301,7 +300,7 @@ const p = {
301
300
  (s) => typeof s == "function",
302
301
  "processor must be a function"
303
302
  )
304
- }), V = T("type", [
303
+ }), V = I("type", [
305
304
  _,
306
305
  j,
307
306
  q,
@@ -353,7 +352,7 @@ export {
353
352
  G as CustomRuleSchema,
354
353
  B as DefaultBlockTypeSchema,
355
354
  N as DynamicContentListSchema,
356
- f as DynamicContentNodeSchema,
355
+ S as DynamicContentNodeSchema,
357
356
  E as DynamicContentSchema,
358
357
  O as EditorSchema,
359
358
  D as EmailHeaderSchema,
@@ -364,7 +363,7 @@ export {
364
363
  P as LegacyRecommendationConfigSchema,
365
364
  p as MessageType,
366
365
  M as PartnerSchema,
367
- i as ProductType,
366
+ l as ProductType,
368
367
  j as RegexRuleSchema,
369
368
  q as RemoveRuleSchema,
370
369
  _ as ReplaceRuleSchema,
@@ -1,20 +1,20 @@
1
1
  import o from "./Guido.vue2.js";
2
2
  /* empty css */
3
- import t from "../_virtual/_plugin-vue2_normalizer.js";
4
- var i = function() {
3
+ import i from "../_virtual/_plugin-vue2_normalizer.js";
4
+ var t = function() {
5
5
  var a = this, r = a._self._c, e = a._self._setupProxy;
6
- return r("div", { ref: "wrapperRef", staticClass: "guido-editor__wrapper", class: { "guido-editor__no-header": e.noHeader } }, [r(e.HeaderWrapper), r(e.AutoSaveController, { ref: "autoSaveControllerRef" }), e.editorStore.isPreviewModeOpen ? r(e.PreviewContainer) : a._e(), r("div", { directives: [{ name: "show", rawName: "v-show", value: !e.previewStore.isLoaded, expression: "!previewStore.isLoaded" }], staticClass: "guido-editor__container", class: { "guido-editor__no-header": e.noHeader }, attrs: { id: "guido-editor" } }), r(e.Toaster), r(e.FilterSelectionDrawer), e.isRrsEnabled || e.hasAssignedStrategy ? r(e.AssignStrategyDrawer) : a._e(), e.isRrsEnabled || e.hasAssignedStrategy ? r(e.RemoveStrategyModal) : a._e(), e.isRrsEnabled ? r(e.LegacyStrategyUpdatedModal) : a._e(), r(e.SaveAsTemplateDrawer), e.isTestPartner() ? a._e() : r(e.OnboardingWrapper, { on: { "onboarding-finished": function(_) {
6
+ return r("div", { ref: "wrapperRef", staticClass: "guido-editor__wrapper", class: { "guido-editor__no-header": e.noHeader } }, [r(e.HeaderWrapper, { ref: "headerWrapperRef" }), r(e.AutoSaveController), e.editorStore.isPreviewModeOpen ? r(e.PreviewContainer) : a._e(), r("div", { directives: [{ name: "show", rawName: "v-show", value: !e.previewStore.isLoaded, expression: "!previewStore.isLoaded" }], staticClass: "guido-editor__container", class: { "guido-editor__no-header": e.noHeader }, attrs: { id: "guido-editor" } }), r(e.Toaster), r(e.FilterSelectionDrawer), e.isRrsEnabled || e.hasAssignedStrategy ? r(e.AssignStrategyDrawer) : a._e(), e.isRrsEnabled || e.hasAssignedStrategy ? r(e.RemoveStrategyModal) : a._e(), e.isRrsEnabled ? r(e.LegacyStrategyUpdatedModal) : a._e(), r(e.SaveAsTemplateDrawer), e.isTestPartner() ? a._e() : r(e.OnboardingWrapper, { on: { "onboarding-finished": function(_) {
7
7
  return e.emit("onboarding:finished");
8
8
  } } }), r(e.UnsubscribeWrapper), r(e.LoadingWrapper)], 1);
9
- }, s = [], n = /* @__PURE__ */ t(
9
+ }, s = [], n = /* @__PURE__ */ i(
10
10
  o,
11
- i,
11
+ t,
12
12
  s,
13
13
  !1,
14
14
  null,
15
- "b5af7c3e"
15
+ "59690055"
16
16
  );
17
- const v = n.exports;
17
+ const g = n.exports;
18
18
  export {
19
- v as default
19
+ g as default
20
20
  };
@@ -1,30 +1,30 @@
1
- import { defineComponent as re, defineAsyncComponent as m, ref as _, computed as u, watch as x, onMounted as se, onUnmounted as ie } from "vue";
2
- import { useCortexBlueprintBridge as ae } from "../composables/useCortexBlueprintBridge.js";
1
+ import { defineComponent as re, defineAsyncComponent as m, ref as x, computed as p, watch as W, onMounted as se, onUnmounted as ae } from "vue";
2
+ import { useCortexBlueprintBridge as ie } from "../composables/useCortexBlueprintBridge.js";
3
3
  import { useEditorLock as ce } from "../composables/useEditorLock.js";
4
4
  import { provideGuidoActions as de } from "../composables/useGuidoActions.js";
5
5
  import { useGuidoStateBridge as me } from "../composables/useGuidoStateBridge.js";
6
6
  import { usePartner as le } from "../composables/usePartner.js";
7
7
  import { useStripo as ue } from "../composables/useStripo.js";
8
8
  import { useTimerClone as pe } from "../composables/useTimerClone.js";
9
- import { migrate as H } from "../config/migrator/index.js";
10
- import { ModuleFolderDefaults as W } from "../enums/defaults.js";
9
+ import { migrate as G } from "../config/migrator/index.js";
10
+ import { ModuleFolderDefaults as z } from "../enums/defaults.js";
11
11
  import { RIBBON_SELECTOR as fe } from "../enums/onboarding.js";
12
- import { useRecommendationExtensionStore as h } from "../extensions/Blocks/Recommendation/store/recommendation.js";
12
+ import { useRecommendationExtensionStore as E } from "../extensions/Blocks/Recommendation/store/recommendation.js";
13
13
  import ye from "./organisms/AutoSaveController.vue.js";
14
14
  import ge from "./organisms/base/Toaster.vue.js";
15
15
  import ve from "./organisms/extensions/recommendation/FilterSelectionDrawer.vue.js";
16
16
  import Se from "./organisms/header/HeaderWrapper.vue.js";
17
- import be from "./organisms/LoadingWrapper.vue.js";
18
- import he from "./organisms/save-as-template/SaveAsTemplateDrawer.vue.js";
17
+ import he from "./organisms/LoadingWrapper.vue.js";
18
+ import be from "./organisms/save-as-template/SaveAsTemplateDrawer.vue.js";
19
19
  import Ee from "./organisms/unsubscribe/UnsubscribeWrapper.vue.js";
20
20
  import { useStripoApi as we } from "../services/stripoApi.js";
21
21
  import { useConfigStore as Ce } from "../stores/config.js";
22
- import { useDynamicContentStore as ke } from "../stores/dynamic-content.js";
23
- import { useEditorStore as G } from "../stores/editor.js";
24
- import { usePreviewStore as De } from "../stores/preview.js";
25
- import { useTemplateStore as Te } from "../stores/template.js";
26
- import { useUnsubscribeStore as Me } from "../stores/unsubscribe.js";
27
- import { readTrackFloor as $ } from "../utils/linkTrackingIds.js";
22
+ import { useDynamicContentStore as De } from "../stores/dynamic-content.js";
23
+ import { useEditorStore as w } from "../stores/editor.js";
24
+ import { usePreviewStore as ke } from "../stores/preview.js";
25
+ import { useTemplateStore as Fe } from "../stores/template.js";
26
+ import { useUnsubscribeStore as Te } from "../stores/unsubscribe.js";
27
+ import { readTrackFloor as H } from "../utils/linkTrackingIds.js";
28
28
  const tt = /* @__PURE__ */ re({
29
29
  __name: "Guido",
30
30
  props: {
@@ -32,50 +32,43 @@ const tt = /* @__PURE__ */ re({
32
32
  ready: { type: Boolean, default: !0 }
33
33
  },
34
34
  emits: ["dynamic-content:open", "back", "save:start", "save:complete", "on-change", "ready", "onboarding:finished", "test-email:click"],
35
- setup(z, { expose: V, emit: r }) {
36
- const a = z, q = m(
35
+ setup($, { expose: q, emit: r }) {
36
+ const a = $, K = m(
37
37
  () => import("./organisms/email-preview/PreviewContainer.vue.js")
38
- ), K = m(
38
+ ), V = m(
39
39
  () => import("./organisms/onboarding/OnboardingWrapper.vue.js")
40
40
  ), j = m(
41
41
  () => import("./organisms/extensions/recommendation/AssignStrategyDrawer.vue.js")
42
42
  ), J = m(
43
43
  () => import("./organisms/extensions/recommendation/RemoveStrategyModal.vue.js")
44
- ), E = _(), Q = m(
44
+ ), Q = m(
45
45
  () => import("./organisms/extensions/recommendation/LegacyStrategyUpdatedModal.vue.js")
46
- ), p = _(), f = ke(), w = Me(), o = Ce();
46
+ ), C = x(), f = x(), y = De(), D = Te(), o = Ce();
47
47
  a.ready && o.init(a.config);
48
- const s = G(), X = De(), l = u(() => s.hasChanges), { isTestPartner: Y } = le(), C = () => {
48
+ const c = w(), X = ke(), l = p(() => c.hasChanges), { isTestPartner: Y } = le(), k = () => {
49
49
  var t;
50
- if (!s.isNormalMode) {
51
- console.debug("guido:save:silent:blocked", {
52
- isVersionHistoryOpen: s.isVersionHistoryOpen,
53
- isAccessibilityTestingOpen: s.isAccessibilityTestingOpen
54
- });
55
- return;
56
- }
57
- return (t = E.value) == null ? void 0 : t.saveSilent();
58
- }, k = (t) => {
59
- s.loadingStatus = t;
50
+ return (t = C.value) == null ? void 0 : t.handleSave(!0);
51
+ }, F = (t) => {
52
+ c.loadingStatus = t;
60
53
  };
61
- ae(), me();
62
- const y = () => {
54
+ ie(), me();
55
+ const g = () => {
63
56
  var t, e;
64
57
  return {
65
58
  emailId: o.templateId,
66
59
  userId: o.userId,
67
60
  username: o.username,
68
61
  partnerName: o.partnerName,
69
- savedModulesFolderName: ((t = o.editor) == null ? void 0 : t.savedModulesFolderName) || W.SAVED_MODULES,
70
- defaultModulesFolderName: ((e = o.editor) == null ? void 0 : e.defaultModulesFolderName) || W.DEFAULT_MODULES
62
+ savedModulesFolderName: ((t = o.editor) == null ? void 0 : t.savedModulesFolderName) || z.SAVED_MODULES,
63
+ defaultModulesFolderName: ((e = o.editor) == null ? void 0 : e.defaultModulesFolderName) || z.DEFAULT_MODULES
71
64
  };
72
- }, { initPlugin: D, preloadRuntime: T } = ue(), { runExclusive: M, beginMount: F, isCurrentMount: R } = ce();
73
- let g = 0;
74
- const { getDefaultTemplate: I } = we(), { cloneTimersOnSave: L, hasTimerBlocks: O } = pe(), Z = u(() => {
65
+ }, { initPlugin: T, preloadRuntime: I } = ue(), { runExclusive: M, beginMount: R, isCurrentMount: v } = ce();
66
+ let u = 0;
67
+ const { getDefaultTemplate: L } = we(), { cloneTimersOnSave: B, hasTimerBlocks: U } = pe(), Z = p(() => {
75
68
  var t;
76
69
  return !((t = o.ui) != null && t.showHeader);
77
- }), ee = u(() => o.isFeatureEnabled("reusableRecommendationStrategy")), te = u(
78
- () => !!h().recommendationConfigs.strategyId
70
+ }), ee = p(() => o.isFeatureEnabled("reusableRecommendationStrategy")), te = p(
71
+ () => !!E().recommendationConfigs.strategyId
79
72
  );
80
73
  de({
81
74
  onBack: () => {
@@ -85,7 +78,7 @@ const tt = /* @__PURE__ */ re({
85
78
  console.debug("guido:save:start"), r("save:start");
86
79
  },
87
80
  onSaveComplete: (t) => {
88
- const e = { ...t, metadata: y() };
81
+ const e = { ...t, metadata: g() };
89
82
  console.debug("guido:save:complete", e), r("save:complete", e);
90
83
  },
91
84
  onTestEmailClick: () => {
@@ -93,77 +86,83 @@ const tt = /* @__PURE__ */ re({
93
86
  }
94
87
  });
95
88
  const A = (t) => {
96
- console.debug("dynamic-content:close", t), f.setSelectedDynamicContent(t), document.dispatchEvent(new CustomEvent("dynamic-content:close", { detail: t }));
97
- }, B = () => {
89
+ console.debug("dynamic-content:close", t), y.setSelectedDynamicContent(t), document.dispatchEvent(new CustomEvent("dynamic-content:close", { detail: t }));
90
+ }, P = () => {
98
91
  console.debug("dynamic-content:close", "Without Data"), document.dispatchEvent(new CustomEvent("dynamic-content:close", { detail: { text: "", value: "" } }));
99
92
  };
100
- x(() => l.value, () => {
93
+ W(() => l.value, () => {
101
94
  r("on-change", l.value);
102
95
  });
103
- const v = (t) => {
104
- const e = t, { attribute: i, position: d } = e.detail;
105
- console.debug("dynamic-content:open", e.detail), r("dynamic-content:open", i, d);
96
+ const S = (t) => {
97
+ const e = t, { attribute: s, position: d } = e.detail;
98
+ console.debug("dynamic-content:open", e.detail), r("dynamic-content:open", s, d);
106
99
  };
107
- let c = null;
108
- const S = () => {
100
+ let i = null;
101
+ const h = () => {
109
102
  var e;
110
103
  const t = document.querySelector(fe);
111
- (e = p.value) == null || e.style.setProperty("--ribbon-offset", `${(t == null ? void 0 : t.offsetHeight) ?? 0}px`);
104
+ (e = f.value) == null || e.style.setProperty("--ribbon-offset", `${(t == null ? void 0 : t.offsetHeight) ?? 0}px`);
112
105
  }, b = async () => {
113
106
  var t;
114
107
  try {
115
- o.initialized || o.init(a.config), s.templateId = o.templateId;
116
- const e = o.template, i = (e == null ? void 0 : e.html) || "", d = (e == null ? void 0 : e.css) || "", U = (e == null ? void 0 : e.preselectedDynamicContent) || [];
117
- w.selectedUnsubscribePages = (e == null ? void 0 : e.selectedUnsubscribePages) || [];
118
- const N = ((t = e == null ? void 0 : e.migration) == null ? void 0 : t.recommendationConfigs) ?? {}, P = o.isFeatureEnabled("linkTrackingIds");
108
+ o.initialized || o.init(a.config), c.templateId = o.templateId;
109
+ const e = o.template, s = (e == null ? void 0 : e.html) || "", d = (e == null ? void 0 : e.css) || "", _ = (e == null ? void 0 : e.preselectedDynamicContent) || [];
110
+ D.selectedUnsubscribePages = (e == null ? void 0 : e.selectedUnsubscribePages) || [];
111
+ const N = ((t = e == null ? void 0 : e.migration) == null ? void 0 : t.recommendationConfigs) ?? {}, O = o.isFeatureEnabled("linkTrackingIds");
119
112
  let n = {
120
- html: i && await H(i, N),
113
+ html: s && await G(s, N),
121
114
  css: d
122
115
  };
123
- n.html || (n = await I(), n.html = await H(n.html, N));
124
- const oe = P ? $(n.html, (e == null ? void 0 : e.trackIdCounter) || 0) : 0;
125
- O(n.html) && (n.html = await L(n.html)), P && (s.trackIdSessionFloor = Math.max(oe, $(n.html)));
116
+ n.html || (n = await L(), n.html = await G(n.html, N));
117
+ const oe = O ? H(n.html, (e == null ? void 0 : e.trackIdCounter) || 0) : 0;
118
+ U(n.html) && (n.html = await B(n.html)), O && (c.trackIdSessionFloor = Math.max(oe, H(n.html)));
126
119
  const ne = {
127
- preselectedDynamicContentList: U,
120
+ preselectedDynamicContentList: _,
128
121
  onReady: () => {
129
122
  console.debug("guido:ready"), r("ready");
130
123
  }
131
124
  };
132
- g = F(), await D(n, y(), ne), f.selectedDynamicContentList = U;
125
+ u = R(), await T(n, g(), ne), y.selectedDynamicContentList = _;
133
126
  } catch (e) {
134
127
  console.error("Failed to initialize Stripo editor:", e);
135
128
  }
136
129
  };
137
130
  return se(async () => {
138
131
  var e;
139
- console.debug("Guido says happy coding 🎉"), console.debug("🚗 Ka-Chow"), h().$reset(), G().$reset(), Te().$reset(), S();
140
- const t = (e = p.value) == null ? void 0 : e.parentElement;
141
- if (t && (c = new ResizeObserver(S), c.observe(t)), T(), a.ready)
132
+ console.debug("Guido says happy coding 🎉"), console.debug("🚗 Ka-Chow"), E().$reset(), w().$reset(), Fe().$reset(), h();
133
+ const t = (e = f.value) == null ? void 0 : e.parentElement;
134
+ if (t && (i = new ResizeObserver(h), i.observe(t)), I(), a.ready)
142
135
  await b();
143
136
  else {
144
- const i = x(() => a.ready, (d) => {
145
- d && (i(), b());
137
+ const s = W(() => a.ready, (d) => {
138
+ d && (s(), b());
146
139
  });
147
140
  }
148
- document.addEventListener("dynamic-content:open", v);
149
- }), ie(() => {
150
- c == null || c.disconnect(), document.removeEventListener("dynamic-content:open", v), h().disposeStrategyPageReturn(), M(async () => {
151
- if (R(g))
141
+ document.addEventListener("dynamic-content:open", S);
142
+ }), ae(() => {
143
+ if (i == null || i.disconnect(), document.removeEventListener("dynamic-content:open", S), E().disposeStrategyPageReturn(), v(u))
144
+ try {
145
+ w().isStripoInitialized = !1;
146
+ } catch (t) {
147
+ console.debug("Failed to close the editor readiness gate on unmount", t);
148
+ }
149
+ M(async () => {
150
+ if (v(u))
152
151
  try {
153
152
  window.UIEditor.removeEditor();
154
153
  } catch {
155
154
  console.debug("Failed to remove Stripo editor: No editor found");
156
155
  }
157
156
  }), o.reset();
158
- }), V({
157
+ }), q({
159
158
  dynamicContent: {
160
159
  insert: A,
161
- close: B
160
+ close: P
162
161
  },
163
162
  hasChanges: l,
164
- saveSilent: C,
165
- setLoading: k
166
- }), { __sfc: !0, PreviewContainer: q, OnboardingWrapper: K, AssignStrategyDrawer: j, RemoveStrategyModal: J, autoSaveControllerRef: E, LegacyStrategyUpdatedModal: Q, wrapperRef: p, dynamicContentStore: f, unsubscribeStore: w, props: a, configStore: o, editorStore: s, previewStore: X, hasChanges: l, isTestPartner: Y, saveSilent: C, setLoading: k, emit: r, buildMetadata: y, initPlugin: D, preloadRuntime: T, runExclusive: M, beginMount: F, isCurrentMount: R, mountGeneration: g, getDefaultTemplate: I, cloneTimersOnSave: L, hasTimerBlocks: O, noHeader: Z, isRrsEnabled: ee, hasAssignedStrategy: te, insertDynamicContent: A, closeDynamicContent: B, handleDynamicContentOpen: v, ribbonObserver: c, updateRibbonOffset: S, startEditor: b, AutoSaveController: ye, Toaster: ge, FilterSelectionDrawer: ve, HeaderWrapper: Se, LoadingWrapper: be, SaveAsTemplateDrawer: he, UnsubscribeWrapper: Ee };
163
+ saveSilent: k,
164
+ setLoading: F
165
+ }), { __sfc: !0, PreviewContainer: K, OnboardingWrapper: V, AssignStrategyDrawer: j, RemoveStrategyModal: J, LegacyStrategyUpdatedModal: Q, headerWrapperRef: C, wrapperRef: f, dynamicContentStore: y, unsubscribeStore: D, props: a, configStore: o, editorStore: c, previewStore: X, hasChanges: l, isTestPartner: Y, saveSilent: k, setLoading: F, emit: r, buildMetadata: g, initPlugin: T, preloadRuntime: I, runExclusive: M, beginMount: R, isCurrentMount: v, mountGeneration: u, getDefaultTemplate: L, cloneTimersOnSave: B, hasTimerBlocks: U, noHeader: Z, isRrsEnabled: ee, hasAssignedStrategy: te, insertDynamicContent: A, closeDynamicContent: P, handleDynamicContentOpen: S, ribbonObserver: i, updateRibbonOffset: h, startEditor: b, AutoSaveController: ye, Toaster: ge, FilterSelectionDrawer: ve, HeaderWrapper: Se, LoadingWrapper: he, SaveAsTemplateDrawer: be, UnsubscribeWrapper: Ee };
167
166
  }
168
167
  });
169
168
  export {
@@ -1,23 +1,13 @@
1
- import { defineComponent as n } from "vue";
2
- import { useAutoSave as u } from "../../composables/useAutoSave.js";
3
- import { useSave as m } from "../../composables/useSave.js";
4
- import { useToaster as c } from "../../composables/useToaster.js";
5
- const _ = /* @__PURE__ */ n({
1
+ import { defineComponent as t } from "vue";
2
+ import { useAutoSave as r } from "../../composables/useAutoSave.js";
3
+ import { useSave as s } from "../../composables/useSave.js";
4
+ const f = /* @__PURE__ */ t({
6
5
  __name: "AutoSaveController",
7
- setup(i, { expose: a }) {
8
- const { save: e } = m(), { handleError: r } = c(), t = () => e(!1, !0);
9
- u(t);
10
- const o = async () => {
11
- try {
12
- return await e(!0);
13
- } catch (s) {
14
- r(s, "Failed to save template");
15
- return;
16
- }
17
- };
18
- return a({ saveSilent: o }), { __sfc: !0, save: e, handleError: r, backgroundSave: t, saveSilent: o };
6
+ setup(a) {
7
+ const { save: e } = s(), o = () => e(!1, !0);
8
+ return r(o), { __sfc: !0, save: e, backgroundSave: o };
19
9
  }
20
10
  });
21
11
  export {
22
- _ as default
12
+ f as default
23
13
  };
@@ -0,0 +1,22 @@
1
+ import o from "./AutoSaveToggle.vue2.js";
2
+ /* empty css */
3
+ import i from "../../../_virtual/_plugin-vue2_normalizer.js";
4
+ var n = function() {
5
+ var e = this, a = e._self._c, t = e._self._setupProxy;
6
+ return t.isFeatureEnabled("autosave") ? a("div", { staticClass: "d-f a-i-c mr-3 auto-save-toggle", on: { mouseenter: function(s) {
7
+ t.isHovered = !0;
8
+ }, mouseleave: function(s) {
9
+ t.isHovered = !1;
10
+ } } }, [a(t.InToggle, { attrs: { id: "guido__autosave-toggle", name: "guido-autosave-toggle", checked: t.autosaveStore.isOn, disable: t.editorStore.loadingStatus }, on: { click: t.toggle } }), a("span", { staticClass: "ml-2 auto-save-toggle__label t-c-55" }, [e._v(" " + e._s(t.trans("email-editor.auto-save")) + " ")]), t.autosaveStore.status === t.AUTOSAVE_STATUS.SAVING ? a("span", { staticClass: "ml-2 d-f a-i-c f-s-1" }, [a(t.InLoading, { attrs: { "color-class": "i-c-53", size: "16" } }), a("span", { staticClass: "ml-1 t-c-53" }, [e._v(" " + e._s(t.trans("newsletter.saving")) + " ")])], 1) : t.lastSavedLabel ? a("span", { staticClass: "ml-2 f-s-1 t-c-53" }, [e._v(" " + e._s(t.lastSavedLabel) + " ")]) : e._e(), t.isHovered ? a(t.InInfoBox, { staticClass: "auto-save-toggle__info-box", attrs: { id: "guido__autosave-info-box", size: "small", variant: "information", "description-text": t.trans("email-editor.auto-save-description"), "title-text": t.trans("email-editor.auto-save-title") } }) : e._e()], 1) : e._e();
11
+ }, l = [], r = /* @__PURE__ */ i(
12
+ o,
13
+ n,
14
+ l,
15
+ !1,
16
+ null,
17
+ "2c964af4"
18
+ );
19
+ const d = r.exports;
20
+ export {
21
+ d as default
22
+ };
@@ -0,0 +1,19 @@
1
+ import { defineComponent as i, ref as f, computed as u } from "vue";
2
+ import { useConfig as l } from "../../../composables/useConfig.js";
3
+ import { useTranslations as p } from "../../../composables/useTranslations.js";
4
+ import { useAutosaveStore as c, AUTOSAVE_STATUS as t } from "../../../stores/autosave.js";
5
+ import { useEditorStore as S } from "../../../stores/editor.js";
6
+ import { formatLocalTime as d } from "../../../utils/timeUtil.js";
7
+ import { InToggle as g, InLoading as _, InInfoBox as A } from "@useinsider/design-system-vue";
8
+ const U = /* @__PURE__ */ i({
9
+ __name: "AutoSaveToggle",
10
+ setup(v) {
11
+ const { isFeatureEnabled: e } = l(), r = S(), o = c(), s = p(), n = f(!1), a = u(() => o.status !== t.SAVED || !o.lastSavedAt ? "" : d(o.lastSavedAt));
12
+ return { __sfc: !0, isFeatureEnabled: e, editorStore: r, autosaveStore: o, trans: s, isHovered: n, lastSavedLabel: a, toggle: (m) => {
13
+ o.isOn = m;
14
+ }, AUTOSAVE_STATUS: t, InInfoBox: A, InLoading: _, InToggle: g };
15
+ }
16
+ });
17
+ export {
18
+ U as default
19
+ };
@@ -1,23 +1,23 @@
1
- import r from "./EditorActions.vue2.js";
1
+ import l from "./EditorActions.vue2.js";
2
2
  /* empty css */
3
- import a from "../../../_virtual/_plugin-vue2_normalizer.js";
4
- var d = function() {
5
- var o, s;
6
- var i = this, e = i._self._c, t = i._self._setupProxy;
7
- return e("div", { staticClass: "d-f a-i-c editor-actions" }, [t.editorStore.isPreviewModeOpen ? i._e() : e("div", { staticClass: "editor-actions__divider" }), (s = (o = t.config) == null ? void 0 : o.features) != null && s.testMessage ? e(t.InButtonV2, { attrs: { id: "guido__test-button", "left-icon": "line-architect-test-journey", styling: "ghost", type: "secondary", "disabled-status": t.editorStore.isTestButtonDisabled, "label-text-status": !1, "tooltip-options": t.getTooltipOptions("guido__test-button", { staticPosition: "bottom right" }), "tooltip-text": t.trans("newsletter.test-email") }, on: { click: t.handleTestEmail } }) : i._e(), e(t.EditorActionsMenu), t.editorStore.isPreviewModeOpen ? i._e() : e("div", { staticClass: "editor-actions__divider" }), t.editorStore.isPreviewModeOpen ? i._e() : e(t.InButtonV2, { attrs: { id: "guido__save-button", "label-text": "Save", "disabled-status": !t.isSaving && t.editorStore.isSaveButtonDisabled, "loading-status": t.isSaving }, on: { click: function(n) {
3
+ import d from "../../../_virtual/_plugin-vue2_normalizer.js";
4
+ var u = function() {
5
+ var s, i, n, a;
6
+ var o = this, e = o._self._c, t = o._self._setupProxy;
7
+ return e("div", { staticClass: "d-f editor-actions" }, [t.isVersionHistoryButtonVisible ? e(t.InButtonV2, { attrs: { id: "guido__history-button", "left-icon": "line-architect-version-history", styling: "ghost", type: "secondary", "disabled-status": t.editorStore.isVersionHistoryButtonDisabled, "label-text-status": !1, "selected-status": t.editorStore.isVersionHistoryOpen, "tooltip-options": t.getTooltipOptions("guido__history-button"), "tooltip-text": t.versionHistoryTooltipText }, on: { click: t.handleVersionHistory } }) : o._e(), e(t.InButtonV2, { attrs: { id: "guido__export-button", "left-icon": "line-export", styling: "ghost", type: "secondary", "disabled-status": t.editorStore.isExportButtonDisabled, "label-text-status": !1, "loading-status": t.isExporting, "tooltip-options": t.getTooltipOptions("guido__export-button"), "tooltip-text": t.trans("newsletter.export") }, on: { click: t.handleExport } }), (i = (s = t.config) == null ? void 0 : s.features) != null && i.saveAsTemplate ? e(t.InButtonV2, { attrs: { id: "guido__save-as-button", "left-icon": "line-newsletter-save-as-template", styling: "ghost", type: "secondary", "disabled-status": t.editorStore.isSaveAsButtonDisabled, "label-text-status": !1, "tooltip-options": t.getTooltipOptions("guido__save-as-button"), "tooltip-text": t.trans("newsletter.save-templates") }, on: { click: t.handleSaveAs } }) : o._e(), (a = (n = t.config) == null ? void 0 : n.features) != null && a.testMessage ? e(t.InButtonV2, { attrs: { id: "guido__test-button", "left-icon": "line-architect-test-journey", styling: "ghost", type: "secondary", "disabled-status": t.editorStore.isTestButtonDisabled, "label-text-status": !1, "tooltip-options": t.getTooltipOptions("guido__test-button", { staticPosition: "bottom right" }), "tooltip-text": t.trans("newsletter.test-email") }, on: { click: t.handleTestEmail } }) : o._e(), t.editorStore.isPreviewModeOpen ? o._e() : e(t.InButtonV2, { staticClass: "ml-3", attrs: { id: "guido__save-button", "label-text": "Save", "disabled-status": !t.isSaving && t.editorStore.isSaveButtonDisabled, "loading-status": t.isSaving }, on: { click: function(r) {
8
8
  return t.handleSave(!1);
9
- } } }), e(t.MigrationConfirmModal, { ref: "migrationModalRef", on: { confirm: function(n) {
9
+ } } }), e(t.MigrationConfirmModal, { ref: "migrationModalRef", on: { confirm: function(r) {
10
10
  return t.executeSave(!1);
11
11
  } } })], 1);
12
- }, l = [], c = /* @__PURE__ */ a(
13
- r,
14
- d,
12
+ }, c = [], p = /* @__PURE__ */ d(
15
13
  l,
14
+ u,
15
+ c,
16
16
  !1,
17
17
  null,
18
- "e1dde802"
18
+ "c61cc8ea"
19
19
  );
20
- const p = c.exports;
20
+ const v = p.exports;
21
21
  export {
22
- p as default
22
+ v as default
23
23
  };
@@ -1,46 +1,62 @@
1
- import { defineComponent as C, ref as S } from "vue";
2
- import { useActionsApi as T } from "../../../composables/useActionsApi.js";
3
- import { useConfig as M } from "../../../composables/useConfig.js";
4
- import { useTestEmailClick as x } from "../../../composables/useGuidoActions.js";
5
- import { useHtmlCompiler as A } from "../../../composables/useHtmlCompiler.js";
6
- import { useSave as F } from "../../../composables/useSave.js";
7
- import { useToaster as V } from "../../../composables/useToaster.js";
8
- import { useTranslations as q } from "../../../composables/useTranslations.js";
9
- import { useLiquidValidator as w } from "../../../composables/validators/useLiquidValidator.js";
10
- import { useEditorStore as H } from "../../../stores/editor.js";
11
- import { useTemplateStore as k } from "../../../stores/template.js";
12
- import { getTooltipOptions as L } from "../../../utils/tooltipUtils.js";
13
- import { InButtonV2 as R } from "@useinsider/design-system-vue";
14
- import { storeToRefs as b } from "pinia";
15
- import z from "./EditorActionsMenu.vue.js";
16
- import B from "./MigrationConfirmModal.vue.js";
17
- const ot = /* @__PURE__ */ C({
1
+ import { defineComponent as q, ref as n, computed as x } 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(D, { expose: E }) {
20
- const { config: y, isFeatureEnabled: i } = M(), { save: s } = F(), { getCompiledEmail: n } = T(), { compileHtml: m } = A(), { validateLiquidSyntax: l } = w(), { handleError: r } = V(), e = H(), f = k(), { hasMigrations: u } = b(f), _ = q(), a = S(!1), c = S(), p = x(), d = async (t) => {
20
+ setup(W, { expose: w }) {
21
+ const { config: l, isFeatureEnabled: m } = k(), { exportHtml: c } = B(), { save: p } = R(), { openVersionHistory: u, closeVersionHistory: f } = P(), { getCompiledEmail: d } = b(), { compileHtml: v } = L(), { validateLiquidSyntax: y } = j(), { handleError: r } = z(), e = G(), g = J(), { hasMigrations: S } = Q(g), s = I(), i = n(!1), a = n(!1), H = n(), h = D(), _ = () => {
22
+ if (e.isVersionHistoryOpen) {
23
+ f();
24
+ return;
25
+ }
26
+ u();
27
+ }, C = async () => {
28
+ i.value = !0, await c(), i.value = !1;
29
+ }, A = () => {
30
+ e.isSaveAsTemplateDrawerOpen = !0;
31
+ }, M = x(() => e.isVersionHistoryOpen ? s("newsletter.close-version-history") : s("newsletter.version-history")), O = x(
32
+ () => {
33
+ var t, o;
34
+ return ((o = (t = l.value) == null ? void 0 : t.features) == null ? void 0 : o.versionHistory) && !e.isPreviewModeOpen;
35
+ }
36
+ ), V = async (t) => {
21
37
  a.value = !0, t || (e.loadingStatus = !0);
22
38
  let o;
23
39
  try {
24
- o = await s(t);
25
- } catch (v) {
26
- r(v, "Failed to save template");
40
+ o = await p(t);
41
+ } catch (T) {
42
+ r(T, "Failed to save template");
27
43
  } finally {
28
44
  a.value = !1, !t && !o && (e.loadingStatus = !1);
29
45
  }
30
46
  return o;
31
- }, g = (t) => {
47
+ }, E = (t) => {
32
48
  var o;
33
- if (!t && u.value) {
34
- (o = c.value) == null || o.open();
49
+ if (!t && S.value) {
50
+ (o = H.value) == null || o.open();
35
51
  return;
36
52
  }
37
- return d(t);
38
- }, h = async () => {
39
- if (i("liquidSyntax")) {
53
+ return V(t);
54
+ }, F = async () => {
55
+ if (m("liquidSyntax")) {
40
56
  e.loadingStatus = !0;
41
57
  try {
42
- const { html: t } = await n({ minimize: !0, resetDataSavedFlag: !1 }), { compiledHtml: o } = m(t);
43
- if (!await l(o))
58
+ const { html: t } = await d({ minimize: !0, resetDataSavedFlag: !1 }), { compiledHtml: o } = v(t);
59
+ if (!await y(o))
44
60
  return;
45
61
  } catch (t) {
46
62
  r(t, "Failed to prepare test email");
@@ -49,13 +65,13 @@ const ot = /* @__PURE__ */ C({
49
65
  e.loadingStatus = !1;
50
66
  }
51
67
  }
52
- p();
68
+ h();
53
69
  };
54
- return E({
55
- handleSave: g
56
- }), { __sfc: !0, config: y, isFeatureEnabled: i, save: s, getCompiledEmail: n, compileHtml: m, validateLiquidSyntax: l, handleError: r, editorStore: e, templateStore: f, hasMigrations: u, trans: _, isSaving: a, migrationModalRef: c, testEmailClick: p, executeSave: d, handleSave: g, handleTestEmail: h, getTooltipOptions: L, InButtonV2: R, EditorActionsMenu: z, MigrationConfirmModal: B };
70
+ return w({
71
+ handleSave: E
72
+ }), { __sfc: !0, config: l, isFeatureEnabled: m, exportHtml: c, save: p, openVersionHistory: u, closeVersionHistory: f, getCompiledEmail: d, compileHtml: v, validateLiquidSyntax: y, handleError: r, editorStore: e, templateStore: g, hasMigrations: S, trans: s, isExporting: i, isSaving: a, migrationModalRef: H, testEmailClick: h, handleVersionHistory: _, handleExport: C, handleSaveAs: A, versionHistoryTooltipText: M, isVersionHistoryButtonVisible: O, executeSave: V, handleSave: E, handleTestEmail: F, getTooltipOptions: K, InButtonV2: N, MigrationConfirmModal: U };
57
73
  }
58
74
  });
59
75
  export {
60
- ot as default
76
+ ft as default
61
77
  };