@useinsider/guido 3.7.0-beta.7069d11 → 3.7.0-beta.830822b

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 (31) hide show
  1. package/dist/components/organisms/unsubscribe/UnsubscribeTypeSelection.vue.js +3 -3
  2. package/dist/components/organisms/unsubscribe/UnsubscribeTypeSelection.vue2.js +45 -47
  3. package/dist/enums/extensions/recommendationBlock.js +3 -1
  4. package/dist/extensions/Blocks/Recommendation/store/recommendation.js +5 -5
  5. package/dist/extensions/Blocks/Recommendation/validation/requiredFields.js +9 -9
  6. package/dist/guido.css +1 -1
  7. package/dist/services/recommendationApi.js +31 -19
  8. package/dist/src/enums/extensions/recommendationBlock.d.ts +1 -0
  9. package/dist/src/extensions/Blocks/Recommendation/validation/requiredFields.d.ts +2 -3
  10. package/dist/stores/dynamic-content.js +1 -1
  11. package/package.json +1 -1
  12. package/dist/src/composables/useApiExample.d.ts +0 -63
  13. package/dist/src/composables/useRecommendation.test.d.ts +0 -1
  14. package/dist/src/config/migrator/recommendation/compositionMapper.test.d.ts +0 -1
  15. package/dist/src/config/migrator/recommendation/extractors.test.d.ts +0 -1
  16. package/dist/src/config/migrator/recommendation/parseLegacyConfig.test.d.ts +0 -1
  17. package/dist/src/config/migrator/recommendation/settingsMapper.test.d.ts +0 -1
  18. package/dist/src/config/migrator/recommendation/themeMapper.test.d.ts +0 -1
  19. package/dist/src/config/migrator/recommendationMigrator.test.d.ts +0 -1
  20. package/dist/src/extensions/Blocks/Recommendation/controls/main/utils.test.d.ts +0 -1
  21. package/dist/src/extensions/Blocks/Recommendation/services/configService.test.d.ts +0 -1
  22. package/dist/src/extensions/Blocks/Recommendation/store/recommendation.test.d.ts +0 -1
  23. package/dist/src/extensions/Blocks/Recommendation/templates/utils.test.d.ts +0 -1
  24. package/dist/src/extensions/Blocks/Recommendation/utils/filterUtil.test.d.ts +0 -1
  25. package/dist/src/extensions/Blocks/Recommendation/utils/legacyStrategyMap.test.d.ts +0 -1
  26. package/dist/src/extensions/Blocks/Recommendation/utils/priceFormatter.test.d.ts +0 -1
  27. package/dist/src/stores/config.test.d.ts +0 -1
  28. package/dist/src/utils/ampErrorFilter.test.d.ts +0 -1
  29. package/dist/src/utils/htmlEscape.test.d.ts +0 -1
  30. package/dist/src/utils/templatePreparation.test.d.ts +0 -1
  31. package/dist/src/vitest.setup.d.ts +0 -0
@@ -2,15 +2,15 @@ import n from "./UnsubscribeTypeSelection.vue2.js";
2
2
  /* empty css */
3
3
  import o from "../../../_virtual/_plugin-vue2_normalizer.js";
4
4
  var i = function() {
5
- var t = this, s = t._self._c, e = t._self._setupProxy;
6
- return s(e.WpDrawer, { attrs: { id: "unsubscribe-modal", "description-status": "", "description-text": e.descriptionText, "footer-button-group-options": e.footerButtonGroupOptions, status: e.unsubscribeStore.typeSelectionDrawerStatus, "title-text": e.trans("unsubscription-preference.select-unsubscribe-page-title") }, on: { cancelOrBackButtonEvent: e.closeModal, onCloseEvent: e.closeModal, primaryButtonEvent: e.selectCollection } }, [s(e.InSegments, { staticClass: "w-1", attrs: { "with-icon": "", align: "vertical", disable: e.isSelecting, "segment-list": e.segmentList, selected: e.selectedCollection, "skeleton-sizing": { width: 495, height: 180 }, "skeleton-status": e.skeletonStatus }, on: { click: e.changeCollection } })], 1);
5
+ var e = this, s = e._self._c, t = e._self._setupProxy;
6
+ return s(t.WpDrawer, { attrs: { id: "unsubscribe-modal", "description-status": "", "description-text": t.descriptionText, "footer-button-group-options": t.footerButtonGroupOptions, status: t.unsubscribeStore.typeSelectionDrawerStatus, "title-text": t.trans("unsubscription-preference.select-unsubscribe-page-title") }, on: { cancelOrBackButtonEvent: t.closeModal, onCloseEvent: t.closeModal, primaryButtonEvent: t.selectCollection } }, [s(t.InSegments, { staticClass: "w-1", attrs: { "with-icon": "", align: "vertical", disable: t.isSelecting, "segment-list": t.segmentList, selected: t.selectedCollection, "skeleton-sizing": { width: 495, height: 180 }, "skeleton-status": t.skeletonStatus }, on: { click: t.changeCollection } })], 1);
7
7
  }, r = [], c = /* @__PURE__ */ o(
8
8
  n,
9
9
  i,
10
10
  r,
11
11
  !1,
12
12
  null,
13
- "18e1220a"
13
+ "43c617a7"
14
14
  );
15
15
  const _ = c.exports;
16
16
  export {
@@ -1,110 +1,108 @@
1
- import { defineComponent as v, ref as b, computed as f, watch as _ } from "vue";
2
- import U from "../../wrappers/WpDrawer.vue.js";
3
- import { useToaster as N } from "../../../composables/useToaster.js";
4
- import { useTranslations as w } from "../../../composables/useTranslations.js";
5
- import { ACADEMY_LINKS as D } from "../../../enums/academy.js";
6
- import { ToasterTypeOptions as P } from "../../../enums/toaster.js";
7
- import { PAGE_TYPES as l, getTypeTranslations as R, UNSUBSCRIBE_PAGES_LINK as G } from "../../../enums/unsubscribe.js";
8
- import { useUnsubscribeStore as I } from "../../../stores/unsubscribe.js";
9
- import { InSegments as L } from "@useinsider/design-system-vue";
10
- const W = /* @__PURE__ */ v({
1
+ import { defineComponent as h, ref as b, computed as g, watch as _ } from "vue";
2
+ import v from "../../wrappers/WpDrawer.vue.js";
3
+ import { useToaster as U } from "../../../composables/useToaster.js";
4
+ import { useTranslations as N } from "../../../composables/useTranslations.js";
5
+ import { ACADEMY_LINKS as w } from "../../../enums/academy.js";
6
+ import { ToasterTypeOptions as R } from "../../../enums/toaster.js";
7
+ import { PAGE_TYPES as l, getTypeTranslations as D, UNSUBSCRIBE_PAGES_LINK as I } from "../../../enums/unsubscribe.js";
8
+ import { useUnsubscribeStore as P } from "../../../stores/unsubscribe.js";
9
+ import { InSegments as G } from "@useinsider/design-system-vue";
10
+ const V = /* @__PURE__ */ h({
11
11
  __name: "UnsubscribeTypeSelection",
12
- setup(O) {
13
- const t = w(), { showToaster: d } = N(), e = I(), n = b(!1), i = b(!0), o = b(l.GLOBAL_UNSUBSCRIBE), T = t(
12
+ setup(L) {
13
+ const e = N(), { showToaster: f } = U(), t = P(), n = b(!1), i = b(!0), o = b(l.GLOBAL_UNSUBSCRIBE), S = e(
14
14
  "unsubscription-preference.select-unsubscribe-page-description",
15
- { action: `<a href="${D.GLOBAL_UNSUBSCRIBE}" target="_blank">${t("ds-rules.visit-academy")}</a>` }
16
- ), y = f(() => [
15
+ { action: `<a href="${w.GLOBAL_UNSUBSCRIBE}" target="_blank">${e("ds-rules.visit-academy")}</a>` }
16
+ ), T = g(() => [
17
17
  {
18
- description: t("unsubscription-preference.type-global-unsubscribe-description"),
18
+ description: e("unsubscription-preference.type-global-unsubscribe-description"),
19
19
  icon: "line-contact-global-unsub-page",
20
- text: t("unsubscription-preference.type-global-unsubscribe"),
20
+ text: e("unsubscription-preference.type-global-unsubscribe"),
21
21
  value: l.GLOBAL_UNSUBSCRIBE,
22
- disable: e.isGlobalUnsubscribeDisabled,
22
+ disable: t.isGlobalUnsubscribeDisabled,
23
23
  position: "bottom",
24
- tooltipText: e.isGlobalUnsubscribeDisabled ? t("unsubscription-preference.global-unsub-added") : ""
24
+ tooltipText: t.isGlobalUnsubscribeDisabled ? e("unsubscription-preference.global-unsub-added") : ""
25
25
  },
26
26
  {
27
- description: t("unsubscription-preference.type-subscription-preferences-center-description"),
27
+ description: e("unsubscription-preference.type-subscription-preferences-center-description"),
28
28
  icon: "line-contact-sub-pref-center-page",
29
- text: t("unsubscription-preference.type-subscription-preferences-center"),
29
+ text: e("unsubscription-preference.type-subscription-preferences-center"),
30
30
  value: l.SUBSCRIPTION_PREFERENCE_CENTER,
31
- disable: e.isSubscriptionPreferencesCenterDisabled,
32
- tooltipText: e.isSubscriptionPreferencesCenterDisabled ? t("unsubscription-preference.pref-center-added") : ""
31
+ disable: t.isSubscriptionPreferencesCenterDisabled,
32
+ tooltipText: t.isSubscriptionPreferencesCenterDisabled ? e("unsubscription-preference.pref-center-added") : ""
33
33
  }
34
- ]), S = f(
35
- () => e.isGlobalUnsubscribeDisabled && e.isSubscriptionPreferencesCenterDisabled
36
- ), C = f(() => ({
34
+ ]), y = g(() => ({
37
35
  primaryButton: {
38
36
  styling: "solid",
39
37
  type: "primary",
40
- labelText: t(
38
+ labelText: e(
41
39
  n.value ? "unsubscription-preference.selecting-type" : "products.select-and-continue"
42
40
  ),
43
41
  loadingStatus: n.value,
44
- disabledStatus: S.value,
42
+ disabledStatus: !1,
45
43
  skeletonStatus: i.value,
46
44
  skeletonSizing: { width: 168, height: 40 }
47
45
  },
48
46
  cancelOrBackButton: {
49
47
  styling: "ghost",
50
48
  type: "secondary",
51
- labelText: t("products.cancel"),
49
+ labelText: e("products.cancel"),
52
50
  disabledStatus: n.value,
53
51
  skeletonStatus: i.value,
54
52
  skeletonSizing: { width: 78, height: 40 }
55
53
  }
56
- })), m = (s) => {
57
- e.typeSelectionDrawerStatus = !1, document.dispatchEvent(new CustomEvent("unsubscribe:cancel")), s && setTimeout(() => {
54
+ })), d = (s) => {
55
+ t.typeSelectionDrawerStatus = !1, document.dispatchEvent(new CustomEvent("unsubscribe:cancel")), s && setTimeout(() => {
58
56
  s();
59
57
  }, 500);
60
58
  }, E = (s) => {
61
59
  o.value = s;
62
- }, g = () => {
63
- const s = e.hasTemplatesByCollectionType, r = [];
60
+ }, m = () => {
61
+ const s = t.hasTemplatesByCollectionType, r = [];
64
62
  if (Object.entries(s).forEach(([c, p]) => {
65
63
  p || r.push(Number(c));
66
64
  }), r.length === 0)
67
65
  return !0;
68
- const B = R(), a = r.map((c) => B[c]);
66
+ const B = D(), a = r.map((c) => B[c]);
69
67
  let u = "";
70
68
  if (r.length === 1)
71
- u = t("unsubscription-preference.create-page-to-continue", {
69
+ u = e("unsubscription-preference.create-page-to-continue", {
72
70
  page: a[0]
73
71
  });
74
72
  else if (r.length === 2)
75
- u = t("unsubscription-preference.create-pages-to-continue", {
73
+ u = e("unsubscription-preference.create-pages-to-continue", {
76
74
  page1: a[0],
77
75
  page2: a[1]
78
76
  });
79
77
  else {
80
78
  const c = a.pop() ?? "", p = a.join(", ");
81
- u = t("unsubscription-preference.create-multiple-pages-to-continue", {
79
+ u = e("unsubscription-preference.create-multiple-pages-to-continue", {
82
80
  pages: p,
83
81
  lastPage: c
84
82
  });
85
83
  }
86
- return d({
87
- type: P.Warning,
84
+ return f({
85
+ type: R.Warning,
88
86
  message: u,
89
87
  actionButton: {
90
88
  text: "Go to Unsubscribe Pages",
91
89
  onClick: () => {
92
- window.location.href = G;
90
+ window.location.href = I;
93
91
  }
94
92
  }
95
93
  }), !1;
96
- }, h = async () => {
97
- if (n.value = !0, await e.fetchTemplates(), e.setCollection(o.value), !g()) {
98
- n.value = !1, m();
94
+ }, C = async () => {
95
+ if (n.value = !0, await t.fetchTemplates(), t.setCollection(o.value), !m()) {
96
+ n.value = !1, d();
99
97
  return;
100
98
  }
101
- n.value = !1, e.typeSelectionDrawerStatus = !1, e.pageSelectionDrawerStatus = !0;
99
+ n.value = !1, t.typeSelectionDrawerStatus = !1, t.pageSelectionDrawerStatus = !0;
102
100
  };
103
- return _(() => e.typeSelectionDrawerStatus, (s) => {
104
- s && (i.value = !0, o.value = l.GLOBAL_UNSUBSCRIBE, e.isGlobalUnsubscribeDisabled && (o.value = e.isSubscriptionPreferencesCenterDisabled ? 0 : l.SUBSCRIPTION_PREFERENCE_CENTER), i.value = !1);
105
- }), { __sfc: !0, trans: t, showToaster: d, unsubscribeStore: e, isSelecting: n, skeletonStatus: i, selectedCollection: o, descriptionText: T, segmentList: y, hasNoSelectableType: S, footerButtonGroupOptions: C, closeModal: m, changeCollection: E, validateTemplates: g, selectCollection: h, WpDrawer: U, InSegments: L };
101
+ return _(() => t.typeSelectionDrawerStatus, (s) => {
102
+ s && (i.value = !0, o.value = l.GLOBAL_UNSUBSCRIBE, t.isGlobalUnsubscribeDisabled && (o.value = t.isSubscriptionPreferencesCenterDisabled ? 0 : l.SUBSCRIPTION_PREFERENCE_CENTER), i.value = !1);
103
+ }), { __sfc: !0, trans: e, showToaster: f, unsubscribeStore: t, isSelecting: n, skeletonStatus: i, selectedCollection: o, descriptionText: S, segmentList: T, footerButtonGroupOptions: y, closeModal: d, changeCollection: E, validateTemplates: m, selectCollection: C, WpDrawer: v, InSegments: G };
106
104
  }
107
105
  });
108
106
  export {
109
- W as default
107
+ V as default
110
108
  };
@@ -1,6 +1,8 @@
1
1
  import { useTranslations as r } from "../../composables/useTranslations.js";
2
2
  const l = {
3
- RECOMMENDATION_API_URL: "https://recommendationv2.api.useinsider.com"
3
+ RECOMMENDATION_API_URL: "https://recommendationv2.api.useinsider.com",
4
+ // Relative path → same-origin as the embedding inone dashboard (Dataforce).
5
+ PRODUCT_ATTRIBUTES_PATH: "/product-attributes/get-attributes"
4
6
  }, c = {
5
7
  CLIENT_ID: "clientId"
6
8
  }, d = () => {
@@ -6,8 +6,8 @@ import { DEFAULT_CARDS_IN_ROW as F } from "../constants/layout.js";
6
6
  import { EXCLUDED_ALGORITHM_IDS as D } from "../constants/defaultConfig.js";
7
7
  import { getDefaultProducts as S } from "../templates/utils.js";
8
8
  import { generateCompleteFilterQuery as b } from "../utils/filterUtil.js";
9
- import { getPartnerRecommendationParams as v } from "../utils/partnerCustomizations.js";
10
- import { isFilterValid as w } from "../validation/filterSchema.js";
9
+ import { getPartnerRecommendationParams as w } from "../utils/partnerCustomizations.js";
10
+ import { isFilterValid as v } from "../validation/filterSchema.js";
11
11
  import { isConfigValid as N } from "../validation/requiredFields.js";
12
12
  const h = y();
13
13
  let m = null, u = null, d = null;
@@ -132,7 +132,7 @@ const x = () => ({
132
132
  value: e.text
133
133
  })),
134
134
  getFilterList() {
135
- return Object.values(this.filterList).map((t) => {
135
+ return Object.values(this.filterList).filter((t) => t.isFilterable !== 0 && t.isFilterable !== !1).map((t) => {
136
136
  let e;
137
137
  return t.type === "productAttribute" ? e = `product_attributes.${t.attributeName}` : C.includes(t.attributeName) ? e = `${t.attributeName}.${this.recommendationConfigs.currencySettings.value}` : e = t.attributeName, {
138
138
  text: t.displayName,
@@ -379,7 +379,7 @@ const x = () => ({
379
379
  const n = [...e.recommendationConfigs.filters];
380
380
  n[r] = {
381
381
  ...t,
382
- isValid: w(t)
382
+ isValid: v(t)
383
383
  }, e.recommendationConfigs.filters = n;
384
384
  }
385
385
  },
@@ -456,7 +456,7 @@ const x = () => ({
456
456
  };
457
457
  r.strategy === "manualMerchandising" ? a.productId = r.productIds.join(",") : r.strategy === "similarViewed" && (a.productId = "{itemId}"), r.strategy === "userBased" && (a.userId = "{user_id}"), c && (a.filter = c), r.shuffleProducts && (a.shuffle = !0), Object.assign(
458
458
  a,
459
- v(o.partnerName, r.strategy)
459
+ w(o.partnerName, r.strategy)
460
460
  );
461
461
  let f;
462
462
  try {
@@ -1,4 +1,4 @@
1
- const o = [
1
+ const u = [
2
2
  {
3
3
  key: "locale",
4
4
  getValue: (e) => e.language,
@@ -9,8 +9,8 @@ const o = [
9
9
  getValue: (e) => e.currencySettings.value,
10
10
  getAvailableOptions: (e) => e.currencyList.map((n) => n.text)
11
11
  }
12
- ], l = "newsletter.recommendation-fill-required-fields";
13
- function u(e, n) {
12
+ ], s = "newsletter.recommendation-fill-required-fields";
13
+ function l(e, n, o = u) {
14
14
  return o.filter((t) => {
15
15
  var a;
16
16
  if (t.condition && !t.condition(e))
@@ -22,12 +22,12 @@ function u(e, n) {
22
22
  return r !== void 0 && !r.includes(i);
23
23
  }).map((t) => t.key);
24
24
  }
25
- function s(e, n) {
26
- return u(e, n).length === 0;
25
+ function c(e, n) {
26
+ return l(e, n).length === 0;
27
27
  }
28
28
  export {
29
- o as REQUIRED_RECOMMENDATION_FIELDS,
30
- l as RecommendationRequiredFieldsKey,
31
- u as getInvalidFields,
32
- s as isConfigValid
29
+ u as REQUIRED_RECOMMENDATION_FIELDS,
30
+ s as RecommendationRequiredFieldsKey,
31
+ l as getInvalidFields,
32
+ c as isConfigValid
33
33
  };
package/dist/guido.css CHANGED
@@ -1 +1 @@
1
- .gap-16[data-v-5553d071],.gap-16[data-v-0e1b0c54]{gap:16px}[data-v-73199fa4] .in-button-v2__wrapper{line-height:0}[data-v-22226124] .in-segments-wrapper__button_selected,[data-v-22226124] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb;color:#0010ac;border-color:#0010ac}[data-v-2cb418af] .in-progress-wrapper__progress p span:last-child{display:none!important}[data-v-2cb418af] .in-progress-description-status{display:none!important}.view-options-wrapper[data-v-195ab6d4]{position:relative;display:inline-block}.new-tag[data-v-195ab6d4]{position:absolute;top:-8px;right:-16px;z-index:10}[data-v-195ab6d4] .guido__view-option-selection-desktop svg,[data-v-195ab6d4] .guido__view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-195ab6d4] .in-segments-wrapper__button_selected,[data-v-195ab6d4] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}[data-v-195ab6d4] .in-tooltip-wrapper__icon{cursor:pointer}.editor-toolbar[data-v-173c3a40]{gap:4px}.version-history-item[data-v-ee4b9c3f]{flex-basis:200px}.version-history[data-v-64c52560]{gap:8px}.version-history__toolbar[data-v-64c52560]{gap:4px}.view-options-wrapper[data-v-d405ca59]{position:relative;display:inline-block}.new-tag[data-v-d405ca59]{position:absolute;top:-8px;right:-16px;z-index:10}[data-v-d405ca59] .guido__verion-history-view-option-selection-desktop svg,[data-v-d405ca59] .guido__verion-history-view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-d405ca59] .in-segments-wrapper__button_selected,[data-v-d405ca59] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}[data-v-d405ca59] .in-tooltip-wrapper__icon{cursor:pointer}.auto-save-toggle[data-v-2c964af4]{position:relative}.auto-save-toggle__info-box[data-v-2c964af4]{position:absolute;top:100%;left:0;z-index:10;width:280px}.editor-actions[data-v-82128f7d]{gap:4px}.header-wrapper[data-v-5c02dcc7]{min-width:1000px}.guido-loading__wrapper[data-v-07c4b2d8]{height:100%;top:75px!important;bottom:0!important}.guido-editor__wrapper[data-v-50dac6de]{--ribbon-offset: 0px;position:relative;width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__container[data-v-50dac6de]{width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__no-header[data-v-50dac6de]{height:calc(100vh - 75px - var(--ribbon-offset))}[data-v-293f1c47] .in-breadcrumb-wrapper__links{cursor:pointer}.templates-wrapper[data-v-df672485]{gap:16px;grid-template-columns:repeat(3,1fr)}.templates-wrapper .template-wrapper[data-v-df672485]{cursor:pointer}.templates-wrapper .template-wrapper .template-container[data-v-df672485]{height:274px;padding:2px;transition:none}.templates-wrapper .template-wrapper .template-container.selected[data-v-df672485]{padding:1px}.templates-wrapper .template-wrapper .template-container .thumbnail[data-v-df672485]{object-fit:cover;transform:scale(1)}[data-v-18e1220a] .guido__verion-history-view-option-selection-desktop svg,[data-v-18e1220a] .guido__verion-history-view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-18e1220a] .in-segments-wrapper__button_selected,[data-v-18e1220a] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}.error-list[data-v-c3fd5d4b]{gap:16px}.desktop-browser-header[data-v-d86c5af5]{height:79px;min-height:79px}.desktop-browser-header__left[data-v-d86c5af5]{-webkit-user-drag:none;height:79px;width:378px}.desktop-browser-header__center[data-v-d86c5af5]{height:79px;background-repeat:repeat-x;background-size:auto 100%;background-position:left top}.desktop-browser-header__right[data-v-d86c5af5]{-webkit-user-drag:none;height:79px;width:112px}.desktop-preview[data-v-988f8da6]{min-width:602px;height:70vh;min-height:583px;border-radius:10px}.desktop-preview iframe[data-v-988f8da6]{min-height:504px}.iframe-wrapper[data-v-e0424e99]{width:258px}.iframe-scaled[data-v-e0424e99]{width:320px;height:124.0310077519%;transform:scale(.80625);transform-origin:top left}.cropped-text[data-v-eb3d05d7]{width:220px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mobile-preview-wrapper__phone[data-v-3f472f96]{width:282px}.mobile-preview-wrapper__phone img[data-v-3f472f96]{object-fit:cover;border-radius:44px}.mobile-preview-wrapper__content[data-v-3f472f96]{width:258px;height:450px;left:12px}[data-v-7419ae06] .vueperslides__bullets,[data-v-796d193b] .vueperslides__bullets{pointer-events:none!important}[data-v-796d193b] .vueperslides__parallax-wrapper{height:110px!important}[data-v-cadfc82d] .vueperslides__bullets{pointer-events:none!important}[data-v-cadfc82d] .vueperslides__parallax-wrapper{height:110px!important}
1
+ .gap-16[data-v-5553d071],.gap-16[data-v-0e1b0c54]{gap:16px}[data-v-73199fa4] .in-button-v2__wrapper{line-height:0}[data-v-22226124] .in-segments-wrapper__button_selected,[data-v-22226124] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb;color:#0010ac;border-color:#0010ac}[data-v-2cb418af] .in-progress-wrapper__progress p span:last-child{display:none!important}[data-v-2cb418af] .in-progress-description-status{display:none!important}.view-options-wrapper[data-v-195ab6d4]{position:relative;display:inline-block}.new-tag[data-v-195ab6d4]{position:absolute;top:-8px;right:-16px;z-index:10}[data-v-195ab6d4] .guido__view-option-selection-desktop svg,[data-v-195ab6d4] .guido__view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-195ab6d4] .in-segments-wrapper__button_selected,[data-v-195ab6d4] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}[data-v-195ab6d4] .in-tooltip-wrapper__icon{cursor:pointer}.editor-toolbar[data-v-173c3a40]{gap:4px}.version-history-item[data-v-ee4b9c3f]{flex-basis:200px}.version-history[data-v-64c52560]{gap:8px}.version-history__toolbar[data-v-64c52560]{gap:4px}.view-options-wrapper[data-v-d405ca59]{position:relative;display:inline-block}.new-tag[data-v-d405ca59]{position:absolute;top:-8px;right:-16px;z-index:10}[data-v-d405ca59] .guido__verion-history-view-option-selection-desktop svg,[data-v-d405ca59] .guido__verion-history-view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-d405ca59] .in-segments-wrapper__button_selected,[data-v-d405ca59] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}[data-v-d405ca59] .in-tooltip-wrapper__icon{cursor:pointer}.auto-save-toggle[data-v-2c964af4]{position:relative}.auto-save-toggle__info-box[data-v-2c964af4]{position:absolute;top:100%;left:0;z-index:10;width:280px}.editor-actions[data-v-82128f7d]{gap:4px}.header-wrapper[data-v-5c02dcc7]{min-width:1000px}.guido-loading__wrapper[data-v-07c4b2d8]{height:100%;top:75px!important;bottom:0!important}.guido-editor__wrapper[data-v-50dac6de]{--ribbon-offset: 0px;position:relative;width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__container[data-v-50dac6de]{width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__no-header[data-v-50dac6de]{height:calc(100vh - 75px - var(--ribbon-offset))}[data-v-293f1c47] .in-breadcrumb-wrapper__links{cursor:pointer}.templates-wrapper[data-v-df672485]{gap:16px;grid-template-columns:repeat(3,1fr)}.templates-wrapper .template-wrapper[data-v-df672485]{cursor:pointer}.templates-wrapper .template-wrapper .template-container[data-v-df672485]{height:274px;padding:2px;transition:none}.templates-wrapper .template-wrapper .template-container.selected[data-v-df672485]{padding:1px}.templates-wrapper .template-wrapper .template-container .thumbnail[data-v-df672485]{object-fit:cover;transform:scale(1)}[data-v-43c617a7] .guido__verion-history-view-option-selection-desktop svg,[data-v-43c617a7] .guido__verion-history-view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-43c617a7] .in-segments-wrapper__button_selected,[data-v-43c617a7] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}.error-list[data-v-c3fd5d4b]{gap:16px}.desktop-browser-header[data-v-d86c5af5]{height:79px;min-height:79px}.desktop-browser-header__left[data-v-d86c5af5]{-webkit-user-drag:none;height:79px;width:378px}.desktop-browser-header__center[data-v-d86c5af5]{height:79px;background-repeat:repeat-x;background-size:auto 100%;background-position:left top}.desktop-browser-header__right[data-v-d86c5af5]{-webkit-user-drag:none;height:79px;width:112px}.desktop-preview[data-v-988f8da6]{min-width:602px;height:70vh;min-height:583px;border-radius:10px}.desktop-preview iframe[data-v-988f8da6]{min-height:504px}.iframe-wrapper[data-v-e0424e99]{width:258px}.iframe-scaled[data-v-e0424e99]{width:320px;height:124.0310077519%;transform:scale(.80625);transform-origin:top left}.cropped-text[data-v-eb3d05d7]{width:220px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mobile-preview-wrapper__phone[data-v-3f472f96]{width:282px}.mobile-preview-wrapper__phone img[data-v-3f472f96]{object-fit:cover;border-radius:44px}.mobile-preview-wrapper__content[data-v-3f472f96]{width:258px;height:450px;left:12px}[data-v-7419ae06] .vueperslides__bullets,[data-v-796d193b] .vueperslides__bullets{pointer-events:none!important}[data-v-796d193b] .vueperslides__parallax-wrapper{height:110px!important}[data-v-cadfc82d] .vueperslides__bullets{pointer-events:none!important}[data-v-cadfc82d] .vueperslides__parallax-wrapper{height:110px!important}
@@ -1,40 +1,52 @@
1
- import { useHttp as a } from "../composables/useHttp.js";
2
- import { QUERY_PARAMS as d, URLS as h } from "../enums/extensions/recommendationBlock.js";
3
- const y = () => {
4
- const { get: r } = a(), { get: s } = a({ headers: {} }), m = "6KcLM9TwheVB1mgK";
1
+ import { useHttp as d } from "../composables/useHttp.js";
2
+ import { QUERY_PARAMS as l, URLS as u } from "../enums/extensions/recommendationBlock.js";
3
+ const R = (o) => o.reduce(
4
+ (a, t, s) => (a[s] = {
5
+ attributeName: t.attributeName,
6
+ attributeJs: t.attributeJs,
7
+ attributeType: t.attributeType,
8
+ type: t.type,
9
+ displayName: t.displayName,
10
+ isFilterable: t.isFilterable
11
+ }, a),
12
+ {}
13
+ ), f = () => {
14
+ const { get: o } = d(), { get: a } = d({ headers: {} }), t = "6KcLM9TwheVB1mgK";
5
15
  return {
6
16
  fetchRecommendationCreateData: async () => {
7
17
  try {
8
- return (await r("/newsletter/recommendations/create-data")).data;
18
+ return (await o("/newsletter/recommendations/create-data")).data;
9
19
  } catch (e) {
10
20
  throw console.error("fetchUserModalState error:", e), e;
11
21
  }
12
22
  },
13
23
  fetchRecommendationFilters: async () => {
14
24
  try {
15
- const { data: e } = await r("/stripo/email-recommendation-attributes");
16
- return e;
25
+ const { data: e } = await o(
26
+ u.PRODUCT_ATTRIBUTES_PATH
27
+ ), n = Array.isArray(e) ? e : (e == null ? void 0 : e.data) ?? [];
28
+ return R(n);
17
29
  } catch (e) {
18
30
  throw console.error("fetchRecommendationFilters error:", e), e;
19
31
  }
20
32
  },
21
- fetchRecommendationProducts: async (e, i) => {
22
- var n;
33
+ fetchRecommendationProducts: async (e, n) => {
34
+ var i;
23
35
  try {
24
- const t = new URLSearchParams(Object.entries(i));
25
- t.set(d.CLIENT_ID, m);
26
- const c = decodeURIComponent(t.toString());
27
- console.debug("🏁 Recommendation API Query:", c);
28
- const o = await s(
29
- `${h.RECOMMENDATION_API_URL}/v2/${e}?${c}`
36
+ const r = new URLSearchParams(Object.entries(n));
37
+ r.set(l.CLIENT_ID, t);
38
+ const m = decodeURIComponent(r.toString());
39
+ console.debug("🏁 Recommendation API Query:", m);
40
+ const c = await a(
41
+ `${u.RECOMMENDATION_API_URL}/v2/${e}?${m}`
30
42
  );
31
- return ((n = o == null ? void 0 : o.data) == null ? void 0 : n.data) ?? [];
32
- } catch (t) {
33
- throw console.error("fetchRecommendationProducts error:", t), t;
43
+ return ((i = c == null ? void 0 : c.data) == null ? void 0 : i.data) ?? [];
44
+ } catch (r) {
45
+ throw console.error("fetchRecommendationProducts error:", r), r;
34
46
  }
35
47
  }
36
48
  };
37
49
  };
38
50
  export {
39
- y as useRecommendationApi
51
+ f as useRecommendationApi
40
52
  };
@@ -2,6 +2,7 @@ import type { TextValueObject } from '@@/Types/generic';
2
2
  import type { RecommendationFeedItem } from '@@/Types/recommendation';
3
3
  export declare const URLS: {
4
4
  RECOMMENDATION_API_URL: string;
5
+ PRODUCT_ATTRIBUTES_PATH: string;
5
6
  };
6
7
  export declare const QUERY_PARAMS: {
7
8
  CLIENT_ID: string;
@@ -8,7 +8,7 @@ export interface ExtensionStoreSlice {
8
8
  languages: Languages;
9
9
  currencyList: Currency[];
10
10
  }
11
- interface RequiredField {
11
+ export interface RequiredField {
12
12
  key: string;
13
13
  getValue: (config: PerBlockConfigs) => string;
14
14
  getAvailableOptions?: (store: ExtensionStoreSlice) => string[];
@@ -16,6 +16,5 @@ interface RequiredField {
16
16
  }
17
17
  export declare const REQUIRED_RECOMMENDATION_FIELDS: RequiredField[];
18
18
  export declare const RecommendationRequiredFieldsKey = "newsletter.recommendation-fill-required-fields";
19
- export declare function getInvalidFields(config: PerBlockConfigs, store: ExtensionStoreSlice): string[];
19
+ export declare function getInvalidFields(config: PerBlockConfigs, store: ExtensionStoreSlice, fields?: RequiredField[]): string[];
20
20
  export declare function isConfigValid(config: PerBlockConfigs, store: ExtensionStoreSlice): boolean;
21
- export {};
@@ -16,7 +16,7 @@ const s = a("guidoDynamicContent", {
16
16
  value: e.value,
17
17
  fallback: e.fallback,
18
18
  format: e.format
19
- })) || []
19
+ }))
20
20
  }
21
21
  });
22
22
  export {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@useinsider/guido",
3
- "version": "3.7.0-beta.7069d11",
3
+ "version": "3.7.0-beta.830822b",
4
4
  "description": "Guido is a Vue + TypeScript wrapper for Email Plugin. Easily embed the email editor in your Vue applications.",
5
5
  "main": "./dist/guido.umd.cjs",
6
6
  "module": "./dist/library.js",
@@ -1,63 +0,0 @@
1
- interface User {
2
- id: number;
3
- name: string;
4
- email: string;
5
- }
6
- export declare const useApiExample: () => {
7
- loading: import("vue").ComputedRef<boolean>;
8
- error: import("vue").ComputedRef<{
9
- message: string;
10
- status?: number | undefined;
11
- statusText?: string | undefined;
12
- response?: {
13
- readonly headers: {
14
- append: (name: string, value: string) => void;
15
- delete: (name: string) => void;
16
- get: (name: string) => string | null;
17
- getSetCookie: () => string[];
18
- has: (name: string) => boolean;
19
- set: (name: string, value: string) => void;
20
- forEach: (callbackfn: (value: string, key: string, parent: Headers) => void, thisArg?: any) => void;
21
- entries: () => IterableIterator<[string, string]>;
22
- keys: () => IterableIterator<string>;
23
- values: () => IterableIterator<string>;
24
- [Symbol.iterator]: () => IterableIterator<[string, string]>;
25
- };
26
- readonly ok: boolean;
27
- readonly redirected: boolean;
28
- readonly status: number;
29
- readonly statusText: string;
30
- readonly type: ResponseType;
31
- readonly url: string;
32
- clone: () => Response;
33
- readonly body: {
34
- readonly locked: boolean;
35
- cancel: (reason?: any) => Promise<void>;
36
- getReader: {
37
- (options: {
38
- mode: "byob";
39
- }): ReadableStreamBYOBReader;
40
- (): ReadableStreamDefaultReader<Uint8Array>;
41
- (options?: ReadableStreamGetReaderOptions): ReadableStreamReader<Uint8Array>;
42
- };
43
- pipeThrough: <T>(transform: ReadableWritablePair<T, Uint8Array>, options?: StreamPipeOptions) => ReadableStream<T>;
44
- pipeTo: (destination: WritableStream<Uint8Array>, options?: StreamPipeOptions) => Promise<void>;
45
- tee: () => [ReadableStream<Uint8Array>, ReadableStream<Uint8Array>];
46
- } | null;
47
- readonly bodyUsed: boolean;
48
- arrayBuffer: () => Promise<ArrayBuffer>;
49
- blob: () => Promise<Blob>;
50
- formData: () => Promise<FormData>;
51
- json: () => Promise<any>;
52
- text: () => Promise<string>;
53
- } | undefined;
54
- } | null>;
55
- hasError: import("vue").ComputedRef<boolean>;
56
- fetchUsers: () => Promise<User[]>;
57
- createUser: (userData: Omit<User, "id">) => Promise<User>;
58
- updateUser: (id: number, userData: Partial<User>) => Promise<User>;
59
- deleteUser: (id: number) => Promise<void>;
60
- uploadFile: (file: File) => Promise<string>;
61
- clearError: () => void;
62
- };
63
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
File without changes