@useinsider/guido 3.20.1-beta.49b58ed → 3.20.1-beta.50850f4

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 (112) hide show
  1. package/README.md +0 -1
  2. package/dist/@types/config/schemas.js +10 -11
  3. package/dist/components/Guido.vue.js +2 -2
  4. package/dist/components/Guido.vue2.js +101 -114
  5. package/dist/components/organisms/AutoSaveController.vue2.js +9 -19
  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 +72 -57
  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 +8 -9
  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/composables/useLegacyStrategyConversion.js +16 -16
  22. package/dist/composables/useStripo.js +11 -10
  23. package/dist/config/i18n/en/labels.json.js +4 -36
  24. package/dist/config/i18n/en/tooltips.json.js +1 -2
  25. package/dist/extensions/Blocks/Items/block.js +43 -42
  26. package/dist/extensions/Blocks/Recommendation/controls/cardComposition/index.js +152 -150
  27. package/dist/extensions/Blocks/Recommendation/controls/customAttribute/textTrim.js +1 -2
  28. package/dist/extensions/Blocks/Recommendation/controls/main/currency.js +102 -78
  29. package/dist/extensions/Blocks/Recommendation/controls/main/index.js +309 -223
  30. package/dist/extensions/Blocks/Recommendation/controls/main/layoutOrientation.js +15 -13
  31. package/dist/extensions/Blocks/Recommendation/controls/main/pricePlacement.js +17 -12
  32. package/dist/extensions/Blocks/Recommendation/controls/main/productLayout.js +92 -84
  33. package/dist/extensions/Blocks/Recommendation/controls/main/utils.js +271 -251
  34. package/dist/extensions/Blocks/Recommendation/controls/mobileLayout/cssRules.js +23 -18
  35. package/dist/extensions/Blocks/Recommendation/controls/name/textTrim.js +1 -2
  36. package/dist/extensions/Blocks/Recommendation/controls/shared/textTrimCssRules.js +6 -6
  37. package/dist/extensions/Blocks/Recommendation/controls/spacing/index.js +12 -9
  38. package/dist/extensions/Blocks/Recommendation/extension.js +3 -2
  39. package/dist/extensions/Blocks/Recommendation/settingsPanel.js +3 -2
  40. package/dist/extensions/Blocks/Recommendation/store/recommendation.js +219 -205
  41. package/dist/extensions/Blocks/Recommendation/utils/blockRefresh.js +19 -0
  42. package/dist/extensions/Blocks/Recommendation/utils/followUpApply.js +20 -0
  43. package/dist/extensions/Blocks/Recommendation/utils/nodeConfigWriter.js +54 -38
  44. package/dist/extensions/Blocks/Recommendation/utils/strategyCommit.js +31 -35
  45. package/dist/guido.css +1 -1
  46. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js +271 -192
  47. package/dist/package.json.js +1 -1
  48. package/dist/sprite.svg +0 -10
  49. package/dist/src/@types/config/schemas.d.ts +0 -2
  50. package/dist/src/components/organisms/AutoSaveController.vue.d.ts +1 -19
  51. package/dist/src/components/organisms/header/HeaderWrapper.vue.d.ts +19 -1
  52. package/dist/src/components/organisms/header/RightSlot.vue.d.ts +19 -1
  53. package/dist/src/composables/useActionsApi.d.ts +2 -2
  54. package/dist/src/composables/useConfig.d.ts +0 -2
  55. package/dist/src/extensions/Blocks/Checkbox/controls/blockBackground/index.d.ts +1 -0
  56. package/dist/src/extensions/Blocks/CouponBlock/controls/index.d.ts +8 -0
  57. package/dist/src/extensions/Blocks/Items/controls/index.d.ts +40 -0
  58. package/dist/src/extensions/Blocks/RadioButton/controls/blockBackground/index.d.ts +1 -0
  59. package/dist/src/extensions/Blocks/Recommendation/controls/blockBackground/index.d.ts +1 -0
  60. package/dist/src/extensions/Blocks/Recommendation/controls/button/index.d.ts +11 -0
  61. package/dist/src/extensions/Blocks/Recommendation/controls/customAttribute/index.d.ts +7 -0
  62. package/dist/src/extensions/Blocks/Recommendation/controls/image/index.d.ts +2 -0
  63. package/dist/src/extensions/Blocks/Recommendation/controls/main/currency.d.ts +3 -0
  64. package/dist/src/extensions/Blocks/Recommendation/controls/main/index.d.ts +20 -3
  65. package/dist/src/extensions/Blocks/Recommendation/controls/main/productLayout.d.ts +1 -18
  66. package/dist/src/extensions/Blocks/Recommendation/controls/main/utils.d.ts +8 -0
  67. package/dist/src/extensions/Blocks/Recommendation/controls/mobileLayout/cssRules.d.ts +10 -6
  68. package/dist/src/extensions/Blocks/Recommendation/controls/name/index.d.ts +7 -0
  69. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/index.d.ts +7 -0
  70. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscount/index.d.ts +7 -0
  71. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPrice/index.d.ts +7 -0
  72. package/dist/src/extensions/Blocks/Recommendation/controls/price/index.d.ts +7 -0
  73. package/dist/src/extensions/Blocks/Recommendation/controls/shared/textTrimCssRules.d.ts +2 -3
  74. package/dist/src/extensions/Blocks/Recommendation/controls/spacing/index.d.ts +1 -1
  75. package/dist/src/extensions/Blocks/Recommendation/controls/title/index.d.ts +7 -0
  76. package/dist/src/extensions/Blocks/Recommendation/store/recommendation.d.ts +8 -1
  77. package/dist/src/extensions/Blocks/Recommendation/utils/blockRefresh.d.ts +19 -0
  78. package/dist/src/extensions/Blocks/Recommendation/utils/followUpApply.d.ts +18 -0
  79. package/dist/src/extensions/Blocks/Recommendation/utils/nodeConfigWriter.d.ts +10 -1
  80. package/dist/src/extensions/Blocks/_Boilerplate/controls/blockBackground/index.d.ts +1 -0
  81. package/dist/src/extensions/Blocks/controlFactories.d.ts +22 -0
  82. package/dist/src/stores/autosave.d.ts +1 -73
  83. package/dist/src/stores/config.d.ts +0 -20
  84. package/dist/src/stores/editor.d.ts +3 -110
  85. package/dist/src/stores/onboarding.d.ts +21 -953
  86. package/dist/src/stores/version-history.d.ts +1 -1
  87. package/dist/src/utils/timeUtil.d.ts +0 -5
  88. package/dist/static/styles/components/button.css.js +5 -0
  89. package/dist/static/styles/variables.css.js +0 -2
  90. package/dist/stores/autosave.js +7 -12
  91. package/dist/stores/editor.js +9 -7
  92. package/dist/stores/onboarding.js +21 -48
  93. package/dist/utils/timeUtil.js +17 -6
  94. package/package.json +3 -3
  95. package/dist/components/organisms/header/AutoSaveStatus.vue.js +0 -17
  96. package/dist/components/organisms/header/AutoSaveStatus.vue2.js +0 -25
  97. package/dist/components/organisms/header/EditorActionsMenu.vue.js +0 -20
  98. package/dist/components/organisms/header/EditorActionsMenu.vue2.js +0 -98
  99. package/dist/components/organisms/header/accessibility/AccessibilityToolbar.vue.js +0 -18
  100. package/dist/components/organisms/header/accessibility/AccessibilityToolbar.vue2.js +0 -37
  101. package/dist/components/organisms/header/accessibility/ColorVisionSelect.vue.js +0 -22
  102. package/dist/components/organisms/header/accessibility/ColorVisionSelect.vue2.js +0 -48
  103. package/dist/components/organisms/onboarding/EditorTabBarOnboarding.vue.js +0 -19
  104. package/dist/components/organisms/onboarding/EditorTabBarOnboarding.vue2.js +0 -90
  105. package/dist/composables/useAccessibilityApi.js +0 -45
  106. package/dist/src/components/organisms/header/EditorActionsMenu.vue.d.ts +0 -2
  107. package/dist/src/components/organisms/header/accessibility/AccessibilityToolbar.vue.d.ts +0 -2
  108. package/dist/src/components/organisms/header/accessibility/ColorVisionSelect.vue.d.ts +0 -2
  109. package/dist/src/components/organisms/onboarding/EditorTabBarOnboarding.vue.d.ts +0 -2
  110. package/dist/src/composables/useAccessibilityApi.d.ts +0 -13
  111. package/dist/static/styles/components/accessibility.css.js +0 -234
  112. /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,7 +12,7 @@ var t = function() {
12
12
  s,
13
13
  !1,
14
14
  null,
15
- "40eca1bd"
15
+ "1b5c844a"
16
16
  );
17
17
  const v = n.exports;
18
18
  export {
@@ -1,191 +1,178 @@
1
- import { defineComponent as ce, defineAsyncComponent as m, ref as H, computed as p, watch as G, onMounted as de, onUnmounted as me } from "vue";
2
- import { useCortexBlueprintBridge as le } from "../composables/useCortexBlueprintBridge.js";
3
- import { useEditorLock as ue } from "../composables/useEditorLock.js";
4
- import { provideGuidoActions as pe } from "../composables/useGuidoActions.js";
5
- import { useGuidoStateBridge as fe } from "../composables/useGuidoStateBridge.js";
6
- import { usePartner as ye } from "../composables/usePartner.js";
7
- import { useSaveValidationRollout as ge } from "../composables/useSaveValidationRollout.js";
8
- import { useStripo as ve } from "../composables/useStripo.js";
9
- import { useTimerClone as Se } from "../composables/useTimerClone.js";
10
- import { useToaster as be } from "../composables/useToaster.js";
11
- import { useTranslations as he } from "../composables/useTranslations.js";
12
- import { migrate as $ } from "../config/migrator/index.js";
13
- import { ModuleFolderDefaults as z } from "../enums/defaults.js";
14
- import { RIBBON_SELECTOR as Ee } from "../enums/onboarding.js";
15
- import { ToasterTypeOptions as we } from "../enums/toaster.js";
1
+ import { defineComponent as se, defineAsyncComponent as m, ref as W, computed as p, watch as G, onMounted as ie, 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 V } from "../config/migrator/index.js";
11
+ import { ModuleFolderDefaults as $ } from "../enums/defaults.js";
12
+ import { RIBBON_SELECTOR as Se } from "../enums/onboarding.js";
16
13
  import { useRecommendationExtensionStore as E } from "../extensions/Blocks/Recommendation/store/recommendation.js";
17
- import Te from "./organisms/AutoSaveController.vue.js";
18
- import ke from "./organisms/base/AuthErrorModal.vue.js";
19
- import Ce from "./organisms/base/Toaster.vue.js";
20
- import De from "./organisms/extensions/recommendation/FilterSelectionDrawer.vue.js";
21
- import Fe from "./organisms/header/HeaderWrapper.vue.js";
22
- import Me from "./organisms/LoadingWrapper.vue.js";
23
- import Re from "./organisms/save-as-template/SaveAsTemplateDrawer.vue.js";
24
- import Ie from "./organisms/unsubscribe/UnsubscribeWrapper.vue.js";
25
- import Le from "./organisms/validation/ValidationErrorDrawer.vue.js";
26
- import { useStripoApi as Oe } from "../services/stripoApi.js";
27
- import { useConfigStore as Ae } from "../stores/config.js";
28
- import { useDynamicContentStore as Ue } from "../stores/dynamic-content.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";
19
+ import De from "./organisms/LoadingWrapper.vue.js";
20
+ import Ce from "./organisms/save-as-template/SaveAsTemplateDrawer.vue.js";
21
+ import ke from "./organisms/unsubscribe/UnsubscribeWrapper.vue.js";
22
+ import Fe from "./organisms/validation/ValidationErrorDrawer.vue.js";
23
+ import { useStripoApi as Re } from "../services/stripoApi.js";
24
+ import { useConfigStore as Me } from "../stores/config.js";
25
+ import { useDynamicContentStore as Te } from "../stores/dynamic-content.js";
29
26
  import { useEditorStore as w } from "../stores/editor.js";
30
- import { usePreviewStore as Ne } from "../stores/preview.js";
31
- import { useSaveValidationStore as Be } from "../stores/save-validation.js";
32
- import { useTemplateStore as Pe } from "../stores/template.js";
33
- import { useUnsubscribeStore as _e } from "../stores/unsubscribe.js";
34
- import { readTrackFloor as q } from "../utils/linkTrackingIds.js";
35
- const ho = /* @__PURE__ */ ce({
27
+ import { usePreviewStore as Ie } from "../stores/preview.js";
28
+ import { useSaveValidationStore as Le } from "../stores/save-validation.js";
29
+ import { useTemplateStore as Ue } from "../stores/template.js";
30
+ import { useUnsubscribeStore as Ae } from "../stores/unsubscribe.js";
31
+ import { readTrackFloor as z } from "../utils/linkTrackingIds.js";
32
+ const lt = /* @__PURE__ */ se({
36
33
  __name: "Guido",
37
34
  props: {
38
35
  config: null,
39
36
  ready: { type: Boolean, default: !0 }
40
37
  },
41
38
  emits: ["dynamic-content:open", "back", "save:start", "save:complete", "on-change", "ready", "onboarding:finished", "test-email:click"],
42
- setup(K, { expose: j, emit: r }) {
43
- const a = K, J = m(
39
+ setup(H, { expose: q, emit: r }) {
40
+ const s = H, K = m(
44
41
  () => import("./organisms/email-preview/PreviewContainer.vue.js")
45
- ), Q = m(
42
+ ), j = m(
46
43
  () => import("./organisms/onboarding/OnboardingWrapper.vue.js")
47
- ), X = m(
44
+ ), J = m(
48
45
  () => import("./organisms/extensions/recommendation/AssignStrategyDrawer.vue.js")
49
- ), Y = m(
46
+ ), Q = m(
50
47
  () => import("./organisms/extensions/recommendation/RemoveStrategyModal.vue.js")
51
- ), T = H(), Z = m(
48
+ ), X = m(
52
49
  () => import("./organisms/extensions/recommendation/LegacyStrategyUpdatedModal.vue.js")
53
- ), f = H(), y = Ue(), k = _e(), t = Ae();
54
- a.ready && t.init(a.config);
55
- const s = w(), ee = Ne(), l = p(() => s.hasChanges), { isTestPartner: oe } = ye(), { isEnabled: te } = ge(), { showToaster: C } = be(), D = he(), F = () => {
56
- var o;
57
- if (!s.isNormalMode) {
58
- console.debug("guido:save:silent:blocked", {
59
- isVersionHistoryOpen: s.isVersionHistoryOpen,
60
- isAccessibilityTestingOpen: s.isAccessibilityTestingOpen
61
- }), C({
62
- type: we.Warning,
63
- message: D("email-editor.save-blocked-outside-editor")
64
- });
65
- return;
66
- }
67
- return (o = T.value) == null ? void 0 : o.saveSilent();
68
- }, M = (o) => {
69
- s.loadingStatus = o;
50
+ ), D = W(), f = W(), y = Te(), C = Ae(), o = Me();
51
+ s.ready && o.init(s.config);
52
+ const c = w(), Y = Ie(), l = p(() => c.hasChanges), { isTestPartner: Z } = pe(), { isEnabled: ee } = fe(), k = () => {
53
+ var t;
54
+ return (t = D.value) == null ? void 0 : t.handleSave(!0);
55
+ }, F = (t) => {
56
+ c.loadingStatus = t;
70
57
  };
71
- le(), fe();
58
+ de(), ue();
72
59
  const g = () => {
73
- var o, e;
60
+ var t, e;
74
61
  return {
75
- emailId: t.templateId,
76
- userId: t.userId,
77
- username: t.username,
78
- partnerName: t.partnerName,
79
- savedModulesFolderName: ((o = t.editor) == null ? void 0 : o.savedModulesFolderName) || z.SAVED_MODULES,
80
- defaultModulesFolderName: ((e = t.editor) == null ? void 0 : e.defaultModulesFolderName) || z.DEFAULT_MODULES
62
+ emailId: o.templateId,
63
+ userId: o.userId,
64
+ username: o.username,
65
+ partnerName: o.partnerName,
66
+ savedModulesFolderName: ((t = o.editor) == null ? void 0 : t.savedModulesFolderName) || $.SAVED_MODULES,
67
+ defaultModulesFolderName: ((e = o.editor) == null ? void 0 : e.defaultModulesFolderName) || $.DEFAULT_MODULES
81
68
  };
82
- }, { initPlugin: R, preloadRuntime: I } = ve(), { runExclusive: L, beginMount: O, isCurrentMount: v } = ue();
69
+ }, { initPlugin: R, preloadRuntime: M } = ye(), { runExclusive: T, beginMount: I, isCurrentMount: S } = me();
83
70
  let u = 0;
84
- const { getDefaultTemplate: A } = Oe(), { cloneTimersOnSave: U, hasTimerBlocks: N } = Se(), ne = p(() => {
85
- var o;
86
- return !((o = t.ui) != null && o.showHeader);
87
- }), re = p(() => t.isFeatureEnabled("reusableRecommendationStrategy")), se = p(
71
+ const { getDefaultTemplate: L } = Re(), { cloneTimersOnSave: U, hasTimerBlocks: A } = ge(), te = p(() => {
72
+ var t;
73
+ return !((t = o.ui) != null && t.showHeader);
74
+ }), oe = p(() => o.isFeatureEnabled("reusableRecommendationStrategy")), ne = p(
88
75
  () => !!E().recommendationConfigs.strategyId
89
76
  );
90
- pe({
77
+ le({
91
78
  onBack: () => {
92
79
  console.debug("guido:back"), r("back");
93
80
  },
94
81
  onSaveStart: () => {
95
82
  console.debug("guido:save:start"), r("save:start");
96
83
  },
97
- onSaveComplete: (o) => {
98
- const e = { ...o, metadata: g() };
84
+ onSaveComplete: (t) => {
85
+ const e = { ...t, metadata: g() };
99
86
  console.debug("guido:save:complete", e), r("save:complete", e);
100
87
  },
101
88
  onTestEmailClick: () => {
102
89
  console.debug("guido:test-email:click"), r("test-email:click");
103
90
  }
104
91
  });
105
- const B = (o) => {
106
- console.debug("dynamic-content:close", o), y.setSelectedDynamicContent(o), document.dispatchEvent(new CustomEvent("dynamic-content:close", { detail: o }));
107
- }, P = () => {
92
+ const B = (t) => {
93
+ console.debug("dynamic-content:close", t), y.setSelectedDynamicContent(t), document.dispatchEvent(new CustomEvent("dynamic-content:close", { detail: t }));
94
+ }, N = () => {
108
95
  console.debug("dynamic-content:close", "Without Data"), document.dispatchEvent(new CustomEvent("dynamic-content:close", { detail: { text: "", value: "" } }));
109
96
  };
110
97
  G(() => l.value, () => {
111
98
  r("on-change", l.value);
112
99
  });
113
- const S = (o) => {
114
- const e = o, { attribute: i, position: d } = e.detail;
115
- console.debug("dynamic-content:open", e.detail), r("dynamic-content:open", i, d);
100
+ const v = (t) => {
101
+ const e = t, { attribute: a, position: d } = e.detail;
102
+ console.debug("dynamic-content:open", e.detail), r("dynamic-content:open", a, d);
116
103
  };
117
- let c = null;
104
+ let i = null;
118
105
  const b = () => {
119
106
  var e;
120
- const o = document.querySelector(Ee);
121
- (e = f.value) == null || e.style.setProperty("--ribbon-offset", `${(o == null ? void 0 : o.offsetHeight) ?? 0}px`);
107
+ const t = document.querySelector(Se);
108
+ (e = f.value) == null || e.style.setProperty("--ribbon-offset", `${(t == null ? void 0 : t.offsetHeight) ?? 0}px`);
122
109
  }, h = async () => {
123
- var o;
110
+ var t;
124
111
  try {
125
- t.initialized || t.init(a.config), s.templateId = t.templateId;
126
- const e = t.template, i = (e == null ? void 0 : e.html) || "", d = (e == null ? void 0 : e.css) || "", _ = (e == null ? void 0 : e.preselectedDynamicContent) || [];
127
- k.selectedUnsubscribePages = (e == null ? void 0 : e.selectedUnsubscribePages) || [];
128
- const x = ((o = e == null ? void 0 : e.migration) == null ? void 0 : o.recommendationConfigs) ?? {}, V = t.isFeatureEnabled("linkTrackingIds"), W = {
129
- partnerName: t.partnerName,
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) || "", P = (e == null ? void 0 : e.preselectedDynamicContent) || [];
114
+ C.selectedUnsubscribePages = (e == null ? void 0 : e.selectedUnsubscribePages) || [];
115
+ const _ = ((t = e == null ? void 0 : e.migration) == null ? void 0 : t.recommendationConfigs) ?? {}, O = o.isFeatureEnabled("linkTrackingIds"), x = {
116
+ partnerName: o.partnerName,
130
117
  campaignUrls: e == null ? void 0 : e.recommendationCampaignUrls,
131
- rrsEnabled: t.isFeatureEnabled("reusableRecommendationStrategy")
118
+ rrsEnabled: o.isFeatureEnabled("reusableRecommendationStrategy")
132
119
  };
133
120
  let n = {
134
- html: i && await $(i, x, W),
121
+ html: a && await V(a, _, x),
135
122
  css: d
136
123
  };
137
- n.html || (n = await A(), n.html = await $(n.html, x, W));
138
- const ie = V ? q(n.html, (e == null ? void 0 : e.trackIdCounter) || 0) : 0;
139
- N(n.html) && (n.html = await U(n.html)), V && (s.trackIdSessionFloor = Math.max(ie, q(n.html)));
124
+ n.html || (n = await L(), n.html = await V(n.html, _, x));
125
+ const re = O ? z(n.html, (e == null ? void 0 : e.trackIdCounter) || 0) : 0;
126
+ A(n.html) && (n.html = await U(n.html)), O && (c.trackIdSessionFloor = Math.max(re, z(n.html)));
140
127
  const ae = {
141
- preselectedDynamicContentList: _,
128
+ preselectedDynamicContentList: P,
142
129
  onReady: () => {
143
130
  console.debug("guido:ready"), r("ready");
144
131
  }
145
132
  };
146
- u = O(), await R(n, g(), ae), y.selectedDynamicContentList = _;
133
+ u = I(), await R(n, g(), ae), y.selectedDynamicContentList = P;
147
134
  } catch (e) {
148
135
  console.error("Failed to initialize Stripo editor:", e);
149
136
  }
150
137
  };
151
- return de(async () => {
138
+ return ie(async () => {
152
139
  var e;
153
- console.debug("Guido says happy coding 🎉"), console.debug("🚗 Ka-Chow"), E().$reset(), w().$reset(), Pe().$reset(), Be().$reset(), b();
154
- const o = (e = f.value) == null ? void 0 : e.parentElement;
155
- if (o && (c = new ResizeObserver(b), c.observe(o)), I(), a.ready)
140
+ console.debug("Guido says happy coding 🎉"), console.debug("🚗 Ka-Chow"), E().$reset(), w().$reset(), Ue().$reset(), Le().$reset(), b();
141
+ const t = (e = f.value) == null ? void 0 : e.parentElement;
142
+ if (t && (i = new ResizeObserver(b), i.observe(t)), M(), s.ready)
156
143
  await h();
157
144
  else {
158
- const i = G(() => a.ready, (d) => {
159
- d && (i(), h());
145
+ const a = G(() => s.ready, (d) => {
146
+ d && (a(), h());
160
147
  });
161
148
  }
162
- document.addEventListener("dynamic-content:open", S);
163
- }), me(() => {
164
- if (c == null || c.disconnect(), document.removeEventListener("dynamic-content:open", S), E().disposeStrategyPageReturn(), v(u))
149
+ document.addEventListener("dynamic-content:open", v);
150
+ }), ce(() => {
151
+ if (i == null || i.disconnect(), document.removeEventListener("dynamic-content:open", v), E().disposeStrategyPageReturn(), S(u))
165
152
  try {
166
153
  w().isStripoInitialized = !1;
167
- } catch (o) {
168
- console.debug("Failed to close the editor readiness gate on unmount", o);
154
+ } catch (t) {
155
+ console.debug("Failed to close the editor readiness gate on unmount", t);
169
156
  }
170
- L(async () => {
171
- if (v(u))
157
+ T(async () => {
158
+ if (S(u))
172
159
  try {
173
160
  window.UIEditor.removeEditor();
174
161
  } catch {
175
162
  console.debug("Failed to remove Stripo editor: No editor found");
176
163
  }
177
- }), t.reset();
178
- }), j({
164
+ }), o.reset();
165
+ }), q({
179
166
  dynamicContent: {
180
167
  insert: B,
181
- close: P
168
+ close: N
182
169
  },
183
170
  hasChanges: l,
184
- saveSilent: F,
185
- setLoading: M
186
- }), { __sfc: !0, PreviewContainer: J, OnboardingWrapper: Q, AssignStrategyDrawer: X, RemoveStrategyModal: Y, autoSaveControllerRef: T, LegacyStrategyUpdatedModal: Z, wrapperRef: f, dynamicContentStore: y, unsubscribeStore: k, props: a, configStore: t, editorStore: s, previewStore: ee, hasChanges: l, isTestPartner: oe, isSaveValidationEnabled: te, showToaster: C, trans: D, saveSilent: F, setLoading: M, emit: r, buildMetadata: g, initPlugin: R, preloadRuntime: I, runExclusive: L, beginMount: O, isCurrentMount: v, mountGeneration: u, getDefaultTemplate: A, cloneTimersOnSave: U, hasTimerBlocks: N, noHeader: ne, isRrsEnabled: re, hasAssignedStrategy: se, insertDynamicContent: B, closeDynamicContent: P, handleDynamicContentOpen: S, ribbonObserver: c, updateRibbonOffset: b, startEditor: h, AutoSaveController: Te, AuthErrorModal: ke, Toaster: Ce, FilterSelectionDrawer: De, HeaderWrapper: Fe, LoadingWrapper: Me, SaveAsTemplateDrawer: Re, UnsubscribeWrapper: Ie, ValidationErrorDrawer: Le };
171
+ saveSilent: k,
172
+ setLoading: F
173
+ }), { __sfc: !0, PreviewContainer: K, OnboardingWrapper: j, AssignStrategyDrawer: J, RemoveStrategyModal: Q, LegacyStrategyUpdatedModal: X, headerWrapperRef: D, wrapperRef: f, dynamicContentStore: y, unsubscribeStore: C, props: s, configStore: o, editorStore: c, previewStore: Y, hasChanges: l, isTestPartner: Z, isSaveValidationEnabled: ee, saveSilent: k, setLoading: F, emit: r, buildMetadata: g, initPlugin: R, preloadRuntime: M, runExclusive: T, beginMount: I, isCurrentMount: S, mountGeneration: u, getDefaultTemplate: L, cloneTimersOnSave: U, hasTimerBlocks: A, noHeader: te, isRrsEnabled: oe, hasAssignedStrategy: ne, insertDynamicContent: B, closeDynamicContent: N, handleDynamicContentOpen: v, ribbonObserver: i, updateRibbonOffset: b, startEditor: h, AutoSaveController: ve, AuthErrorModal: be, Toaster: he, FilterSelectionDrawer: Ee, HeaderWrapper: we, LoadingWrapper: De, SaveAsTemplateDrawer: Ce, UnsubscribeWrapper: ke, ValidationErrorDrawer: Fe };
187
174
  }
188
175
  });
189
176
  export {
190
- ho as default
177
+ lt as default
191
178
  };
@@ -1,24 +1,14 @@
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 r } from "vue";
2
+ import { useAutoSave as s } from "../../composables/useAutoSave.js";
3
+ import { useSave as n } from "../../composables/useSave.js";
4
+ import { useSaveValidationRollout as u } from "../../composables/useSaveValidationRollout.js";
5
+ const v = /* @__PURE__ */ r({
7
6
  __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 };
7
+ setup(m) {
8
+ const { save: e, saveRawOnly: o } = n(), { isEnabled: t } = u(), a = () => t.value ? o() : e(!1, !0);
9
+ return s(a), { __sfc: !0, save: e, saveRawOnly: o, isEnabled: t, backgroundSave: a };
20
10
  }
21
11
  });
22
12
  export {
23
- b as default
13
+ v as default
24
14
  };
@@ -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
+ }, c = [], p = /* @__PURE__ */ d(
15
13
  l,
14
+ u,
15
+ c,
16
16
  !1,
17
17
  null,
18
- "f36a9d0c"
18
+ "2cccbd44"
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
  };