@useinsider/guido 2.0.0-beta.6b85cb2 → 2.0.0-beta.6da018c

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 (109) hide show
  1. package/dist/components/Guido.vue.js +1 -1
  2. package/dist/components/Guido.vue2.js +59 -57
  3. package/dist/components/organisms/base/Toaster.vue.js +6 -6
  4. package/dist/components/organisms/email-preview/desktop-preview/EmailSizeIndicator.vue.js +6 -6
  5. package/dist/components/organisms/email-preview/desktop-preview/EmailSizeIndicator.vue2.js +2 -2
  6. package/dist/extensions/Blocks/Recommendation/cardCompositionControl.js +69 -153
  7. package/dist/extensions/Blocks/Recommendation/constants.js +1 -9
  8. package/dist/extensions/Blocks/Recommendation/control.js +59 -74
  9. package/dist/extensions/Blocks/Recommendation/controls/button/align.js +13 -0
  10. package/dist/extensions/Blocks/Recommendation/controls/button/border.js +13 -0
  11. package/dist/extensions/Blocks/Recommendation/controls/button/borderRadius.js +13 -0
  12. package/dist/extensions/Blocks/Recommendation/controls/button/color.js +13 -0
  13. package/dist/extensions/Blocks/Recommendation/controls/button/fitToContent.js +13 -0
  14. package/dist/extensions/Blocks/Recommendation/controls/button/fontFamily.js +13 -0
  15. package/dist/extensions/Blocks/Recommendation/controls/button/margins.js +13 -0
  16. package/dist/extensions/Blocks/Recommendation/controls/button/paddings.js +13 -0
  17. package/dist/extensions/Blocks/Recommendation/controls/button/text.js +13 -0
  18. package/dist/extensions/Blocks/Recommendation/controls/button/textSize.js +13 -0
  19. package/dist/extensions/Blocks/Recommendation/controls/button/textStyleAndFontColor.js +13 -0
  20. package/dist/extensions/Blocks/Recommendation/controls/image/margins.js +13 -0
  21. package/dist/extensions/Blocks/Recommendation/controls/image/size.js +13 -0
  22. package/dist/extensions/Blocks/Recommendation/controls/name/align.js +13 -0
  23. package/dist/extensions/Blocks/Recommendation/controls/name/background.js +13 -0
  24. package/dist/extensions/Blocks/Recommendation/controls/name/color.js +13 -0
  25. package/dist/extensions/Blocks/Recommendation/controls/name/fontFamily.js +13 -0
  26. package/dist/extensions/Blocks/Recommendation/controls/name/paddings.js +13 -0
  27. package/dist/extensions/Blocks/Recommendation/controls/name/size.js +13 -0
  28. package/dist/extensions/Blocks/Recommendation/controls/name/style.js +13 -0
  29. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/align.js +13 -0
  30. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/background.js +13 -0
  31. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/color.js +13 -0
  32. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/fontFamily.js +13 -0
  33. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/paddings.js +13 -0
  34. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/size.js +13 -0
  35. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/style.js +13 -0
  36. package/dist/extensions/Blocks/Recommendation/controls/price/align.js +13 -0
  37. package/dist/extensions/Blocks/Recommendation/controls/price/background.js +13 -0
  38. package/dist/extensions/Blocks/Recommendation/controls/price/color.js +13 -0
  39. package/dist/extensions/Blocks/Recommendation/controls/price/fontFamily.js +13 -0
  40. package/dist/extensions/Blocks/Recommendation/controls/price/paddings.js +13 -0
  41. package/dist/extensions/Blocks/Recommendation/controls/price/size.js +13 -0
  42. package/dist/extensions/Blocks/Recommendation/controls/price/style.js +13 -0
  43. package/dist/extensions/Blocks/Recommendation/extension.js +42 -16
  44. package/dist/extensions/Blocks/Recommendation/settingsPanel.js +72 -117
  45. package/dist/extensions/Blocks/Recommendation/templates/blockTemplate.js +64 -85
  46. package/dist/extensions/Blocks/Recommendation/templates/migrationTemplate.js +17 -54
  47. package/dist/extensions/Blocks/Recommendation/templates/templateUtils.js +45 -74
  48. package/dist/guido.css +1 -1
  49. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js +52 -47
  50. package/dist/src/extensions/Blocks/Recommendation/cardCompositionControl.d.ts +3 -50
  51. package/dist/src/extensions/Blocks/Recommendation/constants.d.ts +0 -32
  52. package/dist/src/extensions/Blocks/Recommendation/control.d.ts +2 -5
  53. package/dist/src/extensions/Blocks/Recommendation/controls/button/align.d.ts +5 -0
  54. package/dist/src/extensions/Blocks/Recommendation/controls/button/border.d.ts +5 -0
  55. package/dist/src/extensions/Blocks/Recommendation/controls/button/borderRadius.d.ts +5 -0
  56. package/dist/src/extensions/Blocks/Recommendation/controls/button/color.d.ts +5 -0
  57. package/dist/src/extensions/Blocks/Recommendation/controls/button/fitToContent.d.ts +5 -0
  58. package/dist/src/extensions/Blocks/Recommendation/controls/button/fontFamily.d.ts +5 -0
  59. package/dist/src/extensions/Blocks/Recommendation/controls/button/margins.d.ts +5 -0
  60. package/dist/src/extensions/Blocks/Recommendation/controls/button/paddings.d.ts +5 -0
  61. package/dist/src/extensions/Blocks/Recommendation/controls/button/text.d.ts +5 -0
  62. package/dist/src/extensions/Blocks/Recommendation/controls/button/textSize.d.ts +5 -0
  63. package/dist/src/extensions/Blocks/Recommendation/controls/button/textStyleAndFontColor.d.ts +5 -0
  64. package/dist/src/extensions/Blocks/Recommendation/controls/image/margins.d.ts +5 -0
  65. package/dist/src/extensions/Blocks/Recommendation/controls/image/size.d.ts +5 -0
  66. package/dist/src/extensions/Blocks/Recommendation/controls/name/align.d.ts +5 -0
  67. package/dist/src/extensions/Blocks/Recommendation/controls/name/background.d.ts +5 -0
  68. package/dist/src/extensions/Blocks/Recommendation/controls/name/color.d.ts +5 -0
  69. package/dist/src/extensions/Blocks/Recommendation/controls/name/fontFamily.d.ts +5 -0
  70. package/dist/src/extensions/Blocks/Recommendation/controls/name/paddings.d.ts +5 -0
  71. package/dist/src/extensions/Blocks/Recommendation/controls/name/size.d.ts +5 -0
  72. package/dist/src/extensions/Blocks/Recommendation/controls/name/style.d.ts +5 -0
  73. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/align.d.ts +5 -0
  74. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/background.d.ts +5 -0
  75. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/color.d.ts +5 -0
  76. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/fontFamily.d.ts +5 -0
  77. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/paddings.d.ts +5 -0
  78. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/size.d.ts +5 -0
  79. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/style.d.ts +5 -0
  80. package/dist/src/extensions/Blocks/Recommendation/controls/price/align.d.ts +5 -0
  81. package/dist/src/extensions/Blocks/Recommendation/controls/price/background.d.ts +5 -0
  82. package/dist/src/extensions/Blocks/Recommendation/controls/price/color.d.ts +5 -0
  83. package/dist/src/extensions/Blocks/Recommendation/controls/price/fontFamily.d.ts +5 -0
  84. package/dist/src/extensions/Blocks/Recommendation/controls/price/paddings.d.ts +5 -0
  85. package/dist/src/extensions/Blocks/Recommendation/controls/price/size.d.ts +5 -0
  86. package/dist/src/extensions/Blocks/Recommendation/controls/price/style.d.ts +5 -0
  87. package/dist/src/extensions/Blocks/Recommendation/templates/blockTemplate.d.ts +3 -3
  88. package/dist/src/extensions/Blocks/Recommendation/templates/templateUtils.d.ts +7 -15
  89. package/dist/static/styles/components/wide-panel.css.js +4 -0
  90. package/dist/static/styles/customEditorStyle.css.js +0 -13
  91. package/package.json +1 -1
  92. package/dist/extensions/Blocks/Recommendation/controls/cardBackgroundColorControl.js +0 -68
  93. package/dist/extensions/Blocks/Recommendation/controls/index.js +0 -245
  94. package/dist/extensions/Blocks/Recommendation/controls/nameTextTrimControl.js +0 -74
  95. package/dist/extensions/Blocks/Recommendation/controls/omnibusDiscountTextAfterControl.js +0 -71
  96. package/dist/extensions/Blocks/Recommendation/controls/omnibusDiscountTextBeforeControl.js +0 -71
  97. package/dist/extensions/Blocks/Recommendation/controls/omnibusPriceTextAfterControl.js +0 -71
  98. package/dist/extensions/Blocks/Recommendation/controls/omnibusPriceTextBeforeControl.js +0 -71
  99. package/dist/extensions/Blocks/Recommendation/controls/spacingControl.js +0 -188
  100. package/dist/extensions/Blocks/Recommendation/utils/preserveTextStyles.js +0 -25
  101. package/dist/src/extensions/Blocks/Recommendation/controls/cardBackgroundColorControl.d.ts +0 -25
  102. package/dist/src/extensions/Blocks/Recommendation/controls/index.d.ts +0 -592
  103. package/dist/src/extensions/Blocks/Recommendation/controls/nameTextTrimControl.d.ts +0 -16
  104. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscountTextAfterControl.d.ts +0 -15
  105. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscountTextBeforeControl.d.ts +0 -15
  106. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPriceTextAfterControl.d.ts +0 -15
  107. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPriceTextBeforeControl.d.ts +0 -15
  108. package/dist/src/extensions/Blocks/Recommendation/controls/spacingControl.d.ts +0 -60
  109. package/dist/src/extensions/Blocks/Recommendation/utils/preserveTextStyles.d.ts +0 -19
@@ -12,7 +12,7 @@ var t = function() {
12
12
  n,
13
13
  !1,
14
14
  null,
15
- "282ca4d1"
15
+ "9cd25be3"
16
16
  );
17
17
  const v = s.exports;
18
18
  export {
@@ -1,54 +1,55 @@
1
- import { defineComponent as x, defineAsyncComponent as P, ref as B, computed as U, watch as N, onMounted as z, onUnmounted as K } from "vue";
2
- import { provideGuidoActions as M } from "../composables/useGuidoActions.js";
3
- import { usePartner as j } from "../composables/usePartner.js";
4
- import { useStripo as q } from "../composables/useStripo.js";
5
- import { useTimerClone as J } from "../composables/useTimerClone.js";
6
- import { migrate as W } from "../config/migrator/index.js";
7
- import Q from "./organisms/base/Toaster.vue.js";
8
- import V from "./organisms/extensions/recommendation/FilterSelectionDrawer.vue.js";
9
- import X from "./organisms/header/HeaderWrapper.vue.js";
10
- import Y from "./organisms/LoadingWrapper.vue.js";
11
- import Z from "./organisms/save-as-template/SaveAsTemplateDrawer.vue.js";
12
- import $ from "./organisms/unsubscribe/UnsubscribeWrapper.vue.js";
13
- import { useStripoApi as ee } from "../services/stripoApi.js";
14
- import { useConfigStore as oe } from "../stores/config.js";
15
- import { useDynamicContentStore as te } from "../stores/dynamic-content.js";
16
- import { useEditorStore as ne } from "../stores/editor.js";
17
- import { usePreviewStore as re } from "../stores/preview.js";
18
- import { useUnsubscribeStore as ce } from "../stores/unsubscribe.js";
19
- const Ee = /* @__PURE__ */ x({
1
+ import { defineComponent as q, defineAsyncComponent as U, ref as W, computed as I, watch as z, onMounted as K, onUnmounted as M } from "vue";
2
+ import { provideGuidoActions as j } from "../composables/useGuidoActions.js";
3
+ import { usePartner as J } from "../composables/usePartner.js";
4
+ import { useStripo as Q } from "../composables/useStripo.js";
5
+ import { useTimerClone as V } from "../composables/useTimerClone.js";
6
+ import { migrate as L } from "../config/migrator/index.js";
7
+ import X from "./organisms/base/Toaster.vue.js";
8
+ import Y from "./organisms/extensions/recommendation/FilterSelectionDrawer.vue.js";
9
+ import Z from "./organisms/header/HeaderWrapper.vue.js";
10
+ import $ from "./organisms/LoadingWrapper.vue.js";
11
+ import ee from "./organisms/save-as-template/SaveAsTemplateDrawer.vue.js";
12
+ import oe from "./organisms/unsubscribe/UnsubscribeWrapper.vue.js";
13
+ import { useStripoApi as te } from "../services/stripoApi.js";
14
+ import { useConfigStore as ne } from "../stores/config.js";
15
+ import { useDynamicContentStore as re } from "../stores/dynamic-content.js";
16
+ import { useEditorStore as se } from "../stores/editor.js";
17
+ import { usePreviewStore as ce } from "../stores/preview.js";
18
+ import { useToasterStore as ie } from "../stores/toaster.js";
19
+ import { useUnsubscribeStore as ae } from "../stores/unsubscribe.js";
20
+ const Pe = /* @__PURE__ */ q({
20
21
  __name: "Guido",
21
22
  props: {
22
23
  config: null
23
24
  },
24
25
  emits: ["dynamic-content:open", "back", "save:start", "save:complete", "on-change", "ready", "onboarding:finished", "test-email:click"],
25
- setup(_, { expose: I, emit: t }) {
26
- const l = _, L = P(
26
+ setup(A, { expose: R, emit: t }) {
27
+ const u = A, F = U(
27
28
  () => import("./organisms/email-preview/PreviewContainer.vue.js")
28
- ), A = P(
29
+ ), G = U(
29
30
  () => import("./organisms/onboarding/OnboardingWrapper.vue.js")
30
- ), p = B(), s = te(), u = ce(), n = oe();
31
- n.init(l.config);
32
- const i = ne(), F = re(), r = U(() => i.hasChanges), { isTestPartner: G } = j(), v = () => {
31
+ ), p = W(), i = re(), v = ae(), f = ie(), n = ne();
32
+ n.init(u.config);
33
+ const a = se(), H = ce(), r = I(() => a.hasChanges), { isTestPartner: O } = J(), y = () => {
33
34
  var e;
34
35
  return (e = p.value) == null ? void 0 : e.handleSave(!0);
35
- }, { templateId: a, userId: y, partnerName: h, productType: f, username: b, template: o } = n, c = (o == null ? void 0 : o.html) || "", g = (o == null ? void 0 : o.css) || "", m = (o == null ? void 0 : o.preselectedDynamicContent) || [];
36
- i.templateId = a;
37
- const { initPlugin: S } = q({
38
- emailId: a,
39
- userId: y,
40
- username: b,
41
- partnerName: h,
42
- productType: f,
43
- preselectedDynamicContentList: m,
36
+ }, { templateId: m, userId: h, partnerName: b, productType: g, username: S, template: o } = n, s = (o == null ? void 0 : o.html) || "", w = (o == null ? void 0 : o.css) || "", d = (o == null ? void 0 : o.preselectedDynamicContent) || [];
37
+ a.templateId = m;
38
+ const c = W(!1), { initPlugin: C } = Q({
39
+ emailId: m,
40
+ userId: h,
41
+ username: S,
42
+ partnerName: b,
43
+ productType: g,
44
+ preselectedDynamicContentList: d,
44
45
  onReady: () => {
45
46
  console.debug("guido:ready"), t("ready");
46
47
  }
47
- }), { getDefaultTemplate: w } = ee(), { cloneTimersOnSave: C, hasTimerBlocks: D } = J(), H = U(() => {
48
+ }), { getDefaultTemplate: D } = te(), { cloneTimersOnSave: E, hasTimerBlocks: T } = V(), x = I(() => {
48
49
  var e;
49
50
  return !((e = n.ui) != null && e.showHeader);
50
51
  });
51
- M({
52
+ j({
52
53
  onBack: () => {
53
54
  console.debug("guido:back"), t("back");
54
55
  },
@@ -62,51 +63,52 @@ const Ee = /* @__PURE__ */ x({
62
63
  console.debug("guido:test-email:click"), t("test-email:click");
63
64
  }
64
65
  });
65
- const E = (e) => {
66
- console.debug("dynamic-content:close", e), s.setSelectedDynamicContent(e), document.dispatchEvent(new CustomEvent("dynamic-content:close", { detail: e }));
67
- }, k = () => {
66
+ const k = (e) => {
67
+ console.debug("dynamic-content:close", e), i.setSelectedDynamicContent(e), document.dispatchEvent(new CustomEvent("dynamic-content:close", { detail: e }));
68
+ }, _ = () => {
68
69
  console.debug("dynamic-content:close", "Without Data"), document.dispatchEvent(new CustomEvent("dynamic-content:close", { detail: { text: "", value: "" } }));
69
70
  };
70
- N(() => r.value, () => {
71
+ z(() => r.value, () => {
71
72
  t("on-change", r.value);
72
73
  });
73
- const d = (e) => {
74
- const T = e, { attribute: O, position: R } = T.detail;
75
- console.debug("dynamic-content:open", T.detail), t("dynamic-content:open", O, R);
74
+ const l = (e) => {
75
+ const P = e, { attribute: B, position: N } = P.detail;
76
+ console.debug("dynamic-content:open", P.detail), t("dynamic-content:open", B, N);
76
77
  };
77
- return z(async () => {
78
+ return K(async () => {
78
79
  console.debug("Guido says happy coding 🎉"), console.debug("🚗 Ka-Chow");
79
80
  try {
80
- u.selectedUnsubscribePages = (o == null ? void 0 : o.selectedUnsubscribePages) || [];
81
+ v.selectedUnsubscribePages = (o == null ? void 0 : o.selectedUnsubscribePages) || [];
81
82
  let e = {
82
- html: c && await W(c),
83
- css: g,
83
+ html: s && await L(s),
84
+ css: w,
84
85
  forceRecreate: !0
85
86
  // TODO: It should be false for old templates. We will communicate with Stripo
86
87
  };
87
- e.html || (e = await w(), e.html = await W(e.html)), D(e.html) && (e.html = await C(e.html)), await S(e), s.selectedDynamicContentList = m;
88
+ e.html || (e = await D(), e.html = await L(e.html)), T(e.html) && (e.html = await E(e.html)), await C(e), i.selectedDynamicContentList = d;
88
89
  } catch (e) {
89
90
  console.error("Failed to initialize Stripo editor:", e);
90
91
  }
91
- document.addEventListener("dynamic-content:open", d);
92
- }), K(() => {
93
- document.removeEventListener("dynamic-content:open", d);
92
+ document.addEventListener("dynamic-content:open", l), c.value = !0;
93
+ }), M(() => {
94
+ var e;
95
+ c.value && (f.hideToaster(), (e = document.querySelector("#guido__toaster")) == null || e.remove()), c.value = !1, document.removeEventListener("dynamic-content:open", l);
94
96
  try {
95
97
  window.UIEditor.removeEditor();
96
98
  } catch {
97
99
  console.debug("Failed to remove Stripo editor: No editor found");
98
100
  }
99
101
  n.reset();
100
- }), I({
102
+ }), R({
101
103
  dynamicContent: {
102
- insert: E,
103
- close: k
104
+ insert: k,
105
+ close: _
104
106
  },
105
107
  hasChanges: r,
106
- saveSilent: v
107
- }), { __sfc: !0, PreviewContainer: L, OnboardingWrapper: A, headerWrapperRef: p, dynamicContentStore: s, unsubscribeStore: u, props: l, configStore: n, editorStore: i, previewStore: F, hasChanges: r, isTestPartner: G, saveSilent: v, templateId: a, userId: y, partnerName: h, productType: f, username: b, templateConfig: o, html: c, css: g, preselectedDynamicContentList: m, emit: t, initPlugin: S, getDefaultTemplate: w, cloneTimersOnSave: C, hasTimerBlocks: D, noHeader: H, insertDynamicContent: E, closeDynamicContent: k, handleDynamicContentOpen: d, Toaster: Q, FilterSelectionDrawer: V, HeaderWrapper: X, LoadingWrapper: Y, SaveAsTemplateDrawer: Z, UnsubscribeWrapper: $ };
108
+ saveSilent: y
109
+ }), { __sfc: !0, PreviewContainer: F, OnboardingWrapper: G, headerWrapperRef: p, dynamicContentStore: i, unsubscribeStore: v, toasterStore: f, props: u, configStore: n, editorStore: a, previewStore: H, hasChanges: r, isTestPartner: O, saveSilent: y, templateId: m, userId: h, partnerName: b, productType: g, username: S, templateConfig: o, html: s, css: w, preselectedDynamicContentList: d, editorReady: c, emit: t, initPlugin: C, getDefaultTemplate: D, cloneTimersOnSave: E, hasTimerBlocks: T, noHeader: x, insertDynamicContent: k, closeDynamicContent: _, handleDynamicContentOpen: l, Toaster: X, FilterSelectionDrawer: Y, HeaderWrapper: Z, LoadingWrapper: $, SaveAsTemplateDrawer: ee, UnsubscribeWrapper: oe };
108
110
  }
109
111
  });
110
112
  export {
111
- Ee as default
113
+ Pe as default
112
114
  };
@@ -1,17 +1,17 @@
1
- import e from "./Toaster.vue2.js";
1
+ import n from "./Toaster.vue2.js";
2
2
  import s from "../../../_virtual/_plugin-vue2_normalizer.js";
3
3
  var r = function() {
4
- var o = this, n = o._self._c, t = o._self._setupProxy;
5
- return n(t.InToasts, { attrs: { "action-buttons-config": t.actionButtonsConfig, status: t.store.status, text: t.store.text, type: t.store.type }, on: { actionButtonClick0: t.handleActionClick } });
4
+ var o = this, e = o._self._c, t = o._self._setupProxy;
5
+ return e(t.InToasts, { attrs: { id: "guido__toaster", "action-buttons-config": t.actionButtonsConfig, status: t.store.status, text: t.store.text, type: t.store.type }, on: { actionButtonClick0: t.handleActionClick } });
6
6
  }, a = [], _ = /* @__PURE__ */ s(
7
- e,
7
+ n,
8
8
  r,
9
9
  a,
10
10
  !1,
11
11
  null,
12
12
  null
13
13
  );
14
- const l = _.exports;
14
+ const f = _.exports;
15
15
  export {
16
- l as default
16
+ f as default
17
17
  };
@@ -1,16 +1,16 @@
1
1
  import i from "./EmailSizeIndicator.vue2.js";
2
2
  /* empty css */
3
- import r from "../../../../_virtual/_plugin-vue2_normalizer.js";
4
- var o = function() {
3
+ import o from "../../../../_virtual/_plugin-vue2_normalizer.js";
4
+ var r = function() {
5
5
  var s = this, e = s._self._c, t = s._self._setupProxy;
6
- return e("div", { staticClass: "d-f a-i-c j-c-c" }, [e(t.InProgress, { staticClass: "min-w-15-s", attrs: { id: "email-size-progress", "description-status": "", "description-position": "left", description: t.htmlSize, "max-value": t.MAX_EMAIL_SIZE_IN_KB, type: t.progress.type, value: t.progress.value } }), e(t.InTooltip, { staticClass: "d-f ml-1", attrs: { id: "email-size-tooltip", align: "center", position: "bottom", text: t.trans("email-editor.preview-design-size-tooltip") } })], 1);
7
- }, a = [], n = /* @__PURE__ */ r(
6
+ return e("div", { staticClass: "d-f a-i-c j-c-c" }, [e(t.InProgress, { staticClass: "min-w-15-s", attrs: { id: "email-size-progress", "description-status": "", "description-position": "left", description: t.htmlSize, "max-value": t.MAX_EMAIL_SIZE_IN_KB, type: t.progress.type, value: t.progress.value } }), e(t.InTooltipV2, { attrs: { id: "email-size-tooltip", "icon-status": "", "static-position": "bottom center", "dynamic-position": !1, text: t.trans("email-editor.preview-design-size-tooltip") } })], 1);
7
+ }, a = [], n = /* @__PURE__ */ o(
8
8
  i,
9
- o,
9
+ r,
10
10
  a,
11
11
  !1,
12
12
  null,
13
- "c2adc57d"
13
+ "eb2f9f20"
14
14
  );
15
15
  const m = n.exports;
16
16
  export {
@@ -1,7 +1,7 @@
1
1
  import { defineComponent as c, ref as n, computed as l, watch as u } from "vue";
2
2
  import { useTranslations as p } from "../../../../composables/useTranslations.js";
3
3
  import { usePreviewStore as _ } from "../../../../stores/preview.js";
4
- import { InTooltip as v, InProgress as f } from "@useinsider/design-system-vue";
4
+ import { InTooltipV2 as v, InProgress as f } from "@useinsider/design-system-vue";
5
5
  const S = /* @__PURE__ */ c({
6
6
  __name: "EmailSizeIndicator",
7
7
  setup(w) {
@@ -17,7 +17,7 @@ const S = /* @__PURE__ */ c({
17
17
  }, i = p();
18
18
  return u(() => t.previewHtml, () => {
19
19
  r();
20
- }, { immediate: !0 }), { __sfc: !0, previewStore: t, MAX_EMAIL_SIZE_IN_KB: o, htmlKB: e, progress: s, htmlSize: a, calculateProgress: r, trans: i, InProgress: f, InTooltip: v };
20
+ }, { immediate: !0 }), { __sfc: !0, previewStore: t, MAX_EMAIL_SIZE_IN_KB: o, htmlKB: e, progress: s, htmlSize: a, calculateProgress: r, trans: i, InProgress: f, InTooltipV2: v };
21
21
  }
22
22
  });
23
23
  export {
@@ -1,187 +1,103 @@
1
- import { ModificationDescription as n } from "../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
2
- import { CommonControl as _ } from "../common-control.js";
3
- import { ATTR_PRODUCT_IMAGE as m, ATTR_PRODUCT_NAME as y, ATTR_PRODUCT_PRICE as T, ATTR_PRODUCT_OLD_PRICE as h, ATTR_PRODUCT_OMNIBUS_PRICE as C, ATTR_PRODUCT_OMNIBUS_DISCOUNT as f, ATTR_PRODUCT_BUTTON as g } from "./constants.js";
4
- const R = "ui-elements-recommendation-card-composition", l = ".recommendation-attribute-row", A = "tr.recommendation-product-row", c = "data-card-composition", a = "data-attribute-type", d = "data-visibility", s = [
5
- { key: m, label: "Product Image", visible: !0 },
6
- { key: y, label: "Product Name", visible: !0 },
7
- { key: T, label: "Product Price", visible: !0 },
8
- { key: h, label: "Product Original Price", visible: !0 },
9
- { key: C, label: "Omnibus Price", visible: !1 },
10
- { key: f, label: "Omnibus Discount", visible: !1 },
11
- { key: g, label: "Product Button", visible: !0 }
1
+ var m = Object.defineProperty;
2
+ var y = (n, o, i) => o in n ? m(n, o, { enumerable: !0, configurable: !0, writable: !0, value: i }) : n[o] = i;
3
+ var a = (n, o, i) => y(n, typeof o != "symbol" ? o + "" : o, i);
4
+ import { ModificationDescription as u } from "../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
5
+ import { CommonControl as b } from "../common-control.js";
6
+ const h = "ui-elements-recommendation-card-composition", s = [
7
+ { key: "productImage", label: "Product Image", visible: !0 },
8
+ { key: "productName", label: "Product Name", visible: !0 },
9
+ { key: "productPrice", label: "Product Price", visible: !0 },
10
+ { key: "productOriginalPrice", label: "Product Original Price", visible: !0 },
11
+ { key: "productButton", label: "Product Button", visible: !0 }
12
12
  ];
13
- class N extends _ {
13
+ class g extends b {
14
+ constructor() {
15
+ super(...arguments);
16
+ a(this, "currentComposition", []);
17
+ a(this, "currentVisibility", {});
18
+ }
14
19
  getId() {
15
- return R;
20
+ return h;
16
21
  }
17
22
  getTemplate() {
18
- const t = s.map((i) => ({
19
- key: i.key,
20
- label: i.label,
21
- content: this._createItemContent(i.label, i.key)
23
+ const i = s.map((e) => ({
24
+ key: e.key,
25
+ label: e.label,
26
+ content: `
27
+ <div style="display: flex; align-items: center; justify-content: space-between;
28
+ padding: 8px; gap: 8px;">
29
+ <span style="flex: 1;">${e.label}</span>
30
+ ${this._GuToggle(`visibility_${e.key}`)}
31
+ </div>
32
+ `
22
33
  }));
23
34
  return `
24
35
  <div class="container">
25
36
  ${this._GuLabel({ text: "Card Element Order & Visibility" })}
26
- ${this._GuOrderable("cardComposition", t)}
37
+ ${this._GuOrderable("cardComposition", i)}
27
38
  </div>
28
39
  `;
29
40
  }
30
41
  onRender() {
31
- this._initializeComposition(), this._registerValueChangeListeners();
32
- }
33
- onTemplateNodeUpdated(t) {
34
- super.onTemplateNodeUpdated(t), this._initializeComposition();
35
- }
36
- /**
37
- * Creates the HTML content for an orderable item with label and toggle
38
- */
39
- _createItemContent(t, i) {
40
- return `
41
- <div style="display: flex; align-items: center; justify-content: space-between;
42
- padding: 8px; gap: 8px;">
43
- <span style="flex: 1;">${t}</span>
44
- ${this._GuToggle(`visibility_${i}`)}
45
- </div>
46
- `;
47
- }
48
- /**
49
- * Registers event listeners for composition and visibility changes
50
- */
51
- _registerValueChangeListeners() {
52
- this.api.onValueChanged("cardComposition", (t) => {
53
- this._applyCompositionToBlock(t);
54
- }), s.forEach((t) => {
55
- this.api.onValueChanged(`visibility_${t.key}`, (i) => {
56
- this._applyVisibilityToBlock(t.key, i);
42
+ this._initializeComposition(), this.api.onValueChanged("cardComposition", (i) => {
43
+ this.currentComposition = i, this._applyCompositionToBlock(i);
44
+ }), s.forEach((i) => {
45
+ this.api.onValueChanged(`visibility_${i.key}`, (e) => {
46
+ this.currentVisibility[i.key] = e, this._applyVisibilityToBlock();
57
47
  });
58
48
  });
59
49
  }
50
+ onTemplateNodeUpdated(i) {
51
+ super.onTemplateNodeUpdated(i), this._initializeComposition();
52
+ }
60
53
  /**
61
- * Initializes composition order and visibility state from the current node
54
+ * Initialize the composition order and visibility from the block or use defaults
62
55
  */
63
56
  _initializeComposition() {
64
- const t = this._readCompositionFromNode(), i = this._readVisibilityFromRows(), e = {
65
- cardComposition: t,
66
- ...this._buildVisibilityValues(i)
57
+ var p;
58
+ const i = (p = this.currentNode) == null ? void 0 : p.querySelector(".ins-recommendation-v3-block-v2");
59
+ let e = null, l = null;
60
+ if (i && "getAttribute" in i && (e = i.getAttribute("data-card-composition"), l = i.getAttribute("data-card-visibility")), e) {
61
+ const t = e.split(",").filter(Boolean), r = s.map((c) => c.key);
62
+ t.every((c) => r.includes(c)) && t.length > 0 ? this.currentComposition = t : this.currentComposition = r;
63
+ } else
64
+ this.currentComposition = s.map((t) => t.key);
65
+ if (l)
66
+ try {
67
+ const t = JSON.parse(l);
68
+ this.currentVisibility = t;
69
+ } catch {
70
+ this.currentVisibility = s.reduce((t, r) => (t[r.key] = r.visible, t), {});
71
+ }
72
+ else
73
+ this.currentVisibility = s.reduce((t, r) => (t[r.key] = r.visible, t), {});
74
+ const d = {
75
+ cardComposition: this.currentComposition
67
76
  };
68
- this.api.updateValues(e);
69
- }
70
- /**
71
- * Reads composition order from node's data-card-composition attribute
72
- * Falls back to default order if attribute is not present
73
- */
74
- _readCompositionFromNode() {
75
- if (!this.currentNode || !("getAttribute" in this.currentNode))
76
- return s.map((i) => i.key);
77
- const t = this.currentNode.getAttribute(c);
78
- return t ? t.split(",").filter(Boolean) : s.map((i) => i.key);
79
- }
80
- /**
81
- * Builds visibility values object from the visibility map
82
- */
83
- _buildVisibilityValues(t) {
84
- return s.reduce((i, e) => (i[`visibility_${e.key}`] = t[e.key] ?? !0, i), {});
85
- }
86
- /**
87
- * Read visibility state from individual row elements' data-visibility attributes
88
- * This ensures toggles reflect the actual DOM state
89
- */
90
- _readVisibilityFromRows() {
91
- if (!this.currentNode)
92
- return this._getDefaultVisibilities();
93
- const t = Array.from(this.currentNode.querySelectorAll(l));
94
- console.debug("_readVisibilityFromRows - found attribute rows:", t.length);
95
- const i = this._extractVisibilityFromRows(t);
96
- return this._mergeWithDefaults(i);
97
- }
98
- /**
99
- * Returns default visibility values for all items
100
- */
101
- _getDefaultVisibilities() {
102
- return s.reduce((t, i) => (t[i.key] = i.visible, t), {});
103
- }
104
- /**
105
- * Extracts visibility values from DOM nodes
106
- */
107
- _extractVisibilityFromRows(t) {
108
- const i = {};
109
- return t.forEach((e) => {
110
- if (!("getAttribute" in e))
111
- return;
112
- const o = e.getAttribute(a), r = e.getAttribute(d);
113
- o && r !== null && (i[o] = this._parseVisibilityValue(r), console.debug(
114
- `_readVisibilityFromRows - ${o}: ${i[o]} (raw: ${r})`
115
- ));
116
- }), i;
117
- }
118
- /**
119
- * Parses visibility value from string to boolean
120
- * Accepts "1", "true" as true, everything else as false
121
- */
122
- _parseVisibilityValue(t) {
123
- return t === "1" || t === "true";
124
- }
125
- /**
126
- * Merges extracted visibilities with default values for missing keys
127
- */
128
- _mergeWithDefaults(t) {
129
- return s.forEach((i) => {
130
- i.key in t || (t[i.key] = i.visible, console.debug(`_readVisibilityFromRows - ${i.key}: using default ${i.visible}`));
131
- }), t;
77
+ s.forEach((t) => {
78
+ d[`visibility_${t.key}`] = this.currentVisibility[t.key] ?? !0;
79
+ }), this.api.updateValues(d);
132
80
  }
133
81
  /**
134
82
  * Apply the reordered composition to the block's HTML structure
135
- * Updates the data-card-composition attribute and reorders product attributes
136
- */
137
- _applyCompositionToBlock(t) {
138
- if (console.debug("_applyCompositionToBlock - composition:", t), !this.currentNode) {
139
- console.debug("_applyCompositionToBlock - no current node");
140
- return;
141
- }
142
- this.api.getDocumentModifier().modifyHtml(this.currentNode).setAttribute(c, t.join(",")).apply(new n("Update card composition")), this._reorderProductAttributes(t);
143
- }
144
- /**
145
- * Reorders attribute rows within each product row based on composition order
146
83
  */
147
- _reorderProductAttributes(t) {
84
+ _applyCompositionToBlock(i) {
148
85
  if (!this.currentNode)
149
86
  return;
150
- const i = this.currentNode.querySelectorAll(A);
151
- if (!(i != null && i.length))
152
- return;
153
- const e = this.api.getDocumentModifier();
154
- i.forEach((o) => {
155
- const r = this._buildCompositionHtml(o, t);
156
- e.modifyHtml(o).setInnerHtml(r);
157
- }), e.apply(new n("Reorder product attributes"));
158
- }
159
- /**
160
- * Builds HTML string with attributes ordered according to composition
161
- */
162
- _buildCompositionHtml(t, i) {
163
- return i.reduce((e, o) => {
164
- const r = t.querySelector(`${l}[${a}="${o}"]`);
165
- return r && "getOuterHTML" in r ? e + r.getOuterHTML() : e;
166
- }, "");
87
+ const e = this.currentNode.querySelector(".ins-recommendation-v3-block-v2");
88
+ e && this.api.getDocumentModifier().modifyHtml(e).setAttribute("data-card-composition", i.join(",")).apply(new u("Stored card composition order"));
167
89
  }
168
90
  /**
169
91
  * Apply visibility changes to the block's HTML structure
170
- * Updates display style and data-visibility attribute for all matching rows
171
92
  */
172
- _applyVisibilityToBlock(t, i) {
173
- if (console.debug("_applyVisibilityToBlock", t, i), !this.currentNode)
174
- return;
175
- const e = this.currentNode.querySelectorAll(`${l}[${a}="${t}"]`);
176
- if (!(e != null && e.length))
93
+ _applyVisibilityToBlock() {
94
+ if (!this.currentNode)
177
95
  return;
178
- const o = i ? "table-row" : "none", r = i ? "1" : "0", p = `Set ${t} visibility to ${i ? "visible" : "hidden"}`, u = this.api.getDocumentModifier();
179
- e.forEach((b) => {
180
- u.modifyHtml(b).setStyle("display", o).setAttribute(d, r);
181
- }), u.apply(new n(p));
96
+ const i = this.currentNode.querySelector(".ins-recommendation-v3-block-v2");
97
+ i && this.api.getDocumentModifier().modifyHtml(i).setAttribute("data-card-visibility", JSON.stringify(this.currentVisibility)).apply(new u("Stored card visibility settings"));
182
98
  }
183
99
  }
184
100
  export {
185
- R as COMPOSITION_CONTROL_BLOCK_ID,
186
- N as RecommendationCardCompositionControl
101
+ h as COMPOSITION_CONTROL_BLOCK_ID,
102
+ g as RecommendationCardCompositionControl
187
103
  };
@@ -1,13 +1,5 @@
1
- const _ = "productImage", b = "productName", n = "productPrice", i = "productOldPrice", O = "productOmnibusPrice", T = "productOmnibusDiscount", t = "productButton";
2
- var o = /* @__PURE__ */ ((c) => (c.BUTTON = "recommendation-block-button", c.NAME = "recommendation-block-name", c.PRICE = "recommendation-block-price", c.OLD_PRICE = "recommendation-block-old-price", c.OMNIBUS_PRICE = "recommendation-block-omnibus-price", c.OMNIBUS_DISCOUNT = "recommendation-block-omnibus-discount", c.IMAGE = "recommendation-block-image", c))(o || {}), r = /* @__PURE__ */ ((c) => (c.BUTTON_ALIGN = "recommendation-block-button-align-control", c.BUTTON_BORDER = "recommendation-block-button-border-control", c.BUTTON_BORDER_RADIUS = "recommendation-block-button-border-radius-control", c.BUTTON_COLOR = "recommendation-block-button-color-control", c.BUTTON_FIT_TO_CONTENT = "recommendation-block-button-fit-to-content-control", c.BUTTON_FONT_FAMILY = "recommendation-block-button-font-family-control", c.BUTTON_MARGINS = "recommendation-block-button-margins-control", c.BUTTON_PADDINGS = "recommendation-block-button-paddings-control", c.BUTTON_TEXT = "recommendation-block-button-text-control", c.BUTTON_TEXT_SIZE = "recommendation-block-button-text-size-control", c.BUTTON_TEXT_STYLE_AND_FONT_COLOR = "recommendation-block-button-text-style-and-font-color-control", c.NAME_ALIGN = "recommendation-block-name-align-control", c.NAME_BACKGROUND = "recommendation-block-name-background-control", c.NAME_COLOR = "recommendation-block-name-color-control", c.NAME_FONT_FAMILY = "recommendation-block-name-font-family-control", c.NAME_PADDINGS = "recommendation-block-name-paddings-control", c.NAME_SIZE = "recommendation-block-name-size-control", c.NAME_STYLE = "recommendation-block-name-style-control", c.NAME_TEXT_TRIM = "recommendation-block-name-text-trim-control", c.PRICE_ALIGN = "recommendation-block-price-align-control", c.PRICE_BACKGROUND = "recommendation-block-price-background-control", c.PRICE_COLOR = "recommendation-block-price-color-control", c.PRICE_FONT_FAMILY = "recommendation-block-price-font-family-control", c.PRICE_PADDINGS = "recommendation-block-price-paddings-control", c.PRICE_SIZE = "recommendation-block-price-size-control", c.PRICE_STYLE = "recommendation-block-price-style-control", c.OLD_PRICE_ALIGN = "recommendation-block-old-price-align-control", c.OLD_PRICE_BACKGROUND = "recommendation-block-old-price-background-control", c.OLD_PRICE_COLOR = "recommendation-block-old-price-color-control", c.OLD_PRICE_FONT_FAMILY = "recommendation-block-old-price-font-family-control", c.OLD_PRICE_PADDINGS = "recommendation-block-old-price-paddings-control", c.OLD_PRICE_SIZE = "recommendation-block-old-price-size-control", c.OLD_PRICE_STYLE = "recommendation-block-old-price-style-control", c.OMNIBUS_PRICE_ALIGN = "recommendation-block-omnibus-price-align-control", c.OMNIBUS_PRICE_BACKGROUND = "recommendation-block-omnibus-price-background-control", c.OMNIBUS_PRICE_COLOR = "recommendation-block-omnibus-price-color-control", c.OMNIBUS_PRICE_FONT_FAMILY = "recommendation-block-omnibus-price-font-family-control", c.OMNIBUS_PRICE_PADDINGS = "recommendation-block-omnibus-price-paddings-control", c.OMNIBUS_PRICE_SIZE = "recommendation-block-omnibus-price-size-control", c.OMNIBUS_PRICE_STYLE = "recommendation-block-omnibus-price-style-control", c.OMNIBUS_PRICE_TEXT_BEFORE = "recommendation-block-omnibus-price-text-before-control", c.OMNIBUS_PRICE_TEXT_AFTER = "recommendation-block-omnibus-price-text-after-control", c.OMNIBUS_DISCOUNT_ALIGN = "recommendation-block-omnibus-discount-align-control", c.OMNIBUS_DISCOUNT_BACKGROUND = "recommendation-block-omnibus-discount-background-control", c.OMNIBUS_DISCOUNT_COLOR = "recommendation-block-omnibus-discount-color-control", c.OMNIBUS_DISCOUNT_FONT_FAMILY = "recommendation-block-omnibus-discount-font-family-control", c.OMNIBUS_DISCOUNT_PADDINGS = "recommendation-block-omnibus-discount-paddings-control", c.OMNIBUS_DISCOUNT_SIZE = "recommendation-block-omnibus-discount-size-control", c.OMNIBUS_DISCOUNT_STYLE = "recommendation-block-omnibus-discount-style-control", c.OMNIBUS_DISCOUNT_TEXT_BEFORE = "recommendation-block-omnibus-discount-text-before-control", c.OMNIBUS_DISCOUNT_TEXT_AFTER = "recommendation-block-omnibus-discount-text-after-control", c.IMAGE_SIZE = "recommendation-block-image-size-control", c.IMAGE_MARGINS = "recommendation-block-image-margins-control", c))(r || {});
1
+ var o = /* @__PURE__ */ ((c) => (c.BUTTON = "recommendation-block-button", c.NAME = "recommendation-block-name", c.PRICE = "recommendation-block-price", c.OLD_PRICE = "recommendation-block-old-price", c.IMAGE = "recommendation-block-image", c))(o || {}), r = /* @__PURE__ */ ((c) => (c.BUTTON_ALIGN = "recommendation-block-button-align-control", c.BUTTON_BORDER = "recommendation-block-button-border-control", c.BUTTON_BORDER_RADIUS = "recommendation-block-button-border-radius-control", c.BUTTON_COLOR = "recommendation-block-button-color-control", c.BUTTON_FIT_TO_CONTENT = "recommendation-block-button-fit-to-content-control", c.BUTTON_FONT_FAMILY = "recommendation-block-button-font-family-control", c.BUTTON_MARGINS = "recommendation-block-button-margins-control", c.BUTTON_PADDINGS = "recommendation-block-button-paddings-control", c.BUTTON_TEXT = "recommendation-block-button-text-control", c.BUTTON_TEXT_SIZE = "recommendation-block-button-text-size-control", c.BUTTON_TEXT_STYLE_AND_FONT_COLOR = "recommendation-block-button-text-style-and-font-color-control", c.NAME_ALIGN = "recommendation-block-name-align-control", c.NAME_BACKGROUND = "recommendation-block-name-background-control", c.NAME_COLOR = "recommendation-block-name-color-control", c.NAME_FONT_FAMILY = "recommendation-block-name-font-family-control", c.NAME_PADDINGS = "recommendation-block-name-paddings-control", c.NAME_SIZE = "recommendation-block-name-size-control", c.NAME_STYLE = "recommendation-block-name-style-control", c.PRICE_ALIGN = "recommendation-block-price-align-control", c.PRICE_BACKGROUND = "recommendation-block-price-background-control", c.PRICE_COLOR = "recommendation-block-price-color-control", c.PRICE_FONT_FAMILY = "recommendation-block-price-font-family-control", c.PRICE_PADDINGS = "recommendation-block-price-paddings-control", c.PRICE_SIZE = "recommendation-block-price-size-control", c.PRICE_STYLE = "recommendation-block-price-style-control", c.OLD_PRICE_ALIGN = "recommendation-block-old-price-align-control", c.OLD_PRICE_BACKGROUND = "recommendation-block-old-price-background-control", c.OLD_PRICE_COLOR = "recommendation-block-old-price-color-control", c.OLD_PRICE_FONT_FAMILY = "recommendation-block-old-price-font-family-control", c.OLD_PRICE_PADDINGS = "recommendation-block-old-price-paddings-control", c.OLD_PRICE_SIZE = "recommendation-block-old-price-size-control", c.OLD_PRICE_STYLE = "recommendation-block-old-price-style-control", c.IMAGE_SIZE = "recommendation-block-image-size-control", c.IMAGE_MARGINS = "recommendation-block-image-margins-control", c))(r || {});
3
2
  export {
4
- t as ATTR_PRODUCT_BUTTON,
5
- _ as ATTR_PRODUCT_IMAGE,
6
- b as ATTR_PRODUCT_NAME,
7
- i as ATTR_PRODUCT_OLD_PRICE,
8
- T as ATTR_PRODUCT_OMNIBUS_DISCOUNT,
9
- O as ATTR_PRODUCT_OMNIBUS_PRICE,
10
- n as ATTR_PRODUCT_PRICE,
11
3
  o as RecommendationBlockId,
12
4
  r as RecommendationControlId
13
5
  };