@useinsider/guido 3.20.1-beta.c235b0d → 3.20.1-beta.ed186ad

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 (73) hide show
  1. package/dist/@types/config/schemas.js +10 -11
  2. package/dist/components/Guido.vue.js +4 -4
  3. package/dist/components/Guido.vue2.js +79 -86
  4. package/dist/components/organisms/AutoSaveController.vue2.js +10 -19
  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 +68 -51
  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 +1 -1
  12. package/dist/components/organisms/header/LeftSlot.vue2.js +23 -28
  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/components/organisms/validation/ValidationErrorDrawer.vue.js +3 -3
  20. package/dist/components/organisms/validation/ValidationErrorDrawer.vue2.js +23 -22
  21. package/dist/composables/useAutoSave.js +46 -44
  22. package/dist/composables/useCustomInterfaceAppearance.js +41 -42
  23. package/dist/composables/useSave.js +26 -23
  24. package/dist/composables/useSaveValidation.js +55 -53
  25. package/dist/composables/useSaveValidationRollout.js +17 -6
  26. package/dist/config/i18n/en/labels.json.js +4 -36
  27. package/dist/config/i18n/en/tooltips.json.js +1 -2
  28. package/dist/guido.css +1 -1
  29. package/dist/services/settingsApi.js +11 -0
  30. package/dist/sprite.svg +0 -10
  31. package/dist/src/@types/config/schemas.d.ts +0 -2
  32. package/dist/src/components/Guido.vue.d.ts +1 -1
  33. package/dist/src/components/organisms/AutoSaveController.vue.d.ts +1 -19
  34. package/dist/src/components/organisms/header/EditorActions.vue.d.ts +1 -1
  35. package/dist/src/components/organisms/header/HeaderWrapper.vue.d.ts +19 -1
  36. package/dist/src/components/organisms/header/RightSlot.vue.d.ts +19 -1
  37. package/dist/src/composables/useActionsApi.d.ts +2 -2
  38. package/dist/src/composables/useAutoSave.d.ts +4 -1
  39. package/dist/src/composables/useConfig.d.ts +0 -2
  40. package/dist/src/composables/useSaveValidationRollout.d.ts +1 -0
  41. package/dist/src/services/settingsApi.d.ts +6 -0
  42. package/dist/src/stores/autosave.d.ts +1 -73
  43. package/dist/src/stores/config.d.ts +0 -20
  44. package/dist/src/stores/editor.d.ts +0 -109
  45. package/dist/src/stores/onboarding.d.ts +21 -952
  46. package/dist/src/stores/setup-settings.d.ts +4 -0
  47. package/dist/src/stores/version-history.d.ts +1 -1
  48. package/dist/src/utils/timeUtil.d.ts +0 -5
  49. package/dist/static/styles/variables.css.js +0 -2
  50. package/dist/stores/autosave.js +7 -12
  51. package/dist/stores/editor.js +4 -7
  52. package/dist/stores/onboarding.js +21 -43
  53. package/dist/stores/setup-settings.js +10 -0
  54. package/dist/utils/timeUtil.js +17 -6
  55. package/package.json +1 -1
  56. package/dist/components/organisms/header/AutoSaveStatus.vue.js +0 -17
  57. package/dist/components/organisms/header/AutoSaveStatus.vue2.js +0 -25
  58. package/dist/components/organisms/header/EditorActionsMenu.vue.js +0 -20
  59. package/dist/components/organisms/header/EditorActionsMenu.vue2.js +0 -98
  60. package/dist/components/organisms/header/accessibility/AccessibilityToolbar.vue.js +0 -18
  61. package/dist/components/organisms/header/accessibility/AccessibilityToolbar.vue2.js +0 -37
  62. package/dist/components/organisms/header/accessibility/ColorVisionSelect.vue.js +0 -22
  63. package/dist/components/organisms/header/accessibility/ColorVisionSelect.vue2.js +0 -48
  64. package/dist/components/organisms/onboarding/EditorTabBarOnboarding.vue.js +0 -19
  65. package/dist/components/organisms/onboarding/EditorTabBarOnboarding.vue2.js +0 -90
  66. package/dist/composables/useAccessibilityApi.js +0 -45
  67. package/dist/src/components/organisms/header/EditorActionsMenu.vue.d.ts +0 -2
  68. package/dist/src/components/organisms/header/accessibility/AccessibilityToolbar.vue.d.ts +0 -2
  69. package/dist/src/components/organisms/header/accessibility/ColorVisionSelect.vue.d.ts +0 -2
  70. package/dist/src/components/organisms/onboarding/EditorTabBarOnboarding.vue.d.ts +0 -2
  71. package/dist/src/composables/useAccessibilityApi.d.ts +0 -13
  72. package/dist/static/styles/components/accessibility.css.js +0 -234
  73. /package/dist/src/components/organisms/header/{AutoSaveStatus.vue.d.ts → AutoSaveToggle.vue.d.ts} +0 -0
@@ -1,5 +1,5 @@
1
- import { ModuleFolderDefaults as S } from "../../enums/defaults.js";
2
- import { object as a, number as s, optional as e, string as t, picklist as m, pipe as i, minLength as b, custom as k, boolean as o, array as c, transform as y, unknown as r, record as g, fallback as R, literal as u, looseObject as C, variant as T, union as h, lazy as I } from "../../node_modules/valibot/dist/index.js";
1
+ import { ModuleFolderDefaults as f } from "../../enums/defaults.js";
2
+ import { object as a, number as s, optional as e, string as t, picklist as m, pipe as i, minLength as b, custom as k, boolean as o, array as c, transform as y, unknown as r, record as g, fallback as R, literal as u, looseObject as C, variant as I, union as h, lazy as T } from "../../node_modules/valibot/dist/index.js";
3
3
  const p = {
4
4
  /** Promotional/marketing emails */
5
5
  PROMOTIONAL: 1,
@@ -76,17 +76,17 @@ const p = {
76
76
  value: t()
77
77
  })
78
78
  )
79
- }), f = I(() => C({
79
+ }), S = T(() => C({
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 = g(
88
88
  t(),
89
- R(c(f), [])
89
+ R(c(S), [])
90
90
  ), P = C({
91
91
  /** Block ID (matches the dictionary key and the legacy HTML element id) */
92
92
  id: e(s()),
@@ -210,9 +210,9 @@ const p = {
210
210
  /** Email header settings */
211
211
  emailHeader: e(D, { senderName: "", subject: "" }),
212
212
  /** Folder name for user-saved modules (used by Stripo plugin panel for path construction) */
213
- savedModulesFolderName: e(t(), S.SAVED_MODULES),
213
+ savedModulesFolderName: e(t(), f.SAVED_MODULES),
214
214
  /** Folder name for default/prebuilt modules (used by Stripo plugin panel for path construction) */
215
- defaultModulesFolderName: e(t(), S.DEFAULT_MODULES)
215
+ defaultModulesFolderName: e(t(), f.DEFAULT_MODULES)
216
216
  }), F = a({
217
217
  /** Whether to show the header bar */
218
218
  showHeader: e(o(), !0),
@@ -237,7 +237,6 @@ const p = {
237
237
  liquidSyntax: e(o(), !1),
238
238
  /** Enable autosave (3-min interval + tab-hide). User toggles on/off from the header. */
239
239
  autosave: e(o(), !1),
240
- accessibilityTesting: e(o(), !1),
241
240
  /** Enable pre-save domain-allowlist validation (opt-in; Guido self-serves the block toaster) */
242
241
  allowlistEnabled: e(o(), !1),
243
242
  /** Enable persistent link tracking-id assignment for the click heatmap (opt-in) */
@@ -316,7 +315,7 @@ const p = {
316
315
  (n) => typeof n == "function",
317
316
  "processor must be a function"
318
317
  )
319
- }), V = T("type", [
318
+ }), V = I("type", [
320
319
  H,
321
320
  _,
322
321
  q,
@@ -368,7 +367,7 @@ export {
368
367
  G as CustomRuleSchema,
369
368
  w as DefaultBlockTypeSchema,
370
369
  N as DynamicContentListSchema,
371
- f as DynamicContentNodeSchema,
370
+ S as DynamicContentNodeSchema,
372
371
  M as DynamicContentSchema,
373
372
  O as EditorSchema,
374
373
  D as EmailHeaderSchema,
@@ -3,7 +3,7 @@ import o from "./Guido.vue2.js";
3
3
  import i from "../_virtual/_plugin-vue2_normalizer.js";
4
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.AuthErrorModal), 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.isSaveValidationEnabled ? r(e.ValidationErrorDrawer) : a._e(), 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.AuthErrorModal), 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.isSaveValidationEnabled ? r(e.ValidationErrorDrawer) : a._e(), 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
9
  }, s = [], n = /* @__PURE__ */ i(
@@ -12,9 +12,9 @@ var t = function() {
12
12
  s,
13
13
  !1,
14
14
  null,
15
- "6a54dbe6"
15
+ "d0a8825a"
16
16
  );
17
- const c = n.exports;
17
+ const v = n.exports;
18
18
  export {
19
- c as default
19
+ v as default
20
20
  };
@@ -1,68 +1,61 @@
1
- import { defineComponent as ie, defineAsyncComponent as m, ref as V, computed as p, watch as H, onMounted as ae, onUnmounted as ce } from "vue";
2
- import { useCortexBlueprintBridge as de } from "../composables/useCortexBlueprintBridge.js";
3
- import { useEditorLock as me } from "../composables/useEditorLock.js";
4
- import { provideGuidoActions as le } from "../composables/useGuidoActions.js";
5
- import { useGuidoStateBridge as ue } from "../composables/useGuidoStateBridge.js";
6
- import { usePartner as pe } from "../composables/usePartner.js";
7
- import { useSaveValidationRollout as fe } from "../composables/useSaveValidationRollout.js";
8
- import { useStripo as ye } from "../composables/useStripo.js";
9
- import { useTimerClone as ge } from "../composables/useTimerClone.js";
10
- import { migrate as W } from "../config/migrator/index.js";
11
- import { ModuleFolderDefaults as G } from "../enums/defaults.js";
12
- import { RIBBON_SELECTOR as Se } from "../enums/onboarding.js";
1
+ import { defineComponent as ie, defineAsyncComponent as m, ref as G, computed as p, watch as V, onMounted as ce, onUnmounted as de } from "vue";
2
+ import { useCortexBlueprintBridge as me } from "../composables/useCortexBlueprintBridge.js";
3
+ import { useEditorLock as le } from "../composables/useEditorLock.js";
4
+ import { provideGuidoActions as ue } from "../composables/useGuidoActions.js";
5
+ import { useGuidoStateBridge as pe } from "../composables/useGuidoStateBridge.js";
6
+ import { usePartner as fe } from "../composables/usePartner.js";
7
+ import { useSaveValidationRollout as ye } from "../composables/useSaveValidationRollout.js";
8
+ import { useStripo as ge } from "../composables/useStripo.js";
9
+ import { useTimerClone as Se } from "../composables/useTimerClone.js";
10
+ import { migrate as $ } from "../config/migrator/index.js";
11
+ import { ModuleFolderDefaults as z } from "../enums/defaults.js";
12
+ import { RIBBON_SELECTOR as ve } from "../enums/onboarding.js";
13
13
  import { useRecommendationExtensionStore as E } from "../extensions/Blocks/Recommendation/store/recommendation.js";
14
- import ve from "./organisms/AutoSaveController.vue.js";
15
- import be from "./organisms/base/AuthErrorModal.vue.js";
16
- import he from "./organisms/base/Toaster.vue.js";
17
- import Ee from "./organisms/extensions/recommendation/FilterSelectionDrawer.vue.js";
18
- import we from "./organisms/header/HeaderWrapper.vue.js";
14
+ import be from "./organisms/AutoSaveController.vue.js";
15
+ import he from "./organisms/base/AuthErrorModal.vue.js";
16
+ import Ee from "./organisms/base/Toaster.vue.js";
17
+ import we from "./organisms/extensions/recommendation/FilterSelectionDrawer.vue.js";
18
+ import De from "./organisms/header/HeaderWrapper.vue.js";
19
19
  import Ce from "./organisms/LoadingWrapper.vue.js";
20
- import De from "./organisms/save-as-template/SaveAsTemplateDrawer.vue.js";
21
- import ke from "./organisms/unsubscribe/UnsubscribeWrapper.vue.js";
22
- import Te from "./organisms/validation/ValidationErrorDrawer.vue.js";
23
- import { useStripoApi as Fe } from "../services/stripoApi.js";
24
- import { useConfigStore as Me } from "../stores/config.js";
25
- import { useDynamicContentStore as Re } from "../stores/dynamic-content.js";
20
+ import ke from "./organisms/save-as-template/SaveAsTemplateDrawer.vue.js";
21
+ import Re from "./organisms/unsubscribe/UnsubscribeWrapper.vue.js";
22
+ import Fe from "./organisms/validation/ValidationErrorDrawer.vue.js";
23
+ import { useStripoApi as Me } from "../services/stripoApi.js";
24
+ import { useConfigStore as Te } from "../stores/config.js";
25
+ import { useDynamicContentStore as Ie } from "../stores/dynamic-content.js";
26
26
  import { useEditorStore as w } from "../stores/editor.js";
27
- import { usePreviewStore as Ie } from "../stores/preview.js";
28
- import { useSaveValidationStore as Le } from "../stores/save-validation.js";
27
+ import { usePreviewStore as Le } from "../stores/preview.js";
28
+ import { useSaveValidationStore as Ue } from "../stores/save-validation.js";
29
29
  import { useTemplateStore as Ae } from "../stores/template.js";
30
- import { useUnsubscribeStore as Oe } from "../stores/unsubscribe.js";
31
- import { readTrackFloor as $ } from "../utils/linkTrackingIds.js";
32
- const lt = /* @__PURE__ */ ie({
30
+ import { useUnsubscribeStore as Be } from "../stores/unsubscribe.js";
31
+ import { readTrackFloor as H } from "../utils/linkTrackingIds.js";
32
+ const ut = /* @__PURE__ */ ie({
33
33
  __name: "Guido",
34
34
  props: {
35
35
  config: null,
36
36
  ready: { type: Boolean, default: !0 }
37
37
  },
38
38
  emits: ["dynamic-content:open", "back", "save:start", "save:complete", "on-change", "ready", "onboarding:finished", "test-email:click"],
39
- setup(z, { expose: q, emit: r }) {
40
- const a = z, K = m(
39
+ setup(q, { expose: K, emit: r }) {
40
+ const s = q, j = m(
41
41
  () => import("./organisms/email-preview/PreviewContainer.vue.js")
42
- ), j = m(
43
- () => import("./organisms/onboarding/OnboardingWrapper.vue.js")
44
42
  ), J = m(
45
- () => import("./organisms/extensions/recommendation/AssignStrategyDrawer.vue.js")
43
+ () => import("./organisms/onboarding/OnboardingWrapper.vue.js")
46
44
  ), Q = m(
45
+ () => import("./organisms/extensions/recommendation/AssignStrategyDrawer.vue.js")
46
+ ), X = m(
47
47
  () => import("./organisms/extensions/recommendation/RemoveStrategyModal.vue.js")
48
- ), C = V(), X = m(
48
+ ), Y = m(
49
49
  () => import("./organisms/extensions/recommendation/LegacyStrategyUpdatedModal.vue.js")
50
- ), f = V(), y = Re(), D = Oe(), o = Me();
51
- a.ready && o.init(a.config);
52
- const s = w(), Y = Ie(), l = p(() => s.hasChanges), { isTestPartner: Z } = pe(), { isEnabled: ee } = fe(), k = () => {
50
+ ), D = G(), f = G(), y = Ie(), C = Be(), o = Te();
51
+ s.ready && o.init(s.config);
52
+ const c = w(), Z = Le(), l = p(() => c.hasChanges), { isTestPartner: ee } = fe(), { isEnabled: te, loadRollout: k } = ye(), R = () => {
53
53
  var t;
54
- if (!s.isNormalMode) {
55
- console.debug("guido:save:silent:blocked", {
56
- isVersionHistoryOpen: s.isVersionHistoryOpen,
57
- isAccessibilityTestingOpen: s.isAccessibilityTestingOpen
58
- });
59
- return;
60
- }
61
- return (t = C.value) == null ? void 0 : t.saveSilent();
62
- }, T = (t) => {
63
- s.loadingStatus = t;
54
+ return (t = D.value) == null ? void 0 : t.handleSave(!0);
55
+ }, F = (t) => {
56
+ c.loadingStatus = t;
64
57
  };
65
- de(), ue();
58
+ me(), pe();
66
59
  const g = () => {
67
60
  var t, e;
68
61
  return {
@@ -70,18 +63,18 @@ const lt = /* @__PURE__ */ ie({
70
63
  userId: o.userId,
71
64
  username: o.username,
72
65
  partnerName: o.partnerName,
73
- savedModulesFolderName: ((t = o.editor) == null ? void 0 : t.savedModulesFolderName) || G.SAVED_MODULES,
74
- defaultModulesFolderName: ((e = o.editor) == null ? void 0 : e.defaultModulesFolderName) || G.DEFAULT_MODULES
66
+ savedModulesFolderName: ((t = o.editor) == null ? void 0 : t.savedModulesFolderName) || z.SAVED_MODULES,
67
+ defaultModulesFolderName: ((e = o.editor) == null ? void 0 : e.defaultModulesFolderName) || z.DEFAULT_MODULES
75
68
  };
76
- }, { initPlugin: F, preloadRuntime: M } = ye(), { runExclusive: R, beginMount: I, isCurrentMount: S } = me();
69
+ }, { initPlugin: M, preloadRuntime: T } = ge(), { runExclusive: I, beginMount: L, isCurrentMount: S } = le();
77
70
  let u = 0;
78
- const { getDefaultTemplate: L } = Fe(), { cloneTimersOnSave: A, hasTimerBlocks: O } = ge(), te = p(() => {
71
+ const { getDefaultTemplate: U } = Me(), { cloneTimersOnSave: A, hasTimerBlocks: B } = Se(), oe = p(() => {
79
72
  var t;
80
73
  return !((t = o.ui) != null && t.showHeader);
81
- }), oe = p(() => o.isFeatureEnabled("reusableRecommendationStrategy")), ne = p(
74
+ }), ne = p(() => o.isFeatureEnabled("reusableRecommendationStrategy")), re = p(
82
75
  () => !!E().recommendationConfigs.strategyId
83
76
  );
84
- le({
77
+ ue({
85
78
  onBack: () => {
86
79
  console.debug("guido:back"), r("back");
87
80
  },
@@ -96,72 +89,72 @@ const lt = /* @__PURE__ */ ie({
96
89
  console.debug("guido:test-email:click"), r("test-email:click");
97
90
  }
98
91
  });
99
- const U = (t) => {
92
+ const N = (t) => {
100
93
  console.debug("dynamic-content:close", t), y.setSelectedDynamicContent(t), document.dispatchEvent(new CustomEvent("dynamic-content:close", { detail: t }));
101
- }, N = () => {
94
+ }, P = () => {
102
95
  console.debug("dynamic-content:close", "Without Data"), document.dispatchEvent(new CustomEvent("dynamic-content:close", { detail: { text: "", value: "" } }));
103
96
  };
104
- H(() => l.value, () => {
97
+ V(() => l.value, () => {
105
98
  r("on-change", l.value);
106
99
  });
107
100
  const v = (t) => {
108
- const e = t, { attribute: i, position: d } = e.detail;
109
- console.debug("dynamic-content:open", e.detail), r("dynamic-content:open", i, d);
101
+ const e = t, { attribute: a, position: d } = e.detail;
102
+ console.debug("dynamic-content:open", e.detail), r("dynamic-content:open", a, d);
110
103
  };
111
- let c = null;
104
+ let i = null;
112
105
  const b = () => {
113
106
  var e;
114
- const t = document.querySelector(Se);
107
+ const t = document.querySelector(ve);
115
108
  (e = f.value) == null || e.style.setProperty("--ribbon-offset", `${(t == null ? void 0 : t.offsetHeight) ?? 0}px`);
116
109
  }, h = async () => {
117
110
  var t;
118
111
  try {
119
- o.initialized || o.init(a.config), s.templateId = o.templateId;
120
- const e = o.template, i = (e == null ? void 0 : e.html) || "", d = (e == null ? void 0 : e.css) || "", B = (e == null ? void 0 : e.preselectedDynamicContent) || [];
121
- D.selectedUnsubscribePages = (e == null ? void 0 : e.selectedUnsubscribePages) || [];
122
- const P = ((t = e == null ? void 0 : e.migration) == null ? void 0 : t.recommendationConfigs) ?? {}, _ = o.isFeatureEnabled("linkTrackingIds"), x = {
112
+ o.initialized || o.init(s.config), c.templateId = o.templateId;
113
+ const e = o.template, a = (e == null ? void 0 : e.html) || "", d = (e == null ? void 0 : e.css) || "", _ = (e == null ? void 0 : e.preselectedDynamicContent) || [];
114
+ C.selectedUnsubscribePages = (e == null ? void 0 : e.selectedUnsubscribePages) || [];
115
+ const O = ((t = e == null ? void 0 : e.migration) == null ? void 0 : t.recommendationConfigs) ?? {}, x = o.isFeatureEnabled("linkTrackingIds"), W = {
123
116
  partnerName: o.partnerName,
124
117
  campaignUrls: e == null ? void 0 : e.recommendationCampaignUrls,
125
118
  rrsEnabled: o.isFeatureEnabled("reusableRecommendationStrategy")
126
119
  };
127
120
  let n = {
128
- html: i && await W(i, P, x),
121
+ html: a && await $(a, O, W),
129
122
  css: d
130
123
  };
131
- n.html || (n = await L(), n.html = await W(n.html, P, x));
132
- const re = _ ? $(n.html, (e == null ? void 0 : e.trackIdCounter) || 0) : 0;
133
- O(n.html) && (n.html = await A(n.html)), _ && (s.trackIdSessionFloor = Math.max(re, $(n.html)));
124
+ n.html || (n = await U(), n.html = await $(n.html, O, W));
125
+ const ae = x ? H(n.html, (e == null ? void 0 : e.trackIdCounter) || 0) : 0;
126
+ B(n.html) && (n.html = await A(n.html)), x && (c.trackIdSessionFloor = Math.max(ae, H(n.html)));
134
127
  const se = {
135
- preselectedDynamicContentList: B,
128
+ preselectedDynamicContentList: _,
136
129
  onReady: () => {
137
130
  console.debug("guido:ready"), r("ready");
138
131
  }
139
132
  };
140
- u = I(), await F(n, g(), se), y.selectedDynamicContentList = B;
133
+ u = L(), await M(n, g(), se), y.selectedDynamicContentList = _;
141
134
  } catch (e) {
142
135
  console.error("Failed to initialize Stripo editor:", e);
143
136
  }
144
137
  };
145
- return ae(async () => {
138
+ return ce(async () => {
146
139
  var e;
147
- console.debug("Guido says happy coding 🎉"), console.debug("🚗 Ka-Chow"), E().$reset(), w().$reset(), Ae().$reset(), Le().$reset(), b();
140
+ console.debug("Guido says happy coding 🎉"), console.debug("🚗 Ka-Chow"), E().$reset(), w().$reset(), Ae().$reset(), Ue().$reset(), k(), b();
148
141
  const t = (e = f.value) == null ? void 0 : e.parentElement;
149
- if (t && (c = new ResizeObserver(b), c.observe(t)), M(), a.ready)
142
+ if (t && (i = new ResizeObserver(b), i.observe(t)), T(), s.ready)
150
143
  await h();
151
144
  else {
152
- const i = H(() => a.ready, (d) => {
153
- d && (i(), h());
145
+ const a = V(() => s.ready, (d) => {
146
+ d && (a(), h());
154
147
  });
155
148
  }
156
149
  document.addEventListener("dynamic-content:open", v);
157
- }), ce(() => {
158
- if (c == null || c.disconnect(), document.removeEventListener("dynamic-content:open", v), E().disposeStrategyPageReturn(), S(u))
150
+ }), de(() => {
151
+ if (i == null || i.disconnect(), document.removeEventListener("dynamic-content:open", v), E().disposeStrategyPageReturn(), S(u))
159
152
  try {
160
153
  w().isStripoInitialized = !1;
161
154
  } catch (t) {
162
155
  console.debug("Failed to close the editor readiness gate on unmount", t);
163
156
  }
164
- R(async () => {
157
+ I(async () => {
165
158
  if (S(u))
166
159
  try {
167
160
  window.UIEditor.removeEditor();
@@ -169,17 +162,17 @@ const lt = /* @__PURE__ */ ie({
169
162
  console.debug("Failed to remove Stripo editor: No editor found");
170
163
  }
171
164
  }), o.reset();
172
- }), q({
165
+ }), K({
173
166
  dynamicContent: {
174
- insert: U,
175
- close: N
167
+ insert: N,
168
+ close: P
176
169
  },
177
170
  hasChanges: l,
178
- saveSilent: k,
179
- setLoading: T
180
- }), { __sfc: !0, PreviewContainer: K, OnboardingWrapper: j, AssignStrategyDrawer: J, RemoveStrategyModal: Q, autoSaveControllerRef: C, LegacyStrategyUpdatedModal: X, wrapperRef: f, dynamicContentStore: y, unsubscribeStore: D, props: a, configStore: o, editorStore: s, previewStore: Y, hasChanges: l, isTestPartner: Z, isSaveValidationEnabled: ee, saveSilent: k, setLoading: T, emit: r, buildMetadata: g, initPlugin: F, preloadRuntime: M, runExclusive: R, beginMount: I, isCurrentMount: S, mountGeneration: u, getDefaultTemplate: L, cloneTimersOnSave: A, hasTimerBlocks: O, noHeader: te, isRrsEnabled: oe, hasAssignedStrategy: ne, insertDynamicContent: U, closeDynamicContent: N, handleDynamicContentOpen: v, ribbonObserver: c, updateRibbonOffset: b, startEditor: h, AutoSaveController: ve, AuthErrorModal: be, Toaster: he, FilterSelectionDrawer: Ee, HeaderWrapper: we, LoadingWrapper: Ce, SaveAsTemplateDrawer: De, UnsubscribeWrapper: ke, ValidationErrorDrawer: Te };
171
+ saveSilent: R,
172
+ setLoading: F
173
+ }), { __sfc: !0, PreviewContainer: j, OnboardingWrapper: J, AssignStrategyDrawer: Q, RemoveStrategyModal: X, LegacyStrategyUpdatedModal: Y, headerWrapperRef: D, wrapperRef: f, dynamicContentStore: y, unsubscribeStore: C, props: s, configStore: o, editorStore: c, previewStore: Z, hasChanges: l, isTestPartner: ee, isSaveValidationEnabled: te, loadRollout: k, saveSilent: R, setLoading: F, emit: r, buildMetadata: g, initPlugin: M, preloadRuntime: T, runExclusive: I, beginMount: L, isCurrentMount: S, mountGeneration: u, getDefaultTemplate: U, cloneTimersOnSave: A, hasTimerBlocks: B, noHeader: oe, isRrsEnabled: ne, hasAssignedStrategy: re, insertDynamicContent: N, closeDynamicContent: P, handleDynamicContentOpen: v, ribbonObserver: i, updateRibbonOffset: b, startEditor: h, AutoSaveController: be, AuthErrorModal: he, Toaster: Ee, FilterSelectionDrawer: we, HeaderWrapper: De, LoadingWrapper: Ce, SaveAsTemplateDrawer: ke, UnsubscribeWrapper: Re, ValidationErrorDrawer: Fe };
181
174
  }
182
175
  });
183
176
  export {
184
- lt as default
177
+ ut as default
185
178
  };
@@ -1,24 +1,15 @@
1
- import { defineComponent as i } from "vue";
2
- import { useAutoSave as l } from "../../composables/useAutoSave.js";
3
- import { useSave as m } from "../../composables/useSave.js";
4
- import { useSaveValidationRollout as c } from "../../composables/useSaveValidationRollout.js";
5
- import { useToaster as p } from "../../composables/useToaster.js";
6
- const b = /* @__PURE__ */ i({
1
+ import { defineComponent as n } from "vue";
2
+ import { useAutoSave as u } from "../../composables/useAutoSave.js";
3
+ import { useSave as i } from "../../composables/useSave.js";
4
+ import { useSaveValidationRollout as l } from "../../composables/useSaveValidationRollout.js";
5
+ import { useConfigStore as m } from "../../stores/config.js";
6
+ const d = /* @__PURE__ */ n({
7
7
  __name: "AutoSaveController",
8
- setup(v, { expose: n }) {
9
- const { save: e, saveRawOnly: t } = m(), { isEnabled: o } = c(), { handleError: r } = p(), a = () => o.value ? t() : e(!1, !0);
10
- l(a);
11
- const s = async () => {
12
- try {
13
- return await e(!0);
14
- } catch (u) {
15
- r(u, "Failed to save template");
16
- return;
17
- }
18
- };
19
- return n({ saveSilent: s }), { __sfc: !0, save: e, saveRawOnly: t, isEnabled: o, handleError: r, backgroundSave: a, saveSilent: s };
8
+ setup(f) {
9
+ const { save: e, saveRawOnly: t } = i(), { isEnabled: r } = l(), a = m(), o = () => r.value && a.allowSaveWithErrors, s = () => o() ? t() : e(!1, !0);
10
+ return u(s, { clearsChanges: () => !o() }), { __sfc: !0, save: e, saveRawOnly: t, isEnabled: r, configStore: a, isRawAutosave: o, backgroundSave: s };
20
11
  }
21
12
  });
22
13
  export {
23
- b as default
14
+ d as default
24
15
  };
@@ -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 a from "./EditorActions.vue2.js";
1
+ import l from "./EditorActions.vue2.js";
2
2
  /* empty css */
3
- import r 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 && t.hasContentOnTheLeft ? e("div", { staticClass: "editor-actions__divider" }) : i._e(), (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, { staticClass: "ml-3", attrs: { id: "guido__save-button", "disabled-status": !t.isSaving && t.editorStore.isSaveButtonDisabled, "label-text": t.saveLabel, "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", "disabled-status": !t.isSaving && t.editorStore.isSaveButtonDisabled, "label-text": t.saveLabel, "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__ */ r(
13
- a,
14
- d,
12
+ }, p = [], c = /* @__PURE__ */ d(
15
13
  l,
14
+ u,
15
+ p,
16
16
  !1,
17
17
  null,
18
- "f36a9d0c"
18
+ "baf7a5dd"
19
19
  );
20
- const p = c.exports;
20
+ const v = c.exports;
21
21
  export {
22
- p as default
22
+ v as default
23
23
  };