@useinsider/guido 3.19.0-beta.f02eaa1 → 3.19.0-beta.f8f0007

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 (50) hide show
  1. package/dist/components/Guido.vue.js +1 -1
  2. package/dist/components/Guido.vue2.js +33 -33
  3. package/dist/components/organisms/base/Toaster.vue2.js +13 -12
  4. package/dist/components/organisms/extensions/recommendation/AssignStrategyDrawer.vue.js +9 -7
  5. package/dist/components/organisms/extensions/recommendation/AssignStrategyDrawer.vue2.js +69 -52
  6. package/dist/components/organisms/extensions/recommendation/RemoveStrategyModal.vue2.js +28 -44
  7. package/dist/components/organisms/header/EditorActions.vue.js +4 -4
  8. package/dist/components/organisms/header/EditorActions.vue2.js +23 -25
  9. package/dist/components/organisms/onboarding/RecommendationStrategyOnboarding.vue.js +3 -3
  10. package/dist/components/organisms/onboarding/RecommendationStrategyOnboarding.vue2.js +21 -20
  11. package/dist/composables/useActionsApi.js +52 -47
  12. package/dist/composables/useCodeEditorApi.js +23 -9
  13. package/dist/composables/useCustomInterfaceAppearance.js +61 -51
  14. package/dist/composables/useHtmlValidator.js +87 -82
  15. package/dist/composables/useHttp.js +55 -44
  16. package/dist/composables/useRecommendation.js +40 -35
  17. package/dist/composables/useStripo.js +30 -30
  18. package/dist/composables/useToaster.js +14 -20
  19. package/dist/composables/useTranslations.js +3 -2
  20. package/dist/composables/useVersionHistoryApi.js +33 -24
  21. package/dist/enums/extensions/recommendationBlock.js +32 -25
  22. package/dist/extensions/Blocks/Recommendation/block.js +61 -42
  23. package/dist/extensions/Blocks/Recommendation/constants/defaultConfig.js +21 -20
  24. package/dist/extensions/Blocks/Recommendation/controls/main/index.js +63 -58
  25. package/dist/extensions/Blocks/Recommendation/controls/main/strategy.js +109 -78
  26. package/dist/extensions/Blocks/Recommendation/controls/main/utils.js +96 -97
  27. package/dist/extensions/Blocks/Recommendation/store/recommendation.js +209 -92
  28. package/dist/extensions/Blocks/Recommendation/utils/legacyStrategyMigration.js +1 -1
  29. package/dist/extensions/Blocks/Recommendation/utils/nodeConfigWriter.js +26 -16
  30. package/dist/extensions/Blocks/Recommendation/utils/strategyCommit.js +24 -0
  31. package/dist/extensions/Blocks/Recommendation/validation/requiredFields.js +21 -12
  32. package/dist/guido.css +1 -1
  33. package/dist/src/enums/extensions/recommendationBlock.d.ts +2 -0
  34. package/dist/src/extensions/Blocks/Recommendation/block.d.ts +10 -0
  35. package/dist/src/extensions/Blocks/Recommendation/constants/defaultConfig.d.ts +1 -0
  36. package/dist/src/extensions/Blocks/Recommendation/constants/index.d.ts +1 -1
  37. package/dist/src/extensions/Blocks/Recommendation/controls/main/index.d.ts +2 -0
  38. package/dist/src/extensions/Blocks/Recommendation/controls/main/strategy.d.ts +8 -0
  39. package/dist/src/extensions/Blocks/Recommendation/controls/main/utils.d.ts +7 -6
  40. package/dist/src/extensions/Blocks/Recommendation/store/recommendation.d.ts +92 -0
  41. package/dist/src/extensions/Blocks/Recommendation/utils/legacyStrategyMigration.d.ts +1 -1
  42. package/dist/src/extensions/Blocks/Recommendation/utils/strategyCommit.d.ts +14 -0
  43. package/dist/src/extensions/Blocks/Recommendation/validation/requiredFields.d.ts +4 -0
  44. package/dist/src/utils/stripoEditorApi.d.ts +4 -0
  45. package/dist/static/styles/components/recommendation-strategy.css.js +34 -4
  46. package/dist/static/styles/components/skeleton.css.js +23 -0
  47. package/dist/stores/unsubscribe.js +3 -3
  48. package/dist/utils/stripoEditorApi.js +11 -0
  49. package/dist/utils/templatePreparation.js +55 -55
  50. package/package.json +1 -1
@@ -12,7 +12,7 @@ var t = function() {
12
12
  s,
13
13
  !1,
14
14
  null,
15
- "17b3c665"
15
+ "36867e2e"
16
16
  );
17
17
  const g = n.exports;
18
18
  export {
@@ -1,4 +1,4 @@
1
- import { defineComponent as re, defineAsyncComponent as m, ref as O, computed as u, watch as P, onMounted as se, onUnmounted as ae } from "vue";
1
+ import { defineComponent as re, defineAsyncComponent as m, ref as O, computed as u, watch as x, onMounted as se, onUnmounted as ae } from "vue";
2
2
  import { useCortexBlueprintBridge as ie } from "../composables/useCortexBlueprintBridge.js";
3
3
  import { useEditorLock as ce } from "../composables/useEditorLock.js";
4
4
  import { provideGuidoActions as de } from "../composables/useGuidoActions.js";
@@ -6,10 +6,10 @@ import { useGuidoStateBridge as me } from "../composables/useGuidoStateBridge.js
6
6
  import { usePartner as le } from "../composables/usePartner.js";
7
7
  import { useStripo as ue } from "../composables/useStripo.js";
8
8
  import { useTimerClone as pe } from "../composables/useTimerClone.js";
9
- import { migrate as x } from "../config/migrator/index.js";
10
- import { ModuleFolderDefaults as W } from "../enums/defaults.js";
9
+ import { migrate as W } from "../config/migrator/index.js";
10
+ import { ModuleFolderDefaults as G } from "../enums/defaults.js";
11
11
  import { RIBBON_SELECTOR as fe } from "../enums/onboarding.js";
12
- import { useRecommendationExtensionStore as G } from "../extensions/Blocks/Recommendation/store/recommendation.js";
12
+ import { useRecommendationExtensionStore as h } from "../extensions/Blocks/Recommendation/store/recommendation.js";
13
13
  import ye from "./organisms/AutoSaveController.vue.js";
14
14
  import ge from "./organisms/base/Toaster.vue.js";
15
15
  import ve from "./organisms/extensions/recommendation/FilterSelectionDrawer.vue.js";
@@ -43,12 +43,12 @@ const tt = /* @__PURE__ */ re({
43
43
  () => import("./organisms/extensions/recommendation/RemoveStrategyModal.vue.js")
44
44
  ), Q = m(
45
45
  () => import("./organisms/extensions/recommendation/LegacyStrategyUpdatedModal.vue.js")
46
- ), h = O(), p = O(), f = De(), E = Fe(), o = Ce();
46
+ ), E = O(), p = O(), f = De(), w = Fe(), o = Ce();
47
47
  a.ready && o.init(a.config);
48
- const c = H(), X = ke(), l = u(() => c.hasChanges), { isTestPartner: Y } = le(), w = () => {
48
+ const c = H(), X = ke(), l = u(() => c.hasChanges), { isTestPartner: Y } = le(), C = () => {
49
49
  var t;
50
- return (t = h.value) == null ? void 0 : t.handleSave(!0);
51
- }, C = (t) => {
50
+ return (t = E.value) == null ? void 0 : t.handleSave(!0);
51
+ }, D = (t) => {
52
52
  c.loadingStatus = t;
53
53
  };
54
54
  ie(), me();
@@ -59,16 +59,16 @@ const tt = /* @__PURE__ */ re({
59
59
  userId: o.userId,
60
60
  username: o.username,
61
61
  partnerName: o.partnerName,
62
- savedModulesFolderName: ((t = o.editor) == null ? void 0 : t.savedModulesFolderName) || W.SAVED_MODULES,
63
- defaultModulesFolderName: ((e = o.editor) == null ? void 0 : e.defaultModulesFolderName) || W.DEFAULT_MODULES
62
+ savedModulesFolderName: ((t = o.editor) == null ? void 0 : t.savedModulesFolderName) || G.SAVED_MODULES,
63
+ defaultModulesFolderName: ((e = o.editor) == null ? void 0 : e.defaultModulesFolderName) || G.DEFAULT_MODULES
64
64
  };
65
- }, { initPlugin: D, preloadRuntime: k } = ue(), { runExclusive: T, beginMount: F, isCurrentMount: M } = ce();
65
+ }, { initPlugin: k, preloadRuntime: T } = ue(), { runExclusive: F, beginMount: M, isCurrentMount: R } = ce();
66
66
  let g = 0;
67
- const { getDefaultTemplate: I } = we(), { cloneTimersOnSave: L, hasTimerBlocks: R } = pe(), Z = u(() => {
67
+ const { getDefaultTemplate: I } = we(), { cloneTimersOnSave: L, hasTimerBlocks: B } = pe(), Z = u(() => {
68
68
  var t;
69
69
  return !((t = o.ui) != null && t.showHeader);
70
70
  }), ee = u(() => o.isFeatureEnabled("reusableRecommendationStrategy")), te = u(
71
- () => !!G().recommendationConfigs.strategyId
71
+ () => !!h().recommendationConfigs.strategyId
72
72
  );
73
73
  de({
74
74
  onBack: () => {
@@ -85,12 +85,12 @@ const tt = /* @__PURE__ */ re({
85
85
  console.debug("guido:test-email:click"), r("test-email:click");
86
86
  }
87
87
  });
88
- const B = (t) => {
88
+ const U = (t) => {
89
89
  console.debug("dynamic-content:close", t), f.setSelectedDynamicContent(t), document.dispatchEvent(new CustomEvent("dynamic-content:close", { detail: t }));
90
- }, U = () => {
90
+ }, A = () => {
91
91
  console.debug("dynamic-content:close", "Without Data"), document.dispatchEvent(new CustomEvent("dynamic-content:close", { detail: { text: "", value: "" } }));
92
92
  };
93
- P(() => l.value, () => {
93
+ x(() => l.value, () => {
94
94
  r("on-change", l.value);
95
95
  });
96
96
  const v = (t) => {
@@ -106,42 +106,42 @@ const tt = /* @__PURE__ */ re({
106
106
  var t;
107
107
  try {
108
108
  o.initialized || o.init(a.config), c.templateId = o.templateId;
109
- const e = o.template, s = (e == null ? void 0 : e.html) || "", d = (e == null ? void 0 : e.css) || "", A = (e == null ? void 0 : e.preselectedDynamicContent) || [];
110
- E.selectedUnsubscribePages = (e == null ? void 0 : e.selectedUnsubscribePages) || [];
109
+ const e = o.template, s = (e == null ? void 0 : e.html) || "", d = (e == null ? void 0 : e.css) || "", P = (e == null ? void 0 : e.preselectedDynamicContent) || [];
110
+ w.selectedUnsubscribePages = (e == null ? void 0 : e.selectedUnsubscribePages) || [];
111
111
  const _ = ((t = e == null ? void 0 : e.migration) == null ? void 0 : t.recommendationConfigs) ?? {}, N = o.isFeatureEnabled("linkTrackingIds");
112
112
  let n = {
113
- html: s && await x(s, _),
113
+ html: s && await W(s, _),
114
114
  css: d
115
115
  };
116
- n.html || (n = await I(), n.html = await x(n.html, _));
116
+ n.html || (n = await I(), n.html = await W(n.html, _));
117
117
  const oe = N ? $(n.html, (e == null ? void 0 : e.trackIdCounter) || 0) : 0;
118
- R(n.html) && (n.html = await L(n.html)), N && (c.trackIdSessionFloor = Math.max(oe, $(n.html)));
118
+ B(n.html) && (n.html = await L(n.html)), N && (c.trackIdSessionFloor = Math.max(oe, $(n.html)));
119
119
  const ne = {
120
- preselectedDynamicContentList: A,
120
+ preselectedDynamicContentList: P,
121
121
  onReady: () => {
122
122
  console.debug("guido:ready"), r("ready");
123
123
  }
124
124
  };
125
- g = F(), await D(n, y(), ne), f.selectedDynamicContentList = A;
125
+ g = M(), await k(n, y(), ne), f.selectedDynamicContentList = P;
126
126
  } catch (e) {
127
127
  console.error("Failed to initialize Stripo editor:", e);
128
128
  }
129
129
  };
130
130
  return se(async () => {
131
131
  var e;
132
- console.debug("Guido says happy coding 🎉"), console.debug("🚗 Ka-Chow"), G().$reset(), H().$reset(), Te().$reset(), S();
132
+ console.debug("Guido says happy coding 🎉"), console.debug("🚗 Ka-Chow"), h().$reset(), H().$reset(), Te().$reset(), S();
133
133
  const t = (e = p.value) == null ? void 0 : e.parentElement;
134
- if (t && (i = new ResizeObserver(S), i.observe(t)), k(), a.ready)
134
+ if (t && (i = new ResizeObserver(S), i.observe(t)), T(), a.ready)
135
135
  await b();
136
136
  else {
137
- const s = P(() => a.ready, (d) => {
137
+ const s = x(() => a.ready, (d) => {
138
138
  d && (s(), b());
139
139
  });
140
140
  }
141
141
  document.addEventListener("dynamic-content:open", v);
142
142
  }), ae(() => {
143
- i == null || i.disconnect(), document.removeEventListener("dynamic-content:open", v), T(async () => {
144
- if (M(g))
143
+ i == null || i.disconnect(), document.removeEventListener("dynamic-content:open", v), h().disposeStrategyPageReturn(), F(async () => {
144
+ if (R(g))
145
145
  try {
146
146
  window.UIEditor.removeEditor();
147
147
  } catch {
@@ -150,13 +150,13 @@ const tt = /* @__PURE__ */ re({
150
150
  }), o.reset();
151
151
  }), q({
152
152
  dynamicContent: {
153
- insert: B,
154
- close: U
153
+ insert: U,
154
+ close: A
155
155
  },
156
156
  hasChanges: l,
157
- saveSilent: w,
158
- setLoading: C
159
- }), { __sfc: !0, PreviewContainer: K, OnboardingWrapper: V, AssignStrategyDrawer: j, RemoveStrategyModal: J, LegacyStrategyUpdatedModal: Q, headerWrapperRef: h, wrapperRef: p, dynamicContentStore: f, unsubscribeStore: E, props: a, configStore: o, editorStore: c, previewStore: X, hasChanges: l, isTestPartner: Y, saveSilent: w, setLoading: C, emit: r, buildMetadata: y, initPlugin: D, preloadRuntime: k, runExclusive: T, beginMount: F, isCurrentMount: M, mountGeneration: g, getDefaultTemplate: I, cloneTimersOnSave: L, hasTimerBlocks: R, noHeader: Z, isRrsEnabled: ee, hasAssignedStrategy: te, insertDynamicContent: B, closeDynamicContent: U, handleDynamicContentOpen: v, ribbonObserver: i, updateRibbonOffset: S, startEditor: b, AutoSaveController: ye, Toaster: ge, FilterSelectionDrawer: ve, HeaderWrapper: Se, LoadingWrapper: be, SaveAsTemplateDrawer: he, UnsubscribeWrapper: Ee };
157
+ saveSilent: C,
158
+ setLoading: D
159
+ }), { __sfc: !0, PreviewContainer: K, OnboardingWrapper: V, AssignStrategyDrawer: j, RemoveStrategyModal: J, LegacyStrategyUpdatedModal: Q, headerWrapperRef: E, wrapperRef: p, dynamicContentStore: f, unsubscribeStore: w, props: a, configStore: o, editorStore: c, previewStore: X, hasChanges: l, isTestPartner: Y, saveSilent: C, setLoading: D, emit: r, buildMetadata: y, initPlugin: k, preloadRuntime: T, runExclusive: F, beginMount: M, isCurrentMount: R, mountGeneration: g, getDefaultTemplate: I, cloneTimersOnSave: L, hasTimerBlocks: B, noHeader: Z, isRrsEnabled: ee, hasAssignedStrategy: te, insertDynamicContent: U, closeDynamicContent: A, handleDynamicContentOpen: v, ribbonObserver: i, updateRibbonOffset: S, startEditor: b, AutoSaveController: ye, Toaster: ge, FilterSelectionDrawer: ve, HeaderWrapper: Se, LoadingWrapper: be, SaveAsTemplateDrawer: he, UnsubscribeWrapper: Ee };
160
160
  }
161
161
  });
162
162
  export {
@@ -1,18 +1,19 @@
1
- import { defineComponent as a, ref as c, computed as i, onBeforeUnmount as u } from "vue";
2
- import { useToasterStore as f } from "../../../stores/toaster.js";
3
- import { InToasts as m } from "@useinsider/design-system-vue";
4
- const d = /* @__PURE__ */ a({
1
+ import { defineComponent as c, ref as i, computed as u, onBeforeUnmount as m } from "vue";
2
+ import { useToaster as f } from "../../../composables/useToaster.js";
3
+ import { useToasterStore as p } from "../../../stores/toaster.js";
4
+ import { InToasts as l } from "@useinsider/design-system-vue";
5
+ const x = /* @__PURE__ */ c({
5
6
  __name: "Toaster",
6
- setup(p) {
7
- const t = f(), o = c(null), r = i(() => t.actionButton ? [{ text: t.actionButton.text }] : []), s = () => {
8
- t.actionButton && t.actionButton.onClick(), t.hideToaster();
7
+ setup(_) {
8
+ const t = p(), { hideToaster: o } = f(), e = i(null), s = u(() => t.actionButton ? [{ text: t.actionButton.text }] : []), a = () => {
9
+ t.actionButton && t.actionButton.onClick(), o();
9
10
  };
10
- return u(() => {
11
- var e, n;
12
- t.$reset(), (n = (e = o.value) == null ? void 0 : e.$el) == null || n.remove();
13
- }), { __sfc: !0, store: t, toastRef: o, actionButtonsConfig: r, handleActionClick: s, InToasts: m };
11
+ return m(() => {
12
+ var n, r;
13
+ o(), t.$reset(), (r = (n = e.value) == null ? void 0 : n.$el) == null || r.remove();
14
+ }), { __sfc: !0, store: t, hideToaster: o, toastRef: e, actionButtonsConfig: s, handleActionClick: a, InToasts: l };
14
15
  }
15
16
  });
16
17
  export {
17
- d as default
18
+ x as default
18
19
  };
@@ -1,19 +1,21 @@
1
- import r from "./AssignStrategyDrawer.vue2.js";
1
+ import s from "./AssignStrategyDrawer.vue2.js";
2
2
  /* empty css */
3
3
  /* empty css */
4
4
  import o from "../../../../_virtual/_plugin-vue2_normalizer.js";
5
5
  var a = function() {
6
- var e = this, s = e._self._c, t = e._self._setupProxy;
7
- return t.store.assignStrategyDrawerStatus ? s(t.OrgStrategyDetailModal, { staticClass: "assign-strategy-drawer", attrs: { "description-status": "", show: "", "description-text": t.drawerDescription, "footer-button-group-options": t.footerButtonGroupOptions, strategy: t.selectedStrategy ?? {}, "title-text": t.trans("gpt-app-builder.assign-recommendation-strategy") }, on: { close: t.closeDrawer, primaryClick: t.assignStrategy }, scopedSlots: e._u([{ key: "contentTop", fn: function() {
8
- return [s("div", { staticClass: "assign-strategy-drawer-content px-5 py-5" }, [s(t.OrgStrategyDropdown, { staticClass: "assign-strategy-select", attrs: { id: "assign-strategy-select", "info-box-position": "bottom right", "create-button-visible": !1, loading: t.store.strategiesLoading || t.store.legacyConversionLoading, "placeholder-text": t.trans("smart-recommender.select-recommendation-strategy"), "selected-strategy-id": t.selectedStrategyId, state: t.showSelectionError ? "error" : "default", "state-message": t.showSelectionError ? t.trans("ds-steps.select-strategy-tooltip") : "", strategies: t.strategyOptions }, on: { select: t.onSelect } })], 1)];
9
- }, proxy: !0 }], null, !1, 1208053566) }) : e._e();
6
+ var e = this, r = e._self._c, t = e._self._setupProxy;
7
+ return t.store.assignStrategyDrawerStatus ? r(t.OrgStrategyDetailModal, { staticClass: "assign-strategy-drawer", attrs: { "description-status": "", show: "", "description-text": t.drawerDescription, "footer-button-group-options": t.footerButtonGroupOptions, strategy: t.selectedStrategy ?? {}, "title-text": t.trans("gpt-app-builder.assign-recommendation-strategy") }, on: { close: t.closeDrawer, primaryClick: t.assignStrategy }, scopedSlots: e._u([{ key: "contentTop", fn: function() {
8
+ return [r("div", { staticClass: "assign-strategy-drawer-content px-5 py-5" }, [r(t.OrgStrategyDropdown, { staticClass: "assign-strategy-select", attrs: { id: "assign-strategy-select", "create-button-visible": "", "info-box-position": "bottom right", loading: t.store.strategiesLoading || t.store.legacyConversionLoading, "placeholder-text": t.trans("smart-recommender.select-recommendation-strategy"), "selected-strategy-id": t.selectedStrategyId, state: t.showSelectionError ? "error" : "default", "state-message": t.showSelectionError ? t.trans("ds-steps.select-strategy-tooltip") : "", strategies: t.strategyOptions }, on: { create: function(l) {
9
+ return t.store.openStrategyCreation();
10
+ }, infoBoxButtonClick: t.onInfoBoxButtonClick, select: t.onSelect } })], 1)];
11
+ }, proxy: !0 }], null, !1, 659108535) }) : e._e();
10
12
  }, n = [], i = /* @__PURE__ */ o(
11
- r,
13
+ s,
12
14
  a,
13
15
  n,
14
16
  !1,
15
17
  null,
16
- "6bbe5862"
18
+ "6ce48dfd"
17
19
  );
18
20
  const y = i.exports;
19
21
  export {
@@ -1,52 +1,51 @@
1
- import { defineComponent as E, defineAsyncComponent as S, ref as T, computed as o, watch as x } from "vue";
1
+ import { defineComponent as B, defineAsyncComponent as T, ref as w, computed as n, watch as k } from "vue";
2
2
  import "@useinsider/design-system-organisms/style";
3
- import { useToaster as h } from "../../../../composables/useToaster.js";
4
- import { useTranslations as C } from "../../../../composables/useTranslations.js";
5
- import { DOTTED_DATE_LOCALE as B } from "../../../../enums/date.js";
6
- import { URLS as L } from "../../../../enums/extensions/recommendationBlock.js";
7
- import { ToasterTypeOptions as d } from "../../../../enums/toaster.js";
8
- import { useRecommendationExtensionStore as I } from "../../../../extensions/Blocks/Recommendation/store/recommendation.js";
9
- import N from "./StrategyInfoBoxContent.vue.js";
10
- import { formatShortDate as k } from "../../../../utils/dateUtil.js";
11
- import { asText as _ } from "../../../../utils/genericUtil.js";
12
- import { escapeHtml as b } from "../../../../utils/htmlEscape.js";
13
- import { InSkeleton as P } from "@useinsider/design-system-vue";
14
- const Z = /* @__PURE__ */ E({
3
+ import { useToaster as b } from "../../../../composables/useToaster.js";
4
+ import { useTranslations as L } from "../../../../composables/useTranslations.js";
5
+ import { DOTTED_DATE_LOCALE as N } from "../../../../enums/date.js";
6
+ import { URLS as R } from "../../../../enums/extensions/recommendationBlock.js";
7
+ import { ToasterTypeOptions as u } from "../../../../enums/toaster.js";
8
+ import { useRecommendationExtensionStore as P } from "../../../../extensions/Blocks/Recommendation/store/recommendation.js";
9
+ import { commitStrategyChange as D } from "../../../../extensions/Blocks/Recommendation/utils/strategyCommit.js";
10
+ import U from "./StrategyInfoBoxContent.vue.js";
11
+ import { formatShortDate as M } from "../../../../utils/dateUtil.js";
12
+ import { asText as O } from "../../../../utils/genericUtil.js";
13
+ import { escapeHtml as G } from "../../../../utils/htmlEscape.js";
14
+ import { InSkeleton as $ } from "@useinsider/design-system-vue";
15
+ const st = /* @__PURE__ */ B({
15
16
  __name: "AssignStrategyDrawer",
16
- setup(U) {
17
- const c = () => import("@useinsider/design-system-organisms"), g = (t, r) => ({
18
- render: (s) => s(P, { props: { sizing: { width: t, height: r } } })
19
- }), v = S({
20
- loader: async () => (await c()).OrgStrategyDetailModal,
21
- loadingComponent: g(480, 240),
17
+ setup(H) {
18
+ const g = () => import("@useinsider/design-system-organisms"), p = (t, r) => ({
19
+ render: (o) => o($, { props: { sizing: { width: t, height: r } } })
20
+ }), E = T({
21
+ loader: async () => (await g()).OrgStrategyDetailModal,
22
+ loadingComponent: p(480, 240),
22
23
  delay: 0
23
- }), D = S({
24
- loader: async () => (await c()).OrgStrategyDropdown,
25
- loadingComponent: g(240, 42),
26
- delay: 0
27
- }), a = C(), e = I(), { showToaster: n } = h(), i = T(null), m = "legacy", l = T(!1), w = o(() => e.assignStrategyDrawerStatus ? a("email-editor.assign-strategy-description", { url: L.RECOMMENDATION_STRATEGIES_PANEL_PATH }) : "");
28
- x(() => e.assignStrategyDrawerStatus, (t) => {
24
+ }), I = T({
25
+ loader: async () => (await g()).OrgStrategyDropdown
26
+ }), i = "guido-edit-strategy-", a = L(), e = P(), { showToaster: c } = b(), s = w(null), m = "legacy", l = w(!1), x = n(() => e.assignStrategyDrawerStatus ? a("email-editor.assign-strategy-description", { url: R.RECOMMENDATION_STRATEGIES_PANEL_PATH }) : "");
27
+ k(() => e.assignStrategyDrawerStatus, (t) => {
29
28
  if (!t)
30
29
  return;
31
30
  const { strategyId: r } = e.recommendationConfigs;
32
- i.value = r || (e.isLegacyStrategyBlock ? m : null), l.value = !1, e.fetchStrategies().catch(() => {
33
- n({
34
- type: d.Error,
31
+ s.value = r || (e.isLegacyStrategyBlock ? m : null), l.value = !1, e.invalidateStrategies(), e.fetchStrategies().catch(() => {
32
+ c({
33
+ type: u.Error,
35
34
  message: a("discovery-strategy.error-description")
36
35
  });
37
36
  });
38
37
  });
39
- const y = (t) => {
40
- const r = _(t.updated_at || t.created_at);
38
+ const f = (t) => {
39
+ const r = O(t.updated_at || t.created_at);
41
40
  if (!r)
42
41
  return "";
43
- const s = k(r, B);
44
- return a("recommendation-strategy.last-updated-on", { value: s });
45
- }, u = o(() => ({
42
+ const o = M(r, N);
43
+ return a("recommendation-strategy.last-updated-on", { value: o });
44
+ }, S = n(() => ({
46
45
  text: a("ds-steps.legacy-strategy"),
47
46
  value: m,
48
47
  hidden: !0
49
- })), p = o(() => e.strategies.map((t) => ({
48
+ })), d = n(() => e.strategies.map((t) => ({
50
49
  text: t.name,
51
50
  value: t.strategy_id,
52
51
  infoBoxProps: {
@@ -54,16 +53,33 @@ const Z = /* @__PURE__ */ E({
54
53
  theme: "light",
55
54
  variant: "information",
56
55
  className: "assign-strategy-info-box",
57
- titleText: b(_(t.name)),
56
+ titleText: G(O(t.name)),
58
57
  descriptionStatus: !0,
59
- descriptionText: y(t),
60
- slot: N,
61
- slotProps: { strategy: t }
58
+ descriptionText: f(t),
59
+ slot: U,
60
+ slotProps: { strategy: t },
61
+ // The info box drops the option's value/text, so the id is the only channel
62
+ // that can carry the strategy back to the click handler.
63
+ buttonOptions: [{
64
+ id: `${i}${t.strategy_id}`,
65
+ text: a("eureka.edit-strategy"),
66
+ type: "text",
67
+ // Resolved from Guido's own public/sprite.svg by InIcons; an unknown name would
68
+ // silently render blank space instead of failing.
69
+ icon: "line-open-website"
70
+ }]
62
71
  }
63
- }))), O = o(() => e.isLegacyStrategyBlock ? [u.value, ...p.value] : p.value), f = o(() => {
64
- const t = e.strategies.find((r) => String(r.strategy_id) === String(i.value ?? ""));
72
+ }))), A = n(() => e.isLegacyStrategyBlock ? [S.value, ...d.value] : d.value), h = (t) => {
73
+ var _;
74
+ const r = (_ = t == null ? void 0 : t.id) != null && _.startsWith(i) ? t.id.slice(i.length) : "";
75
+ if (!r)
76
+ return;
77
+ const o = e.currentRecommendationId, y = e.recommendationConfigs.strategyId === r;
78
+ e.openStrategyEdit(r) && (String(s.value ?? "") === r && (s.value = null), y && (e.removeStrategy(), o !== null && D(o, "Removed recommendation strategy")));
79
+ }, v = n(() => {
80
+ const t = e.strategies.find((r) => String(r.strategy_id) === String(s.value ?? ""));
65
81
  return t ? { ...t, fallback_config: null } : null;
66
- }), A = o(() => ({
82
+ }), C = n(() => ({
67
83
  primaryButton: {
68
84
  styling: "solid",
69
85
  type: "primary",
@@ -75,10 +91,10 @@ const Z = /* @__PURE__ */ E({
75
91
  labelText: a("products.cancel")
76
92
  }
77
93
  }));
78
- return { __sfc: !0, loadOrganisms: c, skeleton: g, OrgStrategyDetailModal: v, OrgStrategyDropdown: D, trans: a, store: e, showToaster: n, selectedStrategyId: i, LEGACY_OPTION_VALUE: m, showSelectionError: l, drawerDescription: w, lastUpdatedText: y, legacyStrategyOption: u, remoteStrategyOptions: p, strategyOptions: O, selectedStrategy: f, footerButtonGroupOptions: A, closeDrawer: () => {
94
+ return { __sfc: !0, loadOrganisms: g, skeleton: p, OrgStrategyDetailModal: E, OrgStrategyDropdown: I, EDIT_BUTTON_ID_PREFIX: i, trans: a, store: e, showToaster: c, selectedStrategyId: s, LEGACY_OPTION_VALUE: m, showSelectionError: l, drawerDescription: x, lastUpdatedText: f, legacyStrategyOption: S, remoteStrategyOptions: d, strategyOptions: A, onInfoBoxButtonClick: h, selectedStrategy: v, footerButtonGroupOptions: C, closeDrawer: () => {
79
95
  e.closeAssignStrategyDrawer();
80
96
  }, assignStrategy: async () => {
81
- const t = f.value;
97
+ const t = v.value;
82
98
  if (!t) {
83
99
  l.value = !0;
84
100
  return;
@@ -86,25 +102,26 @@ const Z = /* @__PURE__ */ E({
86
102
  let r = "";
87
103
  try {
88
104
  r = await e.resolveStrategyUrlTemplate(t, e.recommendationConfigs.currencySettings.value);
89
- } catch (s) {
90
- console.error("[AssignStrategyDrawer] resolveStrategyUrlTemplate failed", s);
105
+ } catch (y) {
106
+ console.error("[AssignStrategyDrawer] resolveStrategyUrlTemplate failed", y);
91
107
  }
92
108
  if (!r) {
93
- n({
94
- type: d.Error,
109
+ c({
110
+ type: u.Error,
95
111
  message: a("email-editor.strategy-assign-failed", { strategyName: t.name })
96
112
  });
97
113
  return;
98
114
  }
99
- e.assignStrategy(t), n({
100
- type: d.Success,
115
+ const o = e.currentRecommendationId;
116
+ e.assignStrategy(t), c({
117
+ type: u.Success,
101
118
  message: a("email-editor.strategy-assigned-success", { strategyName: t.name })
102
- }), e.closeAssignStrategyDrawer();
119
+ }), e.closeAssignStrategyDrawer(), o !== null && await D(o, "Assigned recommendation strategy");
103
120
  }, onSelect: (t) => {
104
- i.value = t.value, l.value = !1;
121
+ s.value = t.value, l.value = !1;
105
122
  } };
106
123
  }
107
124
  });
108
125
  export {
109
- Z as default
126
+ st as default
110
127
  };
@@ -1,59 +1,43 @@
1
- import { defineComponent as y, computed as n } from "vue";
2
- import f from "../../../wrappers/WpModal.vue.js";
3
- import { useToaster as u } from "../../../../composables/useToaster.js";
4
- import { useTranslations as _ } from "../../../../composables/useTranslations.js";
5
- import { ToasterTypeOptions as R } from "../../../../enums/toaster.js";
6
- import "../../../../extensions/Blocks/Recommendation/constants/selectors.js";
7
- import { CURRENT_CONFIG_VERSION as T } from "../../../../extensions/Blocks/Recommendation/constants/defaultConfig.js";
8
- import { useRecommendationExtensionStore as v } from "../../../../extensions/Blocks/Recommendation/store/recommendation.js";
9
- import { commitBlockChangeOutsidePanel as N } from "../../../../extensions/Blocks/Recommendation/utils/nodeConfigWriter.js";
10
- import { escapeHtml as S } from "../../../../utils/htmlEscape.js";
11
- const w = /* @__PURE__ */ y({
1
+ import { defineComponent as p, computed as a } from "vue";
2
+ import d from "../../../wrappers/WpModal.vue.js";
3
+ import { useToaster as l } from "../../../../composables/useToaster.js";
4
+ import { useTranslations as y } from "../../../../composables/useTranslations.js";
5
+ import { ToasterTypeOptions as u } from "../../../../enums/toaster.js";
6
+ import { useRecommendationExtensionStore as f } from "../../../../extensions/Blocks/Recommendation/store/recommendation.js";
7
+ import { commitStrategyChange as _ } from "../../../../extensions/Blocks/Recommendation/utils/strategyCommit.js";
8
+ import { escapeHtml as T } from "../../../../utils/htmlEscape.js";
9
+ const B = /* @__PURE__ */ p({
12
10
  __name: "RemoveStrategyModal",
13
- setup(h) {
14
- const t = _(), e = v(), { showToaster: a } = u(), i = n(() => ({
11
+ setup(v) {
12
+ const e = y(), t = f(), { showToaster: n } = l(), i = a(() => ({
15
13
  cancelOrBackButton: {
16
14
  type: "secondary",
17
- labelText: t("products.cancel"),
15
+ labelText: e("products.cancel"),
18
16
  styling: "ghost"
19
17
  },
20
18
  primaryButton: {
21
19
  type: "danger",
22
- labelText: t("discovery-strategy.remove")
20
+ labelText: e("discovery-strategy.remove")
23
21
  }
24
- })), m = n(() => {
25
- var r;
26
- const { strategyId: o } = e.recommendationConfigs;
27
- return o ? ((r = e.assignedStrategy) == null ? void 0 : r.name) || `#${o}` : t("ds-steps.legacy-strategy");
28
- }), s = "__STRATEGY_NAME__", d = n(() => t("email-editor.remove-strategy-confirm-message", { strategyName: s }).split(s)), c = () => {
29
- e.closeRemoveStrategyModal();
22
+ })), m = a(() => {
23
+ var s;
24
+ const { strategyId: o } = t.recommendationConfigs;
25
+ return o ? ((s = t.assignedStrategy) == null ? void 0 : s.name) || `#${o}` : e("ds-steps.legacy-strategy");
26
+ }), r = "__STRATEGY_NAME__", g = a(() => e("email-editor.remove-strategy-confirm-message", { strategyName: r }).split(r)), c = () => {
27
+ t.closeRemoveStrategyModal();
30
28
  };
31
- return { __sfc: !0, trans: t, store: e, showToaster: a, footerButtonOptions: i, strategyName: m, NAME_TOKEN: s, messageParts: d, close: c, handleConfirm: async () => {
32
- const o = m.value, r = e.currentRecommendationId;
33
- e.removeStrategy(), c();
34
- const { strategyId: l, size: g } = e.recommendationConfigs;
35
- if (a({
36
- type: R.Success,
29
+ return { __sfc: !0, trans: e, store: t, showToaster: n, footerButtonOptions: i, strategyName: m, NAME_TOKEN: r, messageParts: g, close: c, handleConfirm: async () => {
30
+ const o = m.value, s = t.currentRecommendationId;
31
+ t.removeStrategy(), c(), n({
32
+ type: u.Success,
37
33
  // The toast renders through a sanitizing v-html, so the name is escaped first.
38
- message: t("email-editor.strategy-removed-success", {
39
- strategyName: `<b>${S(o)}</b>`
34
+ message: e("email-editor.strategy-removed-success", {
35
+ strategyName: `<b>${T(o)}</b>`
40
36
  })
41
- }), r !== null) {
42
- try {
43
- await e.fetchRecommendationProducts();
44
- } catch (p) {
45
- console.error("[RemoveStrategyModal] product refetch failed", p);
46
- }
47
- N(
48
- r,
49
- { strategyId: l, size: g, configVersion: T },
50
- e.recommendationProducts,
51
- "Removed recommendation strategy"
52
- );
53
- }
54
- }, WpModal: f };
37
+ }), s !== null && await _(s, "Removed recommendation strategy");
38
+ }, WpModal: d };
55
39
  }
56
40
  });
57
41
  export {
58
- w as default
42
+ B as default
59
43
  };
@@ -9,15 +9,15 @@ var u = function() {
9
9
  } } }), e(t.MigrationConfirmModal, { ref: "migrationModalRef", on: { confirm: function(r) {
10
10
  return t.executeSave(!1);
11
11
  } } })], 1);
12
- }, p = [], c = /* @__PURE__ */ d(
12
+ }, c = [], p = /* @__PURE__ */ d(
13
13
  l,
14
14
  u,
15
- p,
15
+ c,
16
16
  !1,
17
17
  null,
18
- "1ca6baf0"
18
+ "c61cc8ea"
19
19
  );
20
- const v = c.exports;
20
+ const v = p.exports;
21
21
  export {
22
22
  v as default
23
23
  };
@@ -1,4 +1,4 @@
1
- import { defineComponent as q, ref as l, computed as w } from "vue";
1
+ import { defineComponent as q, ref as n, computed as x } from "vue";
2
2
  import { useActionsApi as b } from "../../../composables/useActionsApi.js";
3
3
  import { useConfig as k } from "../../../composables/useConfig.js";
4
4
  import { useExport as B } from "../../../composables/useExport.js";
@@ -17,48 +17,46 @@ import { storeToRefs as Q } from "pinia";
17
17
  import U from "./MigrationConfirmModal.vue.js";
18
18
  const ft = /* @__PURE__ */ q({
19
19
  __name: "EditorActions",
20
- setup(W, { expose: x }) {
21
- const { config: m, isFeatureEnabled: c } = k(), { exportHtml: p } = B(), { save: u } = R(), { openVersionHistory: f, closeVersionHistory: d } = P(), { getCompiledEmail: v } = b(), { compileHtml: y } = L(), { validateLiquidSyntax: g } = j(), { handleError: r } = z(), e = G(), h = J(), { hasMigrations: H } = Q(h), s = I(), i = l(!1), a = l(!1), S = l(), V = D(), _ = () => {
20
+ setup(W, { expose: w }) {
21
+ const { config: l, isFeatureEnabled: m } = k(), { exportHtml: c } = B(), { save: p } = R(), { openVersionHistory: u, closeVersionHistory: f } = P(), { getCompiledEmail: d } = b(), { compileHtml: v } = L(), { validateLiquidSyntax: y } = j(), { handleError: r } = z(), e = G(), g = J(), { hasMigrations: S } = Q(g), s = I(), i = n(!1), a = n(!1), H = n(), h = D(), _ = () => {
22
22
  if (e.isVersionHistoryOpen) {
23
- d();
23
+ f();
24
24
  return;
25
25
  }
26
- f();
26
+ u();
27
27
  }, C = async () => {
28
- i.value = !0, await p(), i.value = !1;
28
+ i.value = !0, await c(), i.value = !1;
29
29
  }, A = () => {
30
30
  e.isSaveAsTemplateDrawerOpen = !0;
31
- }, M = w(() => e.isVersionHistoryOpen ? s("newsletter.close-version-history") : s("newsletter.version-history")), O = w(
31
+ }, M = x(() => e.isVersionHistoryOpen ? s("newsletter.close-version-history") : s("newsletter.version-history")), O = x(
32
32
  () => {
33
33
  var t, o;
34
- return ((o = (t = m.value) == null ? void 0 : t.features) == null ? void 0 : o.versionHistory) && !e.isPreviewModeOpen;
34
+ return ((o = (t = l.value) == null ? void 0 : t.features) == null ? void 0 : o.versionHistory) && !e.isPreviewModeOpen;
35
35
  }
36
- ), E = async (t) => {
36
+ ), V = async (t) => {
37
37
  a.value = !0, t || (e.loadingStatus = !0);
38
38
  let o;
39
39
  try {
40
- o = await u(t);
41
- } catch (n) {
42
- if (t)
43
- throw n;
44
- r(n, "Failed to save template");
40
+ o = await p(t);
41
+ } catch (T) {
42
+ r(T, "Failed to save template");
45
43
  } finally {
46
44
  a.value = !1, !t && !o && (e.loadingStatus = !1);
47
45
  }
48
46
  return o;
49
- }, T = (t) => {
47
+ }, E = (t) => {
50
48
  var o;
51
- if (!t && H.value) {
52
- (o = S.value) == null || o.open();
49
+ if (!t && S.value) {
50
+ (o = H.value) == null || o.open();
53
51
  return;
54
52
  }
55
- return E(t);
53
+ return V(t);
56
54
  }, F = async () => {
57
- if (c("liquidSyntax")) {
55
+ if (m("liquidSyntax")) {
58
56
  e.loadingStatus = !0;
59
57
  try {
60
- const { html: t } = await v({ minimize: !0, resetDataSavedFlag: !1 }), { compiledHtml: o } = y(t);
61
- if (!await g(o))
58
+ const { html: t } = await d({ minimize: !0, resetDataSavedFlag: !1 }), { compiledHtml: o } = v(t);
59
+ if (!await y(o))
62
60
  return;
63
61
  } catch (t) {
64
62
  r(t, "Failed to prepare test email");
@@ -67,11 +65,11 @@ const ft = /* @__PURE__ */ q({
67
65
  e.loadingStatus = !1;
68
66
  }
69
67
  }
70
- V();
68
+ h();
71
69
  };
72
- return x({
73
- handleSave: T
74
- }), { __sfc: !0, config: m, isFeatureEnabled: c, exportHtml: p, save: u, openVersionHistory: f, closeVersionHistory: d, getCompiledEmail: v, compileHtml: y, validateLiquidSyntax: g, handleError: r, editorStore: e, templateStore: h, hasMigrations: H, trans: s, isExporting: i, isSaving: a, migrationModalRef: S, testEmailClick: V, handleVersionHistory: _, handleExport: C, handleSaveAs: A, versionHistoryTooltipText: M, isVersionHistoryButtonVisible: O, executeSave: E, handleSave: T, handleTestEmail: F, getTooltipOptions: K, InButtonV2: N, MigrationConfirmModal: U };
70
+ return w({
71
+ handleSave: E
72
+ }), { __sfc: !0, config: l, isFeatureEnabled: m, exportHtml: c, save: p, openVersionHistory: u, closeVersionHistory: f, getCompiledEmail: d, compileHtml: v, validateLiquidSyntax: y, handleError: r, editorStore: e, templateStore: g, hasMigrations: S, trans: s, isExporting: i, isSaving: a, migrationModalRef: H, testEmailClick: h, handleVersionHistory: _, handleExport: C, handleSaveAs: A, versionHistoryTooltipText: M, isVersionHistoryButtonVisible: O, executeSave: V, handleSave: E, handleTestEmail: F, getTooltipOptions: K, InButtonV2: N, MigrationConfirmModal: U };
75
73
  }
76
74
  });
77
75
  export {
@@ -2,9 +2,9 @@ import d from "./RecommendationStrategyOnboarding.vue2.js";
2
2
  /* empty css */
3
3
  import g from "../../../_virtual/_plugin-vue2_normalizer.js";
4
4
  var m = function() {
5
- var e, n, r, a, i;
5
+ var e, n, r, i, a;
6
6
  var t = this, s = t._self._c, o = t._self._setupProxy;
7
- return o.isVisible ? s(o.InOnboard, { key: "guido__recommendation-strategy-onboard", staticClass: "w-21-s p-a z-11", class: (e = o.onboardingStore.getRecommendationStrategyCurrentCard) == null ? void 0 : e.classes, attrs: { id: "guido__recommendation-strategy-onboard", "is-multiple-page": "", visible: "", "image-source": "", title: "", "left-position": (n = o.onboardingStore.getRecommendationStrategyCurrentCard) == null ? void 0 : n.left, "pages-config": o.onboardingStore.onboardings.recommendationStrategyOnboarding.config, "pointer-position": (r = o.onboardingStore.getRecommendationStrategyCurrentCard) == null ? void 0 : r.position, "right-position": (a = o.onboardingStore.getRecommendationStrategyCurrentCard) == null ? void 0 : a.right, "top-position": (i = o.onboardingStore.getRecommendationStrategyCurrentCard) == null ? void 0 : i.top }, on: { close: function(p) {
7
+ return o.isVisible ? s(o.InOnboard, { key: "guido__recommendation-strategy-onboard", staticClass: "w-21-s p-a z-11", class: (e = o.onboardingStore.getRecommendationStrategyCurrentCard) == null ? void 0 : e.classes, attrs: { id: "guido__recommendation-strategy-onboard", "is-multiple-page": "", visible: "", "image-source": "", title: "", "left-position": (n = o.onboardingStore.getRecommendationStrategyCurrentCard) == null ? void 0 : n.left, "pages-config": o.onboardingStore.onboardings.recommendationStrategyOnboarding.config, "pointer-position": (r = o.onboardingStore.getRecommendationStrategyCurrentCard) == null ? void 0 : r.position, "right-position": (i = o.onboardingStore.getRecommendationStrategyCurrentCard) == null ? void 0 : i.right, "top-position": (a = o.onboardingStore.getRecommendationStrategyCurrentCard) == null ? void 0 : a.top }, on: { close: function(p) {
8
8
  return o.onboardingStore.close(o.ONBOARDING_TYPE);
9
9
  }, nextButtonClick: o.handleNext } }) : t._e();
10
10
  }, c = [], _ = /* @__PURE__ */ g(
@@ -13,7 +13,7 @@ var m = function() {
13
13
  c,
14
14
  !1,
15
15
  null,
16
- "1f4a4044"
16
+ "ec2027ff"
17
17
  );
18
18
  const S = _.exports;
19
19
  export {