@useinsider/guido 3.22.0-beta.0af1132 → 3.22.0-beta.3f91a42

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 (87) hide show
  1. package/README.md +0 -1
  2. package/dist/@types/config/schemas.js +10 -11
  3. package/dist/components/Guido.vue.js +4 -4
  4. package/dist/components/Guido.vue2.js +92 -103
  5. package/dist/components/organisms/AutoSaveController.vue2.js +10 -20
  6. package/dist/components/organisms/header/AutoSaveToggle.vue.js +22 -0
  7. package/dist/components/organisms/header/AutoSaveToggle.vue2.js +19 -0
  8. package/dist/components/organisms/header/EditorActions.vue.js +13 -13
  9. package/dist/components/organisms/header/EditorActions.vue2.js +73 -58
  10. package/dist/components/organisms/header/HeaderWrapper.vue.js +6 -6
  11. package/dist/components/organisms/header/HeaderWrapper.vue2.js +17 -9
  12. package/dist/components/organisms/header/LeftSlot.vue.js +1 -1
  13. package/dist/components/organisms/header/LeftSlot.vue2.js +23 -28
  14. package/dist/components/organisms/header/MiddleSlot.vue.js +4 -4
  15. package/dist/components/organisms/header/MiddleSlot.vue2.js +7 -8
  16. package/dist/components/organisms/header/RightSlot.vue.js +10 -11
  17. package/dist/components/organisms/header/RightSlot.vue2.js +18 -13
  18. package/dist/components/organisms/onboarding/OnboardingWrapper.vue.js +12 -12
  19. package/dist/components/organisms/onboarding/OnboardingWrapper.vue2.js +35 -60
  20. package/dist/composables/useCustomInterfaceAppearance.js +41 -42
  21. package/dist/config/i18n/en/labels.json.js +4 -36
  22. package/dist/config/i18n/en/tooltips.json.js +1 -2
  23. package/dist/extensions/Blocks/Items/controls/button/link.js +14 -17
  24. package/dist/extensions/Blocks/Items/controls/cardComposition.js +14 -17
  25. package/dist/extensions/Blocks/Items/controls/image/link.js +14 -17
  26. package/dist/extensions/Blocks/Items/controls/name/trimming.js +9 -10
  27. package/dist/extensions/Blocks/Items/controls/price/currencyLocation.js +24 -25
  28. package/dist/extensions/Blocks/Items/controls/price/currencySymbol.js +12 -13
  29. package/dist/extensions/Blocks/Items/controls/price/formattedPrice.js +29 -30
  30. package/dist/extensions/Blocks/Items/controls/price/hideDiscount.js +15 -16
  31. package/dist/extensions/Blocks/Items/controls/price/priceOrientation.js +25 -26
  32. package/dist/extensions/Blocks/Items/controls/price/singlePrice.js +27 -28
  33. package/dist/extensions/Blocks/Items/controls/settingsControl.js +75 -80
  34. package/dist/extensions/Blocks/Recommendation/controls/cardBackground/index.js +3 -3
  35. package/dist/extensions/Blocks/Recommendation/controls/cardComposition/index.js +7 -7
  36. package/dist/extensions/Blocks/Recommendation/controls/customAttribute/textTrim.js +13 -13
  37. package/dist/extensions/Blocks/Recommendation/controls/main/index.js +121 -116
  38. package/dist/extensions/Blocks/Recommendation/controls/name/textTrim.js +5 -5
  39. package/dist/extensions/Blocks/Recommendation/controls/omnibusDiscount/textAfter.js +8 -8
  40. package/dist/extensions/Blocks/Recommendation/controls/omnibusDiscount/textBefore.js +15 -15
  41. package/dist/extensions/Blocks/Recommendation/controls/omnibusPrice/textAfter.js +12 -12
  42. package/dist/extensions/Blocks/Recommendation/controls/omnibusPrice/textBefore.js +10 -10
  43. package/dist/extensions/Blocks/Recommendation/controls/spacing/index.js +1 -1
  44. package/dist/extensions/Blocks/common-control.js +62 -55
  45. package/dist/guido.css +1 -1
  46. package/dist/package.json.js +1 -1
  47. package/dist/sprite.svg +0 -10
  48. package/dist/src/@types/config/schemas.d.ts +0 -2
  49. package/dist/src/components/organisms/AutoSaveController.vue.d.ts +1 -19
  50. package/dist/src/components/organisms/header/HeaderWrapper.vue.d.ts +19 -1
  51. package/dist/src/components/organisms/header/RightSlot.vue.d.ts +19 -1
  52. package/dist/src/composables/useActionsApi.d.ts +2 -2
  53. package/dist/src/composables/useConfig.d.ts +0 -2
  54. package/dist/src/extensions/Blocks/Items/controls/cardComposition.d.ts +0 -1
  55. package/dist/src/extensions/Blocks/Recommendation/controls/main/index.d.ts +3 -2
  56. package/dist/src/extensions/Blocks/common-control.d.ts +2 -0
  57. package/dist/src/stores/autosave.d.ts +1 -73
  58. package/dist/src/stores/config.d.ts +0 -20
  59. package/dist/src/stores/editor.d.ts +0 -109
  60. package/dist/src/stores/onboarding.d.ts +33 -964
  61. package/dist/src/stores/version-history.d.ts +1 -1
  62. package/dist/src/utils/templatePreparation.d.ts +1 -1
  63. package/dist/src/utils/timeUtil.d.ts +8 -5
  64. package/dist/static/styles/variables.css.js +0 -2
  65. package/dist/stores/autosave.js +7 -12
  66. package/dist/stores/editor.js +3 -8
  67. package/dist/stores/onboarding.js +22 -48
  68. package/dist/utils/timeUtil.js +17 -6
  69. package/package.json +1 -1
  70. package/dist/components/organisms/header/AutoSaveStatus.vue.js +0 -17
  71. package/dist/components/organisms/header/AutoSaveStatus.vue2.js +0 -25
  72. package/dist/components/organisms/header/EditorActionsMenu.vue.js +0 -20
  73. package/dist/components/organisms/header/EditorActionsMenu.vue2.js +0 -99
  74. package/dist/components/organisms/header/accessibility/AccessibilityToolbar.vue.js +0 -18
  75. package/dist/components/organisms/header/accessibility/AccessibilityToolbar.vue2.js +0 -37
  76. package/dist/components/organisms/header/accessibility/ColorVisionSelect.vue.js +0 -22
  77. package/dist/components/organisms/header/accessibility/ColorVisionSelect.vue2.js +0 -48
  78. package/dist/components/organisms/onboarding/EditorTabBarOnboarding.vue.js +0 -19
  79. package/dist/components/organisms/onboarding/EditorTabBarOnboarding.vue2.js +0 -90
  80. package/dist/composables/useAccessibilityApi.js +0 -51
  81. package/dist/src/components/organisms/header/EditorActionsMenu.vue.d.ts +0 -2
  82. package/dist/src/components/organisms/header/accessibility/AccessibilityToolbar.vue.d.ts +0 -2
  83. package/dist/src/components/organisms/header/accessibility/ColorVisionSelect.vue.d.ts +0 -2
  84. package/dist/src/components/organisms/onboarding/EditorTabBarOnboarding.vue.d.ts +0 -2
  85. package/dist/src/composables/useAccessibilityApi.d.ts +0 -13
  86. package/dist/static/styles/components/accessibility.css.js +0 -234
  87. /package/dist/src/components/organisms/header/{AutoSaveStatus.vue.d.ts → AutoSaveToggle.vue.d.ts} +0 -0
package/README.md CHANGED
@@ -166,7 +166,6 @@ const config: GuidoConfigInput = {
166
166
  allowlistEnabled?: boolean, // Default: false - Pre-save domain-allowlist check (opt-in). Guido self-serves the block toaster (role lookup, deep-link, copy from window.trans).
167
167
  allowSaveWithErrors?: boolean, // Default: true - Allow the validation drawer's "Save and Continue" soft-save. Set false to hard-block invalid saves (transactional + unsubscribe pages).
168
168
  reusableRecommendationStrategy?: boolean, // Default: false - Assign an RRS strategy to recommendation blocks instead of per-block algorithm/filters/shuffle/product-count settings.
169
- accessibilityTesting?: boolean, // Default: false - Show the Accessibility Test entry in the header kebab menu (Stripo's checker: contrast, image alternatives, colour-vision simulation) and the tab-bar onboarding tour that points at it.
170
169
  },
171
170
 
172
171
  // Optional: Callbacks
@@ -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
- "8422eef8"
15
+ "f2154cb6"
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,73 +1,63 @@
1
- import { defineComponent as le, defineAsyncComponent as l, ref as W, computed as f, watch as G, onMounted as ue, onUnmounted as pe } from "vue";
2
- import { useCortexBlueprintBridge as fe } from "../composables/useCortexBlueprintBridge.js";
3
- import { useEditorLock as ye } from "../composables/useEditorLock.js";
4
- import { startEditorOpenMetrics as ge } from "../composables/useEditorOpenMetrics.js";
5
- import { provideGuidoActions as ve } from "../composables/useGuidoActions.js";
6
- import { useGuidoStateBridge as Se } from "../composables/useGuidoStateBridge.js";
7
- import { usePartner as be } from "../composables/usePartner.js";
8
- import { useSaveValidationRollout as he } from "../composables/useSaveValidationRollout.js";
9
- import { useStripo as Ee } from "../composables/useStripo.js";
10
- import { useTimerClone as we } from "../composables/useTimerClone.js";
11
- import { useToaster as Te } from "../composables/useToaster.js";
12
- import { useTranslations as ke } from "../composables/useTranslations.js";
13
- import { migrate as Ce } from "../config/migrator/index.js";
14
- import { ModuleFolderDefaults as $ } from "../enums/defaults.js";
15
- import { RIBBON_SELECTOR as De } from "../enums/onboarding.js";
16
- import { ToasterTypeOptions as Ie } from "../enums/toaster.js";
17
- import { useRecommendationExtensionStore as z, disposeStrategyPageReturnListeners as Fe } from "../extensions/Blocks/Recommendation/store/recommendation.js";
18
- import { disposeUnsubscribeListeners as Me } from "../extensions/Blocks/Unsubscribe/block.js";
19
- import Re from "./organisms/AutoSaveController.vue.js";
20
- import Le from "./organisms/base/AuthErrorModal.vue.js";
21
- import Oe from "./organisms/base/Toaster.vue.js";
22
- import Ue from "./organisms/extensions/recommendation/FilterSelectionDrawer.vue.js";
23
- import Ne from "./organisms/header/HeaderWrapper.vue.js";
24
- import _e from "./organisms/LoadingWrapper.vue.js";
25
- import Ae from "./organisms/save-as-template/SaveAsTemplateDrawer.vue.js";
26
- import Be from "./organisms/unsubscribe/UnsubscribeWrapper.vue.js";
27
- import Pe from "./organisms/validation/ValidationErrorDrawer.vue.js";
28
- import { useStripoApi as xe } from "../services/stripoApi.js";
29
- import { useConfigStore as He } from "../stores/config.js";
30
- import { useDynamicContentStore as Ve } from "../stores/dynamic-content.js";
1
+ import { defineComponent as de, defineAsyncComponent as l, ref as W, computed as f, watch as G, onMounted as me, onUnmounted as le } from "vue";
2
+ import { useCortexBlueprintBridge as ue } from "../composables/useCortexBlueprintBridge.js";
3
+ import { useEditorLock as pe } from "../composables/useEditorLock.js";
4
+ import { startEditorOpenMetrics as fe } from "../composables/useEditorOpenMetrics.js";
5
+ import { provideGuidoActions as ye } from "../composables/useGuidoActions.js";
6
+ import { useGuidoStateBridge as ge } from "../composables/useGuidoStateBridge.js";
7
+ import { usePartner as ve } from "../composables/usePartner.js";
8
+ import { useSaveValidationRollout as Se } from "../composables/useSaveValidationRollout.js";
9
+ import { useStripo as be } from "../composables/useStripo.js";
10
+ import { useTimerClone as he } from "../composables/useTimerClone.js";
11
+ import { migrate as Ee } from "../config/migrator/index.js";
12
+ import { ModuleFolderDefaults as H } from "../enums/defaults.js";
13
+ import { RIBBON_SELECTOR as we } from "../enums/onboarding.js";
14
+ import { useRecommendationExtensionStore as V, disposeStrategyPageReturnListeners as ke } from "../extensions/Blocks/Recommendation/store/recommendation.js";
15
+ import { disposeUnsubscribeListeners as Ce } from "../extensions/Blocks/Unsubscribe/block.js";
16
+ import De from "./organisms/AutoSaveController.vue.js";
17
+ import Ie from "./organisms/base/AuthErrorModal.vue.js";
18
+ import Fe from "./organisms/base/Toaster.vue.js";
19
+ import Me from "./organisms/extensions/recommendation/FilterSelectionDrawer.vue.js";
20
+ import Re from "./organisms/header/HeaderWrapper.vue.js";
21
+ import Te from "./organisms/LoadingWrapper.vue.js";
22
+ import Le from "./organisms/save-as-template/SaveAsTemplateDrawer.vue.js";
23
+ import Ue from "./organisms/unsubscribe/UnsubscribeWrapper.vue.js";
24
+ import Ne from "./organisms/validation/ValidationErrorDrawer.vue.js";
25
+ import { useStripoApi as _e } from "../services/stripoApi.js";
26
+ import { useConfigStore as Ae } from "../stores/config.js";
27
+ import { useDynamicContentStore as Be } from "../stores/dynamic-content.js";
31
28
  import { useEditorStore as w } from "../stores/editor.js";
32
- import { usePreviewStore as We } from "../stores/preview.js";
33
- import { useSaveValidationStore as Ge } from "../stores/save-validation.js";
34
- import { useTemplateStore as $e } from "../stores/template.js";
35
- import { useUnsubscribeStore as ze } from "../stores/unsubscribe.js";
36
- import { readTrackFloor as q } from "../utils/linkTrackingIds.js";
37
- const Ft = /* @__PURE__ */ le({
29
+ import { usePreviewStore as Oe } from "../stores/preview.js";
30
+ import { useSaveValidationStore as Pe } from "../stores/save-validation.js";
31
+ import { useTemplateStore as xe } from "../stores/template.js";
32
+ import { useUnsubscribeStore as We } from "../stores/unsubscribe.js";
33
+ import { readTrackFloor as $ } from "../utils/linkTrackingIds.js";
34
+ const ht = /* @__PURE__ */ de({
38
35
  __name: "Guido",
39
36
  props: {
40
37
  config: null,
41
38
  ready: { type: Boolean, default: !0 }
42
39
  },
43
40
  emits: ["dynamic-content:open", "back", "save:start", "save:complete", "on-change", "ready", "onboarding:finished", "test-email:click"],
44
- setup(K, { expose: j, emit: s }) {
45
- const a = K, n = ge(), J = l(
41
+ setup(z, { expose: q, emit: a }) {
42
+ const s = z, n = fe(), K = l(
46
43
  () => import("./organisms/email-preview/PreviewContainer.vue.js")
47
- ), Q = l(
44
+ ), j = l(
48
45
  () => import("./organisms/onboarding/OnboardingWrapper.vue.js")
49
- ), X = l(
46
+ ), J = l(
50
47
  () => import("./organisms/extensions/recommendation/AssignStrategyDrawer.vue.js")
51
- ), Y = l(
48
+ ), Q = l(
52
49
  () => import("./organisms/extensions/recommendation/RemoveStrategyModal.vue.js")
53
- ), T = W(), Z = l(
50
+ ), X = l(
54
51
  () => import("./organisms/extensions/recommendation/LegacyStrategyUpdatedModal.vue.js")
55
- ), y = W(), g = Ve(), k = ze(), o = He();
56
- a.ready && o.init(a.config);
57
- const c = w(), ee = We(), u = f(() => c.hasChanges), { isTestPartner: te } = be(), { isEnabled: oe, loadRollout: C } = he(), { showToaster: D } = Te(), I = ke(), F = () => {
52
+ ), k = W(), y = W(), g = Be(), C = We(), o = Ae();
53
+ s.ready && o.init(s.config);
54
+ const d = w(), Y = Oe(), u = f(() => d.hasChanges), { isTestPartner: Z } = ve(), { isEnabled: ee, loadRollout: D } = Se(), I = () => {
58
55
  var t;
59
- if (c.isVersionHistoryOpen) {
60
- console.debug("guido:save:silent:blocked", { isVersionHistoryOpen: !0 }), D({
61
- type: Ie.Warning,
62
- message: I("email-editor.save-blocked-outside-editor")
63
- });
64
- return;
65
- }
66
- return (t = T.value) == null ? void 0 : t.saveSilent();
67
- }, M = (t) => {
68
- c.loadingStatus = t;
56
+ return (t = k.value) == null ? void 0 : t.handleSave(!0);
57
+ }, F = (t) => {
58
+ d.loadingStatus = t;
69
59
  };
70
- fe(), Se();
60
+ ue(), ge();
71
61
  const v = () => {
72
62
  var t, e;
73
63
  return {
@@ -75,108 +65,107 @@ const Ft = /* @__PURE__ */ le({
75
65
  userId: o.userId,
76
66
  username: o.username,
77
67
  partnerName: o.partnerName,
78
- savedModulesFolderName: ((t = o.editor) == null ? void 0 : t.savedModulesFolderName) || $.SAVED_MODULES,
79
- defaultModulesFolderName: ((e = o.editor) == null ? void 0 : e.defaultModulesFolderName) || $.DEFAULT_MODULES
68
+ savedModulesFolderName: ((t = o.editor) == null ? void 0 : t.savedModulesFolderName) || H.SAVED_MODULES,
69
+ defaultModulesFolderName: ((e = o.editor) == null ? void 0 : e.defaultModulesFolderName) || H.DEFAULT_MODULES
80
70
  };
81
- }, { initPlugin: R, preloadRuntime: L } = Ee(n), { runExclusive: O, beginMount: U, isCurrentMount: S } = ye();
71
+ }, { initPlugin: M, preloadRuntime: R } = be(n), { runExclusive: T, beginMount: L, isCurrentMount: S } = pe();
82
72
  let p = 0;
83
- const { getDefaultTemplate: N } = xe(), { cloneTimersOnSave: _, hasTimerBlocks: A } = we(), re = f(() => {
73
+ const { getDefaultTemplate: U } = _e(), { cloneTimersOnSave: N, hasTimerBlocks: _ } = he(), te = f(() => {
84
74
  var t;
85
75
  return !((t = o.ui) != null && t.showHeader);
86
- }), ne = f(() => o.isFeatureEnabled("reusableRecommendationStrategy")), se = f(
87
- () => !!z().recommendationConfigs.strategyId
76
+ }), oe = f(() => o.isFeatureEnabled("reusableRecommendationStrategy")), re = f(
77
+ () => !!V().recommendationConfigs.strategyId
88
78
  );
89
- ve({
79
+ ye({
90
80
  onBack: () => {
91
- console.debug("guido:back"), s("back");
81
+ console.debug("guido:back"), a("back");
92
82
  },
93
83
  onSaveStart: () => {
94
- console.debug("guido:save:start"), s("save:start");
84
+ console.debug("guido:save:start"), a("save:start");
95
85
  },
96
86
  onSaveComplete: (t) => {
97
87
  const e = { ...t, metadata: v() };
98
- console.debug("guido:save:complete", e), s("save:complete", e);
88
+ console.debug("guido:save:complete", e), a("save:complete", e);
99
89
  },
100
90
  onTestEmailClick: () => {
101
- console.debug("guido:test-email:click"), s("test-email:click");
91
+ console.debug("guido:test-email:click"), a("test-email:click");
102
92
  }
103
93
  });
104
- const B = (t) => {
94
+ const A = (t) => {
105
95
  console.debug("dynamic-content:close", t), g.setSelectedDynamicContent(t), document.dispatchEvent(new CustomEvent("dynamic-content:close", { detail: t }));
106
- }, P = () => {
96
+ }, B = () => {
107
97
  console.debug("dynamic-content:close", "Without Data"), document.dispatchEvent(new CustomEvent("dynamic-content:close", { detail: { text: "", value: "" } }));
108
98
  };
109
99
  G(() => u.value, () => {
110
- s("on-change", u.value);
100
+ a("on-change", u.value);
111
101
  });
112
102
  const b = (t) => {
113
103
  const e = t, { attribute: i, position: m } = e.detail;
114
- console.debug("dynamic-content:open", e.detail), s("dynamic-content:open", i, m);
104
+ console.debug("dynamic-content:open", e.detail), a("dynamic-content:open", i, m);
115
105
  };
116
- let d = null;
106
+ let c = null;
117
107
  const h = () => {
118
108
  var e;
119
- const t = document.querySelector(De);
109
+ const t = document.querySelector(we);
120
110
  (e = y.value) == null || e.style.setProperty("--ribbon-offset", `${(t == null ? void 0 : t.offsetHeight) ?? 0}px`);
121
111
  }, E = async () => {
122
112
  var t;
123
113
  n.mark("host_ready");
124
114
  try {
125
- o.initialized || o.init(a.config), c.templateId = o.templateId, n.setContext({
115
+ o.initialized || o.init(s.config), d.templateId = o.templateId, n.setContext({
126
116
  partnerName: o.partnerName,
127
117
  productType: o.productType,
128
118
  templateId: o.templateId,
129
119
  variationId: o.variationId
130
120
  });
131
- const e = o.template, i = (e == null ? void 0 : e.html) || "", m = (e == null ? void 0 : e.css) || "", x = (e == null ? void 0 : e.preselectedDynamicContent) || [];
132
- k.selectedUnsubscribePages = (e == null ? void 0 : e.selectedUnsubscribePages) || [];
133
- const ie = ((t = e == null ? void 0 : e.migration) == null ? void 0 : t.recommendationConfigs) ?? {}, H = o.isFeatureEnabled("linkTrackingIds"), ae = {
121
+ const e = o.template, i = (e == null ? void 0 : e.html) || "", m = (e == null ? void 0 : e.css) || "", O = (e == null ? void 0 : e.preselectedDynamicContent) || [];
122
+ C.selectedUnsubscribePages = (e == null ? void 0 : e.selectedUnsubscribePages) || [];
123
+ const ne = ((t = e == null ? void 0 : e.migration) == null ? void 0 : t.recommendationConfigs) ?? {}, P = o.isFeatureEnabled("linkTrackingIds"), ae = {
134
124
  partnerName: o.partnerName,
135
125
  campaignUrls: e == null ? void 0 : e.recommendationCampaignUrls,
136
126
  rrsEnabled: o.isFeatureEnabled("reusableRecommendationStrategy")
137
- }, V = (me) => n.timed(
127
+ }, x = (ce) => n.timed(
138
128
  "migration",
139
- () => Ce(me, ie, ae)
129
+ () => Ee(ce, ne, ae)
140
130
  );
141
131
  let r = {
142
- html: i && await V(i),
132
+ html: i && await x(i),
143
133
  css: m
144
134
  };
145
- r.html || (r = await n.timed("default_template", () => N()), r.html = await V(r.html));
146
- const ce = H ? q(r.html, (e == null ? void 0 : e.trackIdCounter) || 0) : 0;
147
- A(r.html) && (r.html = await n.timed("timer_clone", () => _(r.html))), H && (c.trackIdSessionFloor = Math.max(ce, q(r.html)));
148
- const de = {
149
- preselectedDynamicContentList: x,
135
+ r.html || (r = await n.timed("default_template", () => U()), r.html = await x(r.html));
136
+ const ie = P ? $(r.html, (e == null ? void 0 : e.trackIdCounter) || 0) : 0;
137
+ _(r.html) && (r.html = await n.timed("timer_clone", () => N(r.html))), P && (d.trackIdSessionFloor = Math.max(ie, $(r.html)));
138
+ const se = {
139
+ preselectedDynamicContentList: O,
150
140
  onReady: () => {
151
- console.debug("guido:ready"), s("ready");
141
+ console.debug("guido:ready"), a("ready");
152
142
  }
153
143
  };
154
- p = U(), await R(r, v(), de), g.selectedDynamicContentList = x;
144
+ p = L(), await M(r, v(), se), g.selectedDynamicContentList = O;
155
145
  } catch (e) {
156
146
  console.error("Failed to initialize Stripo editor:", e), n.markFailed();
157
147
  }
158
148
  };
159
- return ue(async () => {
149
+ return me(async () => {
160
150
  var e;
161
- console.debug("Guido says happy coding 🎉"), console.debug("🚗 Ka-Chow"), z().$reset(), w().$reset(), $e().$reset(), Ge().$reset(), C(), h();
151
+ console.debug("Guido says happy coding 🎉"), console.debug("🚗 Ka-Chow"), V().$reset(), w().$reset(), xe().$reset(), Pe().$reset(), D(), h();
162
152
  const t = (e = y.value) == null ? void 0 : e.parentElement;
163
- if (t && (d = new ResizeObserver(h), d.observe(t)), L(), a.ready)
153
+ if (t && (c = new ResizeObserver(h), c.observe(t)), R(), s.ready)
164
154
  await E();
165
155
  else {
166
- const i = G(() => a.ready, (m) => {
156
+ const i = G(() => s.ready, (m) => {
167
157
  m && (i(), E());
168
158
  });
169
159
  }
170
160
  document.addEventListener("dynamic-content:open", b);
171
- }), pe(() => {
172
- if (Me(), Fe(), n.dispose(), d == null || d.disconnect(), document.removeEventListener("dynamic-content:open", b), S(p))
161
+ }), le(() => {
162
+ if (Ce(), ke(), n.dispose(), c == null || c.disconnect(), document.removeEventListener("dynamic-content:open", b), S(p))
173
163
  try {
174
- const t = w();
175
- t.isStripoInitialized = !1, t.isAccessibilityTestingOpen = !1, t.imagesHidden = !1, t.colorVisionDeficiency = "";
164
+ w().isStripoInitialized = !1;
176
165
  } catch (t) {
177
166
  console.debug("Failed to close the editor readiness gate on unmount", t);
178
167
  }
179
- O(async () => {
168
+ T(async () => {
180
169
  if (S(p))
181
170
  try {
182
171
  window.UIEditor.removeEditor();
@@ -184,17 +173,17 @@ const Ft = /* @__PURE__ */ le({
184
173
  console.debug("Failed to remove Stripo editor: No editor found");
185
174
  }
186
175
  }), o.reset();
187
- }), j({
176
+ }), q({
188
177
  dynamicContent: {
189
- insert: B,
190
- close: P
178
+ insert: A,
179
+ close: B
191
180
  },
192
181
  hasChanges: u,
193
- saveSilent: F,
194
- setLoading: M
195
- }), { __sfc: !0, openMetrics: n, PreviewContainer: J, OnboardingWrapper: Q, AssignStrategyDrawer: X, RemoveStrategyModal: Y, autoSaveControllerRef: T, LegacyStrategyUpdatedModal: Z, wrapperRef: y, dynamicContentStore: g, unsubscribeStore: k, props: a, configStore: o, editorStore: c, previewStore: ee, hasChanges: u, isTestPartner: te, isSaveValidationEnabled: oe, loadRollout: C, showToaster: D, trans: I, saveSilent: F, setLoading: M, emit: s, buildMetadata: v, initPlugin: R, preloadRuntime: L, runExclusive: O, beginMount: U, isCurrentMount: S, mountGeneration: p, getDefaultTemplate: N, cloneTimersOnSave: _, hasTimerBlocks: A, noHeader: re, isRrsEnabled: ne, hasAssignedStrategy: se, insertDynamicContent: B, closeDynamicContent: P, handleDynamicContentOpen: b, ribbonObserver: d, updateRibbonOffset: h, startEditor: E, AutoSaveController: Re, AuthErrorModal: Le, Toaster: Oe, FilterSelectionDrawer: Ue, HeaderWrapper: Ne, LoadingWrapper: _e, SaveAsTemplateDrawer: Ae, UnsubscribeWrapper: Be, ValidationErrorDrawer: Pe };
182
+ saveSilent: I,
183
+ setLoading: F
184
+ }), { __sfc: !0, openMetrics: n, PreviewContainer: K, OnboardingWrapper: j, AssignStrategyDrawer: J, RemoveStrategyModal: Q, LegacyStrategyUpdatedModal: X, headerWrapperRef: k, wrapperRef: y, dynamicContentStore: g, unsubscribeStore: C, props: s, configStore: o, editorStore: d, previewStore: Y, hasChanges: u, isTestPartner: Z, isSaveValidationEnabled: ee, loadRollout: D, saveSilent: I, setLoading: F, emit: a, buildMetadata: v, initPlugin: M, preloadRuntime: R, runExclusive: T, beginMount: L, isCurrentMount: S, mountGeneration: p, getDefaultTemplate: U, cloneTimersOnSave: N, hasTimerBlocks: _, noHeader: te, isRrsEnabled: oe, hasAssignedStrategy: re, insertDynamicContent: A, closeDynamicContent: B, handleDynamicContentOpen: b, ribbonObserver: c, updateRibbonOffset: h, startEditor: E, AutoSaveController: De, AuthErrorModal: Ie, Toaster: Fe, FilterSelectionDrawer: Me, HeaderWrapper: Re, LoadingWrapper: Te, SaveAsTemplateDrawer: Le, UnsubscribeWrapper: Ue, ValidationErrorDrawer: Ne };
196
185
  }
197
186
  });
198
187
  export {
199
- Ft as default
188
+ ht as default
200
189
  };
@@ -1,25 +1,15 @@
1
- import { defineComponent as c } from "vue";
2
- import { useAutoSave as m } from "../../composables/useAutoSave.js";
3
- import { useSave as f } from "../../composables/useSave.js";
4
- import { useSaveValidationRollout as v } from "../../composables/useSaveValidationRollout.js";
5
- import { useToaster as p } from "../../composables/useToaster.js";
6
- import { useConfigStore as S } from "../../stores/config.js";
7
- const A = /* @__PURE__ */ c({
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({
8
7
  __name: "AutoSaveController",
9
- setup(d, { expose: u }) {
10
- const { save: e, saveRawOnly: t } = f(), { isEnabled: r } = v(), { handleError: a } = p(), s = S(), o = () => r.value && s.allowSaveWithErrors, n = () => o() ? t() : e(!1, !0);
11
- m(n, { clearsChanges: () => !o() });
12
- const i = async () => {
13
- try {
14
- return await e(!0);
15
- } catch (l) {
16
- a(l, "Failed to save template");
17
- return;
18
- }
19
- };
20
- return u({ saveSilent: i }), { __sfc: !0, save: e, saveRawOnly: t, isEnabled: r, handleError: a, configStore: s, isRawAutosave: o, backgroundSave: n, saveSilent: i };
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 };
21
11
  }
22
12
  });
23
13
  export {
24
- A as default
14
+ d as default
25
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
- "9a028d08"
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
  };