@useinsider/guido 3.19.0-beta.f05f865 → 3.19.0-beta.f0d5980

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 (45) hide show
  1. package/README.md +0 -1
  2. package/dist/@types/config/schemas.js +37 -39
  3. package/dist/components/Guido.vue.js +8 -8
  4. package/dist/components/Guido.vue2.js +53 -56
  5. package/dist/components/organisms/AutoSaveController.vue2.js +8 -9
  6. package/dist/components/organisms/header/EditorActions.vue.js +2 -2
  7. package/dist/components/organisms/header/EditorActions.vue2.js +55 -90
  8. package/dist/components/organisms/header/LeftSlot.vue.js +5 -5
  9. package/dist/components/organisms/header/LeftSlot.vue2.js +12 -16
  10. package/dist/components/wrappers/WpDrawer.vue.js +7 -9
  11. package/dist/components/wrappers/WpDrawer.vue2.js +1 -1
  12. package/dist/composables/useHtmlCompiler.js +26 -37
  13. package/dist/composables/useHtmlValidator.js +0 -2
  14. package/dist/composables/useSave.js +45 -90
  15. package/dist/composables/validators/useCouponBlockValidator.js +21 -24
  16. package/dist/composables/validators/useUnsubscribeBlockValidator.js +27 -34
  17. package/dist/guido.css +1 -1
  18. package/dist/src/@types/config/schemas.d.ts +0 -4
  19. package/dist/src/components/Guido.vue.d.ts +1 -17
  20. package/dist/src/components/organisms/header/EditorActions.vue.d.ts +1 -17
  21. package/dist/src/components/organisms/header/HeaderWrapper.vue.d.ts +1 -17
  22. package/dist/src/components/organisms/header/RightSlot.vue.d.ts +1 -17
  23. package/dist/src/components/wrappers/WpDrawer.vue.d.ts +3 -4
  24. package/dist/src/composables/useConfig.d.ts +0 -2
  25. package/dist/src/composables/useHtmlValidator.d.ts +0 -21
  26. package/dist/src/composables/useSave.d.ts +1 -6
  27. package/dist/src/composables/validators/useCouponBlockValidator.d.ts +0 -3
  28. package/dist/src/composables/validators/useUnsubscribeBlockValidator.d.ts +0 -10
  29. package/dist/src/stores/config.d.ts +0 -32
  30. package/dist/src/utils/templatePreparation.d.ts +0 -30
  31. package/dist/stores/config.js +67 -84
  32. package/dist/utils/templatePreparation.js +36 -39
  33. package/package.json +1 -1
  34. package/dist/components/organisms/validation/ValidationErrorDrawer.vue.js +0 -20
  35. package/dist/components/organisms/validation/ValidationErrorDrawer.vue2.js +0 -49
  36. package/dist/composables/useSaveValidation.js +0 -282
  37. package/dist/composables/useSaveValidationRollout.js +0 -9
  38. package/dist/enums/save-validation.js +0 -4
  39. package/dist/src/@types/save-validation.d.ts +0 -19
  40. package/dist/src/components/organisms/validation/ValidationErrorDrawer.vue.d.ts +0 -2
  41. package/dist/src/composables/useSaveValidation.d.ts +0 -6
  42. package/dist/src/composables/useSaveValidationRollout.d.ts +0 -3
  43. package/dist/src/enums/save-validation.d.ts +0 -27
  44. package/dist/src/stores/save-validation.d.ts +0 -22
  45. package/dist/stores/save-validation.js +0 -30
package/README.md CHANGED
@@ -164,7 +164,6 @@ const config: GuidoConfigInput = {
164
164
  liquidSyntax?: boolean, // Default: false - Enable Liquid template syntax
165
165
  autosave?: boolean, // Default: false - Show the Auto Save toggle in the header. See wiki/AUTOSAVE.md.
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
- 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
167
  reusableRecommendationStrategy?: boolean, // Default: false - Assign an RRS strategy to recommendation blocks instead of per-block algorithm/filters/shuffle/product-count settings.
169
168
  },
170
169
 
@@ -1,4 +1,4 @@
1
- import { ModuleFolderDefaults as f } from "../../enums/defaults.js";
1
+ import { ModuleFolderDefaults as S } from "../../enums/defaults.js";
2
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 */
@@ -38,7 +38,7 @@ const p = {
38
38
  name: t(),
39
39
  /** Fallback font family (e.g., "serif" or "sans-serif") */
40
40
  family: t()
41
- }), E = a({
41
+ }), M = a({
42
42
  /** Partner/organization name (required) */
43
43
  name: i(
44
44
  t(),
@@ -62,7 +62,7 @@ const p = {
62
62
  username: e(t(), "Guido User"),
63
63
  /** Fallback font settings from partner settings — used to match backend size calculation */
64
64
  fallbackFont: e(L)
65
- }), M = a({
65
+ }), E = a({
66
66
  /** Display text for the dynamic content */
67
67
  text: t(),
68
68
  /** Template variable value (e.g., {{username}}) */
@@ -76,17 +76,17 @@ const p = {
76
76
  value: t()
77
77
  })
78
78
  )
79
- }), S = T(() => C({
79
+ }), f = 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(S)),
84
+ children: e(c(f)),
85
85
  // eslint-disable-next-line camelcase -- backend field name
86
- select_items: e(c(S))
86
+ select_items: e(c(f))
87
87
  })), N = g(
88
88
  t(),
89
- R(c(S), [])
89
+ R(c(f), [])
90
90
  ), P = C({
91
91
  /** Block ID (matches the dictionary key and the legacy HTML element id) */
92
92
  id: e(s()),
@@ -132,7 +132,7 @@ const p = {
132
132
  isPriceMovedToNextLine: e(o()),
133
133
  /** Legacy "Hide if same as discounted" / delete-price-for-zero-sale toggle */
134
134
  isPriceDeletedForZeroSale: e(o())
135
- }), v = a({
135
+ }), x = a({
136
136
  /**
137
137
  * Legacy recommendation block configs keyed by block ID.
138
138
  * Pass this when loading a template authored with the v1
@@ -143,14 +143,14 @@ const p = {
143
143
  g(t(), P),
144
144
  {}
145
145
  )
146
- }), x = a({
146
+ }), D = a({
147
147
  /** Initial HTML content */
148
148
  html: e(t(), ""),
149
149
  /** Initial CSS content */
150
150
  css: e(t(), ""),
151
151
  /** Preselected dynamic content items */
152
152
  preselectedDynamicContent: e(
153
- c(M),
153
+ c(E),
154
154
  []
155
155
  ),
156
156
  /**
@@ -194,13 +194,13 @@ const p = {
194
194
  )
195
195
  ),
196
196
  /** Migration-only inputs (legacy block configs) */
197
- migration: e(v, {})
198
- }), D = a({
197
+ migration: e(x, {})
198
+ }), O = a({
199
199
  /** Sender display name */
200
200
  senderName: e(t(), ""),
201
201
  /** Email subject line */
202
202
  subject: e(t(), "")
203
- }), O = a({
203
+ }), v = a({
204
204
  /** Locale for the editor UI */
205
205
  locale: e(t(), "en"),
206
206
  /** Path to translations object */
@@ -208,11 +208,11 @@ const p = {
208
208
  /** Migration date for template compatibility */
209
209
  migrationDate: e(s(), 1759696858),
210
210
  /** Email header settings */
211
- emailHeader: e(D, { senderName: "", subject: "" }),
211
+ emailHeader: e(O, { senderName: "", subject: "" }),
212
212
  /** Folder name for user-saved modules (used by Stripo plugin panel for path construction) */
213
- savedModulesFolderName: e(t(), f.SAVED_MODULES),
213
+ savedModulesFolderName: e(t(), S.SAVED_MODULES),
214
214
  /** Folder name for default/prebuilt modules (used by Stripo plugin panel for path construction) */
215
- defaultModulesFolderName: e(t(), f.DEFAULT_MODULES)
215
+ defaultModulesFolderName: e(t(), S.DEFAULT_MODULES)
216
216
  }), F = a({
217
217
  /** Whether to show the header bar */
218
218
  showHeader: e(o(), !0),
@@ -241,10 +241,8 @@ const p = {
241
241
  allowlistEnabled: e(o(), !1),
242
242
  /** Enable persistent link tracking-id assignment for the click heatmap (opt-in) */
243
243
  linkTrackingIds: e(o(), !1),
244
- /** Allow persisting a template that still has validation errors (drawer "Save and Continue" soft-save). Host sets false for transactional + unsubscribe. */
245
- allowSaveWithErrors: e(o(), !0),
246
244
  reusableRecommendationStrategy: e(o(), !1)
247
- }), w = m([
245
+ }), B = m([
248
246
  "amp-accordion",
249
247
  "amp-carousel",
250
248
  "amp-form-controls",
@@ -258,7 +256,7 @@ const p = {
258
256
  "text-block",
259
257
  "timer-block",
260
258
  "video-block"
261
- ]), B = m([
259
+ ]), w = m([
262
260
  "dynamic-content",
263
261
  "checkbox-block",
264
262
  "radio-button-block",
@@ -269,12 +267,12 @@ const p = {
269
267
  ]), j = a({
270
268
  /** Default blocks to exclude from the editor */
271
269
  excludeDefaults: e(
272
- c(w),
270
+ c(B),
273
271
  []
274
272
  ),
275
273
  /** Custom blocks to include in the editor */
276
274
  includeCustoms: e(
277
- c(B),
275
+ c(w),
278
276
  []
279
277
  )
280
278
  }), d = a({
@@ -325,7 +323,7 @@ const p = {
325
323
  customRules: e(c(V), []),
326
324
  /** Skip default compiler rules */
327
325
  ignoreDefaultRules: e(o(), !1)
328
- }), W = a({
326
+ }), Z = a({
329
327
  /**
330
328
  * External validation handler called before save completes.
331
329
  * Return false to cancel the save operation.
@@ -336,17 +334,17 @@ const p = {
336
334
  "externalValidation must be a function"
337
335
  )
338
336
  )
339
- }), K = a({
337
+ }), Q = a({
340
338
  // Required sections
341
339
  /** Identity configuration (required) */
342
340
  identity: A,
343
341
  /** Partner configuration (required) */
344
- partner: E,
342
+ partner: M,
345
343
  // Optional sections (with defaults)
346
344
  /** Template content and presets */
347
- template: e(x, {}),
345
+ template: e(D, {}),
348
346
  /** Editor settings */
349
- editor: e(O, {}),
347
+ editor: e(v, {}),
350
348
  /** UI configuration */
351
349
  ui: e(F, {}),
352
350
  /** Feature toggles */
@@ -356,33 +354,33 @@ const p = {
356
354
  /** Compiler configuration */
357
355
  compiler: e(z, {}),
358
356
  /** Callbacks and event handlers */
359
- callbacks: e(W, {})
357
+ callbacks: e(Z, {})
360
358
  });
361
359
  export {
362
360
  j as BlocksSchema,
363
- W as CallbacksSchema,
361
+ Z as CallbacksSchema,
364
362
  V as CompilerRuleSchema,
365
363
  z as CompilerSchema,
366
- B as CustomBlockTypeSchema,
364
+ w as CustomBlockTypeSchema,
367
365
  G as CustomRuleSchema,
368
- w as DefaultBlockTypeSchema,
366
+ B as DefaultBlockTypeSchema,
369
367
  N as DynamicContentListSchema,
370
- S as DynamicContentNodeSchema,
371
- M as DynamicContentSchema,
372
- O as EditorSchema,
373
- D as EmailHeaderSchema,
368
+ f as DynamicContentNodeSchema,
369
+ E as DynamicContentSchema,
370
+ v as EditorSchema,
371
+ O as EmailHeaderSchema,
374
372
  L as FallbackFontSchema,
375
373
  U as FeaturesSchema,
376
- K as GuidoConfigSchema,
374
+ Q as GuidoConfigSchema,
377
375
  A as IdentitySchema,
378
376
  P as LegacyRecommendationConfigSchema,
379
377
  p as MessageType,
380
- E as PartnerSchema,
378
+ M as PartnerSchema,
381
379
  l as ProductType,
382
380
  _ as RegexRuleSchema,
383
381
  q as RemoveRuleSchema,
384
382
  H as ReplaceRuleSchema,
385
- v as TemplateMigrationSchema,
386
- x as TemplateSchema,
383
+ x as TemplateMigrationSchema,
384
+ D as TemplateSchema,
387
385
  F as UISchema
388
386
  };
@@ -1,20 +1,20 @@
1
1
  import o from "./Guido.vue2.js";
2
2
  /* empty css */
3
- import i from "../_virtual/_plugin-vue2_normalizer.js";
4
- var t = function() {
3
+ import t from "../_virtual/_plugin-vue2_normalizer.js";
4
+ var i = 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, { 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(_) {
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.isTestPartner() ? a._e() : r(e.OnboardingWrapper, { on: { "onboarding-finished": function(_) {
7
7
  return e.emit("onboarding:finished");
8
8
  } } }), r(e.UnsubscribeWrapper), r(e.LoadingWrapper)], 1);
9
- }, s = [], n = /* @__PURE__ */ i(
9
+ }, s = [], n = /* @__PURE__ */ t(
10
10
  o,
11
- t,
11
+ i,
12
12
  s,
13
13
  !1,
14
14
  null,
15
- "1ae93148"
15
+ "926b01f5"
16
16
  );
17
- const v = n.exports;
17
+ const f = n.exports;
18
18
  export {
19
- v as default
19
+ f as default
20
20
  };
@@ -1,43 +1,40 @@
1
- import { defineComponent as se, defineAsyncComponent as m, ref as x, computed as u, watch as W, 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";
1
+ import { defineComponent as ae, defineAsyncComponent as m, ref as x, computed as u, watch as W, onMounted as se, onUnmounted as ie } from "vue";
2
+ import { useCortexBlueprintBridge as ce } from "../composables/useCortexBlueprintBridge.js";
3
+ import { useEditorLock as de } from "../composables/useEditorLock.js";
4
+ import { provideGuidoActions as me } from "../composables/useGuidoActions.js";
5
+ import { useGuidoStateBridge as le } from "../composables/useGuidoStateBridge.js";
6
+ import { usePartner as ue } from "../composables/usePartner.js";
7
+ import { useStripo as pe } from "../composables/useStripo.js";
8
+ import { useTimerClone as fe } from "../composables/useTimerClone.js";
10
9
  import { migrate as G } from "../config/migrator/index.js";
11
- import { ModuleFolderDefaults as V } from "../enums/defaults.js";
12
- import { RIBBON_SELECTOR as Se } from "../enums/onboarding.js";
10
+ import { ModuleFolderDefaults as H } from "../enums/defaults.js";
11
+ import { RIBBON_SELECTOR as ye } from "../enums/onboarding.js";
13
12
  import { useRecommendationExtensionStore as h } 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";
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 Re 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 Te } from "../stores/dynamic-content.js";
13
+ import ge from "./organisms/AutoSaveController.vue.js";
14
+ import Se from "./organisms/base/AuthErrorModal.vue.js";
15
+ import ve from "./organisms/base/Toaster.vue.js";
16
+ import be from "./organisms/extensions/recommendation/FilterSelectionDrawer.vue.js";
17
+ import he from "./organisms/header/HeaderWrapper.vue.js";
18
+ import Ee from "./organisms/LoadingWrapper.vue.js";
19
+ import we from "./organisms/save-as-template/SaveAsTemplateDrawer.vue.js";
20
+ import Ce from "./organisms/unsubscribe/UnsubscribeWrapper.vue.js";
21
+ import { useStripoApi as De } from "../services/stripoApi.js";
22
+ import { useConfigStore as ke } from "../stores/config.js";
23
+ import { useDynamicContentStore as Fe } from "../stores/dynamic-content.js";
26
24
  import { useEditorStore as $ } from "../stores/editor.js";
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 H } from "../utils/linkTrackingIds.js";
32
- const lt = /* @__PURE__ */ se({
25
+ import { usePreviewStore as Me } from "../stores/preview.js";
26
+ import { useTemplateStore as Re } from "../stores/template.js";
27
+ import { useUnsubscribeStore as Te } from "../stores/unsubscribe.js";
28
+ import { readTrackFloor as z } from "../utils/linkTrackingIds.js";
29
+ const rt = /* @__PURE__ */ ae({
33
30
  __name: "Guido",
34
31
  props: {
35
32
  config: null,
36
33
  ready: { type: Boolean, default: !0 }
37
34
  },
38
35
  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 s = z, K = m(
36
+ setup(q, { expose: K, emit: r }) {
37
+ const s = q, V = m(
41
38
  () => import("./organisms/email-preview/PreviewContainer.vue.js")
42
39
  ), j = m(
43
40
  () => import("./organisms/onboarding/OnboardingWrapper.vue.js")
@@ -47,15 +44,15 @@ const lt = /* @__PURE__ */ se({
47
44
  () => import("./organisms/extensions/recommendation/RemoveStrategyModal.vue.js")
48
45
  ), X = m(
49
46
  () => import("./organisms/extensions/recommendation/LegacyStrategyUpdatedModal.vue.js")
50
- ), E = x(), p = x(), f = Te(), w = Ae(), o = Me();
47
+ ), E = x(), p = x(), f = Fe(), w = Te(), o = ke();
51
48
  s.ready && o.init(s.config);
52
- const c = $(), Y = Ie(), l = u(() => c.hasChanges), { isTestPartner: Z } = pe(), { isEnabled: ee } = fe(), D = () => {
49
+ const c = $(), Y = Me(), l = u(() => c.hasChanges), { isTestPartner: Z } = ue(), C = () => {
53
50
  var t;
54
51
  return (t = E.value) == null ? void 0 : t.handleSave(!0);
55
- }, C = (t) => {
52
+ }, D = (t) => {
56
53
  c.loadingStatus = t;
57
54
  };
58
- de(), ue();
55
+ ce(), le();
59
56
  const y = () => {
60
57
  var t, e;
61
58
  return {
@@ -63,18 +60,18 @@ const lt = /* @__PURE__ */ se({
63
60
  userId: o.userId,
64
61
  username: o.username,
65
62
  partnerName: o.partnerName,
66
- savedModulesFolderName: ((t = o.editor) == null ? void 0 : t.savedModulesFolderName) || V.SAVED_MODULES,
67
- defaultModulesFolderName: ((e = o.editor) == null ? void 0 : e.defaultModulesFolderName) || V.DEFAULT_MODULES
63
+ savedModulesFolderName: ((t = o.editor) == null ? void 0 : t.savedModulesFolderName) || H.SAVED_MODULES,
64
+ defaultModulesFolderName: ((e = o.editor) == null ? void 0 : e.defaultModulesFolderName) || H.DEFAULT_MODULES
68
65
  };
69
- }, { initPlugin: k, preloadRuntime: R } = ye(), { runExclusive: F, beginMount: M, isCurrentMount: T } = me();
66
+ }, { initPlugin: k, preloadRuntime: F } = pe(), { runExclusive: M, beginMount: R, isCurrentMount: T } = de();
70
67
  let g = 0;
71
- const { getDefaultTemplate: I } = Fe(), { cloneTimersOnSave: L, hasTimerBlocks: U } = ge(), te = u(() => {
68
+ const { getDefaultTemplate: I } = De(), { cloneTimersOnSave: L, hasTimerBlocks: U } = fe(), ee = u(() => {
72
69
  var t;
73
70
  return !((t = o.ui) != null && t.showHeader);
74
- }), oe = u(() => o.isFeatureEnabled("reusableRecommendationStrategy")), ne = u(
71
+ }), te = u(() => o.isFeatureEnabled("reusableRecommendationStrategy")), oe = u(
75
72
  () => !!h().recommendationConfigs.strategyId
76
73
  );
77
- le({
74
+ me({
78
75
  onBack: () => {
79
76
  console.debug("guido:back"), r("back");
80
77
  },
@@ -104,7 +101,7 @@ const lt = /* @__PURE__ */ se({
104
101
  let i = null;
105
102
  const v = () => {
106
103
  var e;
107
- const t = document.querySelector(Se);
104
+ const t = document.querySelector(ye);
108
105
  (e = p.value) == null || e.style.setProperty("--ribbon-offset", `${(t == null ? void 0 : t.offsetHeight) ?? 0}px`);
109
106
  }, b = async () => {
110
107
  var t;
@@ -122,24 +119,24 @@ const lt = /* @__PURE__ */ se({
122
119
  css: d
123
120
  };
124
121
  n.html || (n = await I(), n.html = await G(n.html, P, O));
125
- const re = _ ? H(n.html, (e == null ? void 0 : e.trackIdCounter) || 0) : 0;
126
- U(n.html) && (n.html = await L(n.html)), _ && (c.trackIdSessionFloor = Math.max(re, H(n.html)));
127
- const ae = {
122
+ const ne = _ ? z(n.html, (e == null ? void 0 : e.trackIdCounter) || 0) : 0;
123
+ U(n.html) && (n.html = await L(n.html)), _ && (c.trackIdSessionFloor = Math.max(ne, z(n.html)));
124
+ const re = {
128
125
  preselectedDynamicContentList: N,
129
126
  onReady: () => {
130
127
  console.debug("guido:ready"), r("ready");
131
128
  }
132
129
  };
133
- g = M(), await k(n, y(), ae), f.selectedDynamicContentList = N;
130
+ g = R(), await k(n, y(), re), f.selectedDynamicContentList = N;
134
131
  } catch (e) {
135
132
  console.error("Failed to initialize Stripo editor:", e);
136
133
  }
137
134
  };
138
- return ie(async () => {
135
+ return se(async () => {
139
136
  var e;
140
- console.debug("Guido says happy coding 🎉"), console.debug("🚗 Ka-Chow"), h().$reset(), $().$reset(), Ue().$reset(), Le().$reset(), v();
137
+ console.debug("Guido says happy coding 🎉"), console.debug("🚗 Ka-Chow"), h().$reset(), $().$reset(), Re().$reset(), v();
141
138
  const t = (e = p.value) == null ? void 0 : e.parentElement;
142
- if (t && (i = new ResizeObserver(v), i.observe(t)), R(), s.ready)
139
+ if (t && (i = new ResizeObserver(v), i.observe(t)), F(), s.ready)
143
140
  await b();
144
141
  else {
145
142
  const a = W(() => s.ready, (d) => {
@@ -147,8 +144,8 @@ const lt = /* @__PURE__ */ se({
147
144
  });
148
145
  }
149
146
  document.addEventListener("dynamic-content:open", S);
150
- }), ce(() => {
151
- i == null || i.disconnect(), document.removeEventListener("dynamic-content:open", S), h().disposeStrategyPageReturn(), F(async () => {
147
+ }), ie(() => {
148
+ i == null || i.disconnect(), document.removeEventListener("dynamic-content:open", S), h().disposeStrategyPageReturn(), M(async () => {
152
149
  if (T(g))
153
150
  try {
154
151
  window.UIEditor.removeEditor();
@@ -156,17 +153,17 @@ const lt = /* @__PURE__ */ se({
156
153
  console.debug("Failed to remove Stripo editor: No editor found");
157
154
  }
158
155
  }), o.reset();
159
- }), q({
156
+ }), K({
160
157
  dynamicContent: {
161
158
  insert: A,
162
159
  close: B
163
160
  },
164
161
  hasChanges: l,
165
- saveSilent: D,
166
- setLoading: C
167
- }), { __sfc: !0, PreviewContainer: K, OnboardingWrapper: j, AssignStrategyDrawer: J, RemoveStrategyModal: Q, LegacyStrategyUpdatedModal: X, headerWrapperRef: E, wrapperRef: p, dynamicContentStore: f, unsubscribeStore: w, props: s, configStore: o, editorStore: c, previewStore: Y, hasChanges: l, isTestPartner: Z, isSaveValidationEnabled: ee, saveSilent: D, setLoading: C, emit: r, buildMetadata: y, initPlugin: k, preloadRuntime: R, runExclusive: F, beginMount: M, isCurrentMount: T, mountGeneration: g, getDefaultTemplate: I, cloneTimersOnSave: L, hasTimerBlocks: U, noHeader: te, isRrsEnabled: oe, hasAssignedStrategy: ne, insertDynamicContent: A, closeDynamicContent: B, handleDynamicContentOpen: S, ribbonObserver: i, updateRibbonOffset: v, startEditor: b, AutoSaveController: ve, AuthErrorModal: be, Toaster: he, FilterSelectionDrawer: Ee, HeaderWrapper: we, LoadingWrapper: De, SaveAsTemplateDrawer: Ce, UnsubscribeWrapper: ke, ValidationErrorDrawer: Re };
162
+ saveSilent: C,
163
+ setLoading: D
164
+ }), { __sfc: !0, PreviewContainer: V, OnboardingWrapper: j, AssignStrategyDrawer: J, RemoveStrategyModal: Q, LegacyStrategyUpdatedModal: X, headerWrapperRef: E, wrapperRef: p, dynamicContentStore: f, unsubscribeStore: w, props: s, configStore: o, editorStore: c, previewStore: Y, hasChanges: l, isTestPartner: Z, saveSilent: C, setLoading: D, emit: r, buildMetadata: y, initPlugin: k, preloadRuntime: F, runExclusive: M, beginMount: R, isCurrentMount: T, mountGeneration: g, getDefaultTemplate: I, cloneTimersOnSave: L, hasTimerBlocks: U, noHeader: ee, isRrsEnabled: te, hasAssignedStrategy: oe, insertDynamicContent: A, closeDynamicContent: B, handleDynamicContentOpen: S, ribbonObserver: i, updateRibbonOffset: v, startEditor: b, AutoSaveController: ge, AuthErrorModal: Se, Toaster: ve, FilterSelectionDrawer: be, HeaderWrapper: he, LoadingWrapper: Ee, SaveAsTemplateDrawer: we, UnsubscribeWrapper: Ce };
168
165
  }
169
166
  });
170
167
  export {
171
- lt as default
168
+ rt as default
172
169
  };
@@ -1,14 +1,13 @@
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({
1
+ import { defineComponent as t } from "vue";
2
+ import { useAutoSave as r } from "../../composables/useAutoSave.js";
3
+ import { useSave as s } from "../../composables/useSave.js";
4
+ const f = /* @__PURE__ */ t({
6
5
  __name: "AutoSaveController",
7
- setup(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 };
6
+ setup(a) {
7
+ const { save: e } = s(), o = () => e(!1, !0);
8
+ return r(o), { __sfc: !0, save: e, backgroundSave: o };
10
9
  }
11
10
  });
12
11
  export {
13
- v as default
12
+ f as default
14
13
  };
@@ -4,7 +4,7 @@ import d from "../../../_virtual/_plugin-vue2_normalizer.js";
4
4
  var u = function() {
5
5
  var s, i, n, a;
6
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) {
7
+ return e("div", { staticClass: "d-f editor-actions" }, [t.isVersionHistoryButtonVisible ? e(t.InButtonV2, { attrs: { id: "guido__history-button", "left-icon": "line-architect-version-history", styling: "ghost", type: "secondary", "disabled-status": t.editorStore.isVersionHistoryButtonDisabled, "label-text-status": !1, "selected-status": t.editorStore.isVersionHistoryOpen, "tooltip-options": t.getTooltipOptions("guido__history-button"), "tooltip-text": t.versionHistoryTooltipText }, on: { click: t.handleVersionHistory } }) : o._e(), e(t.InButtonV2, { attrs: { id: "guido__export-button", "left-icon": "line-export", styling: "ghost", type: "secondary", "disabled-status": t.editorStore.isExportButtonDisabled, "label-text-status": !1, "loading-status": t.isExporting, "tooltip-options": t.getTooltipOptions("guido__export-button"), "tooltip-text": t.trans("newsletter.export") }, on: { click: t.handleExport } }), (i = (s = t.config) == null ? void 0 : s.features) != null && i.saveAsTemplate ? e(t.InButtonV2, { attrs: { id: "guido__save-as-button", "left-icon": "line-newsletter-save-as-template", styling: "ghost", type: "secondary", "disabled-status": t.editorStore.isSaveAsButtonDisabled, "label-text-status": !1, "tooltip-options": t.getTooltipOptions("guido__save-as-button"), "tooltip-text": t.trans("newsletter.save-templates") }, on: { click: t.handleSaveAs } }) : o._e(), (a = (n = t.config) == null ? void 0 : n.features) != null && a.testMessage ? e(t.InButtonV2, { attrs: { id: "guido__test-button", "left-icon": "line-architect-test-journey", styling: "ghost", type: "secondary", "disabled-status": t.editorStore.isTestButtonDisabled, "label-text-status": !1, "tooltip-options": t.getTooltipOptions("guido__test-button", { staticPosition: "bottom right" }), "tooltip-text": t.trans("newsletter.test-email") }, on: { click: t.handleTestEmail } }) : o._e(), t.editorStore.isPreviewModeOpen ? o._e() : e(t.InButtonV2, { staticClass: "ml-3", attrs: { id: "guido__save-button", "label-text": "Save", "disabled-status": !t.isSaving && t.editorStore.isSaveButtonDisabled, "loading-status": t.isSaving }, on: { click: function(r) {
8
8
  return t.handleSave(!1);
9
9
  } } }), e(t.MigrationConfirmModal, { ref: "migrationModalRef", on: { confirm: function(r) {
10
10
  return t.executeSave(!1);
@@ -15,7 +15,7 @@ var u = function() {
15
15
  c,
16
16
  !1,
17
17
  null,
18
- "2cccbd44"
18
+ "c61cc8ea"
19
19
  );
20
20
  const v = p.exports;
21
21
  export {