@useinsider/guido 3.17.0 → 3.18.0

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 (110) hide show
  1. package/README.md +6 -5
  2. package/dist/@types/config/schemas.js +7 -6
  3. package/dist/components/Guido.vue.js +10 -10
  4. package/dist/components/Guido.vue2.js +82 -76
  5. package/dist/components/organisms/extensions/recommendation/AssignStrategyDrawer.vue.js +21 -0
  6. package/dist/components/organisms/extensions/recommendation/AssignStrategyDrawer.vue2.js +106 -0
  7. package/dist/components/organisms/extensions/recommendation/RemoveStrategyModal.vue.js +17 -0
  8. package/dist/components/organisms/extensions/recommendation/RemoveStrategyModal.vue2.js +57 -0
  9. package/dist/components/organisms/extensions/recommendation/StrategyInfoBoxContent.vue.js +19 -0
  10. package/dist/components/organisms/extensions/recommendation/StrategyInfoBoxContent.vue2.js +63 -0
  11. package/dist/composables/useCustomInterfaceAppearance.js +52 -38
  12. package/dist/composables/useModuleRepair.js +33 -0
  13. package/dist/composables/useRecommendation.js +41 -34
  14. package/dist/composables/useSave.js +30 -29
  15. package/dist/composables/useStripo.js +15 -15
  16. package/dist/composables/useSyncModuleExtractor.js +15 -13
  17. package/dist/composables/validators/useSyncModuleBlockValidator.js +24 -0
  18. package/dist/config/i18n/en/labels.json.js +1 -1
  19. package/dist/config/migrator/index.js +9 -8
  20. package/dist/config/migrator/recommendation/compositionMapper.js +20 -20
  21. package/dist/config/migrator/recommendation/extractors.js +29 -24
  22. package/dist/config/migrator/recommendation/htmlBuilder.js +116 -130
  23. package/dist/config/migrator/recommendation/settingsMapper.js +17 -17
  24. package/dist/config/migrator/recommendationMigrator.js +31 -25
  25. package/dist/config/migrator/recommendationTitleMigrator.js +119 -0
  26. package/dist/enums/academy.js +2 -1
  27. package/dist/enums/date.js +5 -3
  28. package/dist/enums/extensions/recommendationBlock.js +3 -1
  29. package/dist/extensions/Blocks/Items/block.js +118 -49
  30. package/dist/extensions/Blocks/Items/constants/currency.js +25 -0
  31. package/dist/extensions/Blocks/Items/controls/price/currencyLocation.js +25 -24
  32. package/dist/extensions/Blocks/Items/controls/price/currencySymbol.js +12 -11
  33. package/dist/extensions/Blocks/Items/template.js +153 -152
  34. package/dist/extensions/Blocks/Items/utils/constants.js +4 -0
  35. package/dist/extensions/Blocks/Recommendation/block.js +35 -29
  36. package/dist/extensions/Blocks/Recommendation/constants/blockIds.js +1 -1
  37. package/dist/extensions/Blocks/Recommendation/constants/controlIds.js +1 -1
  38. package/dist/extensions/Blocks/Recommendation/constants/defaultConfig.js +29 -27
  39. package/dist/extensions/Blocks/Recommendation/constants/selectors.js +35 -28
  40. package/dist/extensions/Blocks/Recommendation/controls/cardComposition/index.js +309 -236
  41. package/dist/extensions/Blocks/Recommendation/controls/main/index.js +241 -180
  42. package/dist/extensions/Blocks/Recommendation/controls/main/strategy.js +124 -0
  43. package/dist/extensions/Blocks/Recommendation/controls/main/utils.js +1 -0
  44. package/dist/extensions/Blocks/Recommendation/controls/title/index.js +44 -0
  45. package/dist/extensions/Blocks/Recommendation/extension.js +31 -29
  46. package/dist/extensions/Blocks/Recommendation/services/configService.js +54 -36
  47. package/dist/extensions/Blocks/Recommendation/settingsPanel.js +23 -4
  48. package/dist/extensions/Blocks/Recommendation/store/recommendation.js +175 -79
  49. package/dist/extensions/Blocks/Recommendation/templates/grid/template.js +3 -3
  50. package/dist/extensions/Blocks/Recommendation/templates/titleRows.js +33 -0
  51. package/dist/extensions/Blocks/Recommendation/templates/utils.js +85 -107
  52. package/dist/extensions/Blocks/Recommendation/utils/nodeConfigWriter.js +22 -0
  53. package/dist/extensions/Blocks/Recommendation/utils/recommendationBlockCount.js +10 -6
  54. package/dist/extensions/Blocks/common-control.js +22 -19
  55. package/dist/guido.css +1 -1
  56. package/dist/services/recommendationApi.js +69 -30
  57. package/dist/src/@types/config/schemas.d.ts +2 -0
  58. package/dist/src/components/organisms/extensions/recommendation/AssignStrategyDrawer.vue.d.ts +3 -0
  59. package/dist/src/components/organisms/extensions/recommendation/RemoveStrategyModal.vue.d.ts +2 -0
  60. package/dist/src/components/organisms/extensions/recommendation/StrategyInfoBoxContent.vue.d.ts +15 -0
  61. package/dist/src/composables/useConfig.d.ts +2 -0
  62. package/dist/src/composables/useModuleRepair.d.ts +18 -0
  63. package/dist/src/composables/useRecommendation.d.ts +1 -0
  64. package/dist/src/composables/useSyncModuleExtractor.d.ts +2 -0
  65. package/dist/src/composables/validators/useSyncModuleBlockValidator.d.ts +3 -0
  66. package/dist/src/config/migrator/recommendation/extractors.d.ts +8 -0
  67. package/dist/src/config/migrator/recommendationTitleMigrator.d.ts +5 -0
  68. package/dist/src/enums/academy.d.ts +1 -0
  69. package/dist/src/enums/date.d.ts +1 -0
  70. package/dist/src/enums/extensions/recommendationBlock.d.ts +2 -0
  71. package/dist/src/extensions/Blocks/Items/block.d.ts +35 -0
  72. package/dist/src/extensions/Blocks/Items/constants/currency.d.ts +43 -0
  73. package/dist/src/extensions/Blocks/Items/utils/constants.d.ts +6 -0
  74. package/dist/src/extensions/Blocks/Recommendation/constants/blockIds.d.ts +2 -1
  75. package/dist/src/extensions/Blocks/Recommendation/constants/controlIds.d.ts +7 -0
  76. package/dist/src/extensions/Blocks/Recommendation/constants/defaultConfig.d.ts +3 -6
  77. package/dist/src/extensions/Blocks/Recommendation/constants/index.d.ts +2 -2
  78. package/dist/src/extensions/Blocks/Recommendation/constants/selectors.d.ts +12 -0
  79. package/dist/src/extensions/Blocks/Recommendation/controls/cardComposition/index.d.ts +11 -0
  80. package/dist/src/extensions/Blocks/Recommendation/controls/index.d.ts +1 -0
  81. package/dist/src/extensions/Blocks/Recommendation/controls/main/index.d.ts +44 -8
  82. package/dist/src/extensions/Blocks/Recommendation/controls/main/strategy.d.ts +16 -0
  83. package/dist/src/extensions/Blocks/Recommendation/controls/main/utils.d.ts +1 -0
  84. package/dist/src/extensions/Blocks/Recommendation/controls/title/index.d.ts +86 -0
  85. package/dist/src/extensions/Blocks/Recommendation/services/configService.d.ts +12 -1
  86. package/dist/src/extensions/Blocks/Recommendation/store/recommendation.d.ts +176 -10
  87. package/dist/src/extensions/Blocks/Recommendation/templates/titleRows.d.ts +13 -0
  88. package/dist/src/extensions/Blocks/Recommendation/types/nodeConfig.d.ts +7 -0
  89. package/dist/src/extensions/Blocks/Recommendation/utils/nodeConfigWriter.d.ts +31 -0
  90. package/dist/src/extensions/Blocks/Recommendation/utils/recommendationBlockCount.d.ts +6 -2
  91. package/dist/src/extensions/Blocks/common-control.d.ts +4 -1
  92. package/dist/src/mock/api/recommendation-strategies.d.ts +2 -0
  93. package/dist/src/services/recommendationApi.d.ts +4 -1
  94. package/dist/src/stores/config.d.ts +18 -0
  95. package/dist/src/stores/save-as-template.d.ts +4 -3
  96. package/dist/src/utils/genericUtil.d.ts +5 -0
  97. package/dist/src/utils/itemsCurrencyRepair.d.ts +17 -0
  98. package/dist/static/assets/icons/line-change.svg.js +5 -0
  99. package/dist/static/assets/icons/line-delete.svg.js +5 -0
  100. package/dist/static/assets/icons/line-plus.svg.js +5 -0
  101. package/dist/static/styles/components/recommendation-strategy.css.js +155 -0
  102. package/dist/static/styles/customEditorStyle.css.js +3 -1
  103. package/dist/utils/dateUtil.js +23 -10
  104. package/dist/utils/genericUtil.js +28 -27
  105. package/dist/utils/itemsCurrencyRepair.js +39 -0
  106. package/dist/utils/pairProductVariables.js +58 -58
  107. package/dist/utils/templatePreparation.js +35 -34
  108. package/package.json +3 -2
  109. package/dist/composables/useModuleDynamicContentRepair.js +0 -37
  110. package/dist/src/composables/useModuleDynamicContentRepair.d.ts +0 -13
@@ -1,8 +1,9 @@
1
- import { ATTR_PRODUCT_PRICE as l, ATTR_PRODUCT_OLD_PRICE as a, ATTR_CUSTOM_PREFIX as T, ATTR_PRODUCT_IMAGE as m, ATTR_PRODUCT_NAME as C, ATTR_PRODUCT_OMNIBUS_PRICE as _, ATTR_PRODUCT_OMNIBUS_DISCOUNT as p, ATTR_PRODUCT_BUTTON as y, PRODUCT_ATTRIBUTE_PREFIX as I } from "../constants/selectors.js";
1
+ import { ATTR_PRODUCT_PRICE as l, ATTR_PRODUCT_OLD_PRICE as a, ATTR_CUSTOM_PREFIX as T, ATTR_PRODUCT_IMAGE as b, ATTR_PRODUCT_NAME as _, ATTR_PRODUCT_OMNIBUS_PRICE as C, ATTR_PRODUCT_OMNIBUS_DISCOUNT as A, ATTR_PRODUCT_BUTTON as p, PRODUCT_ATTRIBUTE_PREFIX as I } from "../constants/selectors.js";
2
2
  import { useRecommendationExtensionStore as L } from "../store/recommendation.js";
3
- import { compositionKeyToProductAttr as A, isDefaultProductAttr as b, bareAttributeName as S, findFilterByBareName as $, productAttrToCompositionKey as h } from "../utils/compositionKeys.js";
3
+ import { compositionKeyToProductAttr as y, isDefaultProductAttr as f, bareAttributeName as S, findFilterByBareName as $, productAttrToCompositionKey as P } from "../utils/compositionKeys.js";
4
4
  import { formatPrice as B } from "../utils/priceFormatter.js";
5
- function k() {
5
+ import { buildTitleRows as k } from "./titleRows.js";
6
+ function x() {
6
7
  const t = L(), { currencySettings: e } = t.recommendationConfigs;
7
8
  return {
8
9
  code: e.value,
@@ -13,17 +14,17 @@ function k() {
13
14
  thousandSeparator: e.thousandSeparator
14
15
  };
15
16
  }
16
- function f(t, e = "price") {
17
- const o = k(), n = t[e], c = (n == null ? void 0 : n[o.code]) ?? Object.values(n ?? {})[0] ?? 0;
17
+ function m(t, e = "price") {
18
+ const o = x(), n = t[e], c = (n == null ? void 0 : n[o.code]) ?? Object.values(n ?? {})[0] ?? 0;
18
19
  return B({
19
20
  price: c,
20
21
  currency: o
21
22
  });
22
23
  }
23
24
  function q(t) {
24
- return f(t, "price") === f(t, "original_price");
25
+ return m(t, "price") === m(t, "original_price");
25
26
  }
26
- function x(t) {
27
+ function N(t) {
27
28
  return t.replace(/_/g, " ").replace(/\b\w/g, (e) => e.toUpperCase());
28
29
  }
29
30
  function J(t) {
@@ -34,115 +35,114 @@ function J(t) {
34
35
  skip: n ? l : a
35
36
  };
36
37
  }
37
- function N(t) {
38
+ function F(t) {
38
39
  const e = Array.isArray(t) ? t[t.length - 1] : t;
39
40
  if (typeof e == "string")
40
41
  return e;
41
42
  if (typeof e == "number")
42
43
  return String(e);
43
44
  }
44
- function w(t, e) {
45
+ function v(t, e) {
45
46
  var o;
46
47
  return ((o = $(t, e)) == null ? void 0 : o.type) === "defaultAttribute";
47
48
  }
48
- function F(t, e) {
49
- return w(t, e) ? t : `${I}${t}`;
49
+ function w(t, e) {
50
+ return v(t, e) ? t : `${I}${t}`;
50
51
  }
51
52
  function Q(t) {
52
- return h(t);
53
+ return P(t);
53
54
  }
54
- const v = Symbol("customCellHtml");
55
+ const M = Symbol("customCellHtml");
55
56
  function Z(t, e, o = {}) {
56
- const n = t[v];
57
+ const n = t[M];
57
58
  if (!n)
58
59
  return { ...t };
59
60
  const c = { ...t };
60
- return e.filter((s) => s.startsWith(T) && !c[s]).forEach((s) => {
61
- const i = A(s), r = b(i) ? F(i, o) : i, u = S(r), R = x(u), D = b(r);
62
- c[s] = (d, U) => {
61
+ return e.filter((i) => i.startsWith(T) && !c[i]).forEach((i) => {
62
+ const s = y(i), r = f(s) ? w(s, o) : s, u = S(r), h = N(u), D = f(r);
63
+ c[i] = (d, U) => {
63
64
  var g;
64
- const E = D ? d[u] : (g = d.product_attributes) == null ? void 0 : g[u], O = N(E) ?? R;
65
- return n(r, O, U);
65
+ const O = D ? d[u] : (g = d.product_attributes) == null ? void 0 : g[u], E = F(O) ?? h;
66
+ return n(r, E, U);
66
67
  };
67
68
  }), c;
68
69
  }
69
70
  function tt(t, e, o = []) {
70
- const n = t.startsWith(T) ? h(S(A(t))) : t, s = n !== t && !o.includes(n) ? n : t, i = (r) => (r == null ? void 0 : r[t]) ?? (r == null ? void 0 : r[s]);
71
+ const n = t.startsWith(T) ? P(S(y(t))) : t, i = n !== t && !o.includes(n) ? n : t, s = (r) => (r == null ? void 0 : r[t]) ?? (r == null ? void 0 : r[i]);
71
72
  return {
72
73
  cellPadding: e.cellPadding,
73
74
  cardBackgroundColor: e.cardBackgroundColor,
74
- cellBackgroundColor: i(e.cellBackgroundColors),
75
- cellAlignment: i(e.cellAlignments),
76
- cellClasses: i(e.cellClasses),
77
- omnibusText: i(e.omnibusTexts),
78
- styleTemplate: i(e.styleTemplates)
75
+ cellBackgroundColor: s(e.cellBackgroundColors),
76
+ cellAlignment: s(e.cellAlignments),
77
+ cellClasses: s(e.cellClasses),
78
+ omnibusText: s(e.omnibusTexts),
79
+ styleTemplate: s(e.styleTemplates)
79
80
  };
80
81
  }
81
82
  const et = {
82
83
  TITLE: "You May Also Like!"
83
84
  }, ot = [
84
- m,
85
- C,
85
+ b,
86
+ _,
86
87
  a,
87
88
  l,
88
- _,
89
- p,
90
- y
89
+ C,
90
+ A,
91
+ p
91
92
  ], nt = {
92
- [m]: !0,
93
- [C]: !0,
93
+ [b]: !0,
94
+ [_]: !0,
94
95
  [l]: !0,
95
96
  [a]: !0,
96
- [_]: !1,
97
- [p]: !1,
98
- [y]: !0
99
- }, M = 10;
100
- function W(t = M) {
97
+ [C]: !1,
98
+ [A]: !1,
99
+ [p]: !0
100
+ }, W = 10;
101
+ function rt(t = W) {
101
102
  return `
102
103
  <tr>
103
104
  <td class="spacer" style="height: ${t}px;"></td>
104
105
  </tr>
105
106
  `;
106
107
  }
107
- const H = W();
108
- function V(t, e) {
108
+ function H(t, e) {
109
109
  return e ? e.pStyle ?? "" : t;
110
110
  }
111
- function rt(t, e, o) {
112
- const n = V(e.pStyle, o), c = o ? o.openTags ?? "" : e.openTags, s = o ? o.closeTags ?? "" : e.closeTags;
113
- return `<p contenteditable="false" style="${n}">${c}${t}${s}</p>`;
111
+ function it(t, e, o) {
112
+ const n = H(e.pStyle, o), c = o ? o.openTags ?? "" : e.openTags, i = o ? o.closeTags ?? "" : e.closeTags;
113
+ return `<p contenteditable="false" style="${n}">${c}${t}${i}</p>`;
114
114
  }
115
115
  function st(t, e) {
116
116
  const o = [];
117
117
  return t && o.push(t), e && o.push(`background-color: ${e};`), o.join(" ");
118
118
  }
119
- function Y(t) {
119
+ function V(t) {
120
120
  return t ? ` background-color: ${t};` : "";
121
121
  }
122
- function it(t) {
123
- const e = Y(t);
122
+ function ct(t) {
123
+ const e = V(t);
124
124
  return e ? ` style="${e.trim()}"` : "";
125
125
  }
126
- function ct(t, e = "") {
126
+ function lt(t, e = "") {
127
127
  return {
128
128
  before: (t == null ? void 0 : t.before) ?? e,
129
129
  after: (t == null ? void 0 : t.after) ?? ""
130
130
  };
131
131
  }
132
- function lt(t, e) {
132
+ function at(t, e) {
133
133
  return `${(e == null ? void 0 : e.openTags) ?? ""}${t}${(e == null ? void 0 : e.closeTags) ?? ""}`;
134
134
  }
135
- function at(t) {
135
+ function ut(t) {
136
136
  return t != null && t.buttonFitToContainer ? "es-button-border es-fw" : "es-button-border";
137
137
  }
138
- const ut = "display: block; max-width: 100%; height: auto;", dt = "border-width: 1px; background: rgb(217, 234, 211); border-color: rgb(106, 168, 79);", gt = "color: rgb(56, 118, 29); background: rgb(217, 234, 211); font-family: arial, 'helvetica neue', helvetica, sans-serif; font-size: 16px; font-weight: normal; line-height: 120%; mso-border-alt: 10px solid rgb(217, 234, 211); mso-padding-alt: 0;", P = "https://email-static.useinsider.com/stripo/modules/email-recommendation-v3/assets/images/image-placeholder.png";
139
- function bt(t) {
140
- return !t || typeof t != "string" || t.trim() === "" ? P : t.startsWith("http://") ? t.replace("http://", "https://") : t;
138
+ const dt = "display: block; max-width: 100%; height: auto;", gt = "border-width: 1px; background: rgb(217, 234, 211); border-color: rgb(106, 168, 79);", ft = "color: rgb(56, 118, 29); background: rgb(217, 234, 211); font-family: arial, 'helvetica neue', helvetica, sans-serif; font-size: 16px; font-weight: normal; line-height: 120%; mso-border-alt: 10px solid rgb(217, 234, 211); mso-padding-alt: 0;", R = "https://email-static.useinsider.com/stripo/modules/email-recommendation-v3/assets/images/image-placeholder.png";
139
+ function mt(t) {
140
+ return !t || typeof t != "string" || t.trim() === "" ? R : t.startsWith("http://") ? t.replace("http://", "https://") : t;
141
141
  }
142
- function G(t) {
142
+ function Y(t) {
143
143
  return {
144
144
  name: "Product Name",
145
- image_url: P,
145
+ image_url: R,
146
146
  price: { USD: 18 },
147
147
  original_price: { USD: 20 },
148
148
  discount: { USD: 2 },
@@ -154,19 +154,20 @@ function G(t) {
154
154
  category: []
155
155
  };
156
156
  }
157
- function ft(t = 6) {
157
+ function Tt(t = 6) {
158
158
  return Array.from(
159
159
  { length: t },
160
- (e, o) => G(String(o + 1))
160
+ (e, o) => Y(String(o + 1))
161
161
  );
162
162
  }
163
- function Tt(t = "grid", e) {
163
+ function bt(t = "grid", e) {
164
164
  const o = t === "list" ? `
165
- data-layout="list"` : "", n = e ? ` ${e}` : "";
165
+ data-layout="list"` : "", n = e ? ` ${e}` : "", i = `recommendation-block-v2 esd-block-recommendation-v3-block es-p20${t === "list" ? " es-m-p0 ins-recommendation-list-layout" : ""}${n}`, s = t === "list" ? "" : `
166
+ {-{-MOBILE_PRODUCT_ROWS-}-}`, r = t === "list" ? ' style="display: none;"' : "";
166
167
  return `
167
168
  <td
168
169
  align="left"
169
- class="${`recommendation-block-v2 esd-block-recommendation-v3-block es-p20${t === "list" ? " es-m-p0 ins-recommendation-list-layout" : ""}${n}`}"${o}>
170
+ class="${i}"${o}>
170
171
  <table width="100%" cellpadding="0" cellspacing="0" border="0">
171
172
  <tr>
172
173
  <td align="center">
@@ -177,28 +178,7 @@ function Tt(t = "grid", e) {
177
178
  cellspacing="0"
178
179
  border="0">
179
180
  <tbody>
180
- <tr>
181
- <td>
182
- <table
183
- width="100%"
184
- cellpadding="0"
185
- cellspacing="0"
186
- border="0">
187
- <tbody>
188
- <tr>
189
- <td
190
- class="esd-block-text es-p10t es-p10b es-p20l es-p20r"
191
- align="center">
192
- <p style="font-size: 28px; color: #333333;">
193
- <strong>{-{-TITLE-}-}</strong>
194
- </p>
195
- </td>
196
- </tr>
197
- </tbody>
198
- </table>
199
- </td>
200
- </tr>
201
- ${H}
181
+ ${k()}
202
182
  <tr>
203
183
  <td>
204
184
  <table
@@ -213,7 +193,7 @@ function Tt(t = "grid", e) {
213
193
  </table>
214
194
  </td>
215
195
  </tr>
216
- <tr class="ins-recommendation-mobile-row"${t === "list" ? ' style="display: none;"' : ""}>
196
+ <tr class="ins-recommendation-mobile-row"${r}>
217
197
  <td>
218
198
  <table
219
199
  class="ins-recommendation-product-container
@@ -223,8 +203,7 @@ function Tt(t = "grid", e) {
223
203
  cellspacing="0"
224
204
  border="0"
225
205
  style="display: none;"
226
- >${t === "list" ? "" : `
227
- {-{-MOBILE_PRODUCT_ROWS-}-}`}
206
+ >${s}
228
207
  </table>
229
208
  </td>
230
209
  </tr>
@@ -237,37 +216,36 @@ function Tt(t = "grid", e) {
237
216
  `;
238
217
  }
239
218
  export {
240
- v as CUSTOM_CELL_HTML,
219
+ M as CUSTOM_CELL_HTML,
241
220
  et as DEFAULTS,
242
- gt as DEFAULT_BUTTON_ANCHOR_STYLE,
243
- dt as DEFAULT_BUTTON_BORDER_STYLE,
221
+ ft as DEFAULT_BUTTON_ANCHOR_STYLE,
222
+ gt as DEFAULT_BUTTON_BORDER_STYLE,
244
223
  ot as DEFAULT_CARD_COMPOSITION,
245
224
  nt as DEFAULT_CARD_VISIBILITY,
246
- ut as DEFAULT_IMG_STYLE,
247
- M as DEFAULT_ROW_SPACING_PX,
248
- P as PLACEHOLDER_IMAGE,
249
- Y as bgColorFragment,
225
+ dt as DEFAULT_IMG_STYLE,
226
+ W as DEFAULT_ROW_SPACING_PX,
227
+ R as PLACEHOLDER_IMAGE,
228
+ V as bgColorFragment,
250
229
  tt as buildCellOptions,
251
230
  Z as buildElementRenderer,
252
- W as buildSpacer,
253
- it as cellBgStyleAttr,
254
- Tt as createBlockTemplate,
255
- f as formatProductPrice,
256
- k as getCurrentCurrencyConfig,
257
- ft as getDefaultProducts,
258
- w as isDefaultAttribute,
231
+ rt as buildSpacer,
232
+ ct as cellBgStyleAttr,
233
+ bt as createBlockTemplate,
234
+ m as formatProductPrice,
235
+ x as getCurrentCurrencyConfig,
236
+ Tt as getDefaultProducts,
237
+ v as isDefaultAttribute,
259
238
  q as isSamePrice,
260
- lt as renderButtonLabel,
261
- rt as renderStyledParagraph,
262
- at as resolveButtonBorderClass,
239
+ at as renderButtonLabel,
240
+ it as renderStyledParagraph,
241
+ ut as resolveButtonBorderClass,
263
242
  J as resolveInlinePriceOrder,
264
- ct as resolveOmnibusText,
265
- V as resolvePStyle,
266
- F as resolveProductAttrValue,
243
+ lt as resolveOmnibusText,
244
+ H as resolvePStyle,
245
+ w as resolveProductAttrValue,
267
246
  st as resolveSegmentBgStyle,
268
- bt as sanitizeImageUrl,
269
- H as spacer,
247
+ mt as sanitizeImageUrl,
270
248
  Q as toCustomCompositionKey,
271
- x as toDisplayName,
272
- N as toDisplayableAttributeValue
249
+ N as toDisplayName,
250
+ F as toDisplayableAttributeValue
273
251
  };
@@ -0,0 +1,22 @@
1
+ import { ModificationDescription as f } from "../../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
2
+ import { RECOMMENDATION_ID_ATTR as m } from "../constants/selectors.js";
3
+ import { isPartnerManagedBlock as a, updateProductContentInPlace as d, regenerateProductRowsWithStyles as l } from "../controls/main/utils.js";
4
+ import { RecommendationConfigService as s } from "../services/configService.js";
5
+ let e = null;
6
+ function N(r) {
7
+ e = r;
8
+ }
9
+ function D(r, c, i, u) {
10
+ const n = e == null ? void 0 : e.getDocumentRootHtmlNode();
11
+ if (!e || !n || !("querySelector" in n))
12
+ return !1;
13
+ const t = n.querySelector(`[${m}="${r}"]`);
14
+ if (!t)
15
+ return !1;
16
+ const o = e.getDocumentModifier();
17
+ return s.stageConfig(o, t, c), a(t) ? (o.apply(new f(u)), !0) : (d({ currentNode: t, documentModifier: o, products: i }) || l({ currentNode: t, documentModifier: o, products: i }), !0);
18
+ }
19
+ export {
20
+ D as commitBlockChangeOutsidePanel,
21
+ N as registerNodeConfigWriter
22
+ };
@@ -1,9 +1,13 @@
1
- const r = ".recommendation-block-v2", t = ".recommendation-product-row";
2
- function n(o) {
3
- return Array.from(o.querySelectorAll(r)).filter((e) => e.querySelector(t)).length;
1
+ const e = ".recommendation-block-v2", n = ".recommendation-product-row";
2
+ function r(o) {
3
+ return !!o.querySelector(n);
4
+ }
5
+ function t(o) {
6
+ return Array.from(o.querySelectorAll(e)).filter(r).length;
4
7
  }
5
8
  export {
6
- r as RECOMMENDATION_BLOCK_SELECTOR,
7
- t as RECOMMENDATION_PRODUCT_ROW_SELECTOR,
8
- n as countLiveRecommendationBlocks
9
+ e as RECOMMENDATION_BLOCK_SELECTOR,
10
+ n as RECOMMENDATION_PRODUCT_ROW_SELECTOR,
11
+ t as countLiveRecommendationBlocks,
12
+ r as isLiveRecommendationBlock
9
13
  };
@@ -1,12 +1,12 @@
1
1
  var c = Object.defineProperty;
2
- var i = (s, r, e) => r in s ? c(s, r, { enumerable: !0, configurable: !0, writable: !0, value: e }) : s[r] = e;
3
- var u = (s, r, e) => i(s, typeof r != "symbol" ? r + "" : r, e);
2
+ var i = (l, a, e) => a in l ? c(l, a, { enumerable: !0, configurable: !0, writable: !0, value: e }) : l[a] = e;
3
+ var T = (l, a, e) => i(l, typeof a != "symbol" ? a + "" : a, e);
4
4
  import { Control as I, UIElementType as n, UEAttr as $ } from "../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
5
- class d extends I {
5
+ class _ extends I {
6
6
  constructor() {
7
7
  super(...arguments);
8
- u(this, "currentNode");
9
- u(this, "lastBlockInstanceId", null);
8
+ T(this, "currentNode");
9
+ T(this, "lastBlockInstanceId", null);
10
10
  }
11
11
  getContainer() {
12
12
  var e;
@@ -91,21 +91,21 @@ class d extends I {
91
91
  * and combines it with the text in Stripo's alert-message layout.
92
92
  */
93
93
  _setInfoMessageValue(e, t) {
94
- const E = this.getContainer(), o = E.querySelector(`[data-icon-key="${e}"]`), a = o == null ? void 0 : o.querySelector("ue-icon-component"), l = (a == null ? void 0 : a.outerHTML) ?? "";
94
+ const E = this.getContainer(), o = E.querySelector(`[data-icon-key="${e}"]`), r = o == null ? void 0 : o.querySelector("ue-icon-component"), s = (r == null ? void 0 : r.outerHTML) ?? "";
95
95
  this.api.setUIEAttribute(
96
96
  e,
97
97
  "value",
98
98
  `
99
99
  <div class="service-element alert-message-main" style="align-items: start;">
100
- ${l}
100
+ ${s}
101
101
  <div class="service-element alert-message-text">
102
102
  ${t}
103
103
  </div>
104
104
  </div>
105
105
  `
106
106
  );
107
- const T = E.querySelector(`[data-info-message="${e}"]`);
108
- T && (T.style.display = "");
107
+ const u = E.querySelector(`[data-info-message="${e}"]`);
108
+ u && (u.style.display = "");
109
109
  }
110
110
  _GuToggle(e) {
111
111
  return `
@@ -126,15 +126,15 @@ class d extends I {
126
126
  placeholder: t,
127
127
  options: E,
128
128
  className: o = "es-180w",
129
- searchable: a = !1
129
+ searchable: r = !1
130
130
  }) {
131
131
  return `
132
132
  <${n.SELECTPICKER}
133
133
  class="${o}"
134
134
  ${$.SELECTPICKER.name}="${e}"
135
- ${a ? `${$.SELECTPICKER.searchable}="true"` : ""}
135
+ ${r ? `${$.SELECTPICKER.searchable}="true"` : ""}
136
136
  ${$.SELECTPICKER.placeholder}="${t}">
137
- ${E.map((l) => this._GuSelectItem(l)).join("")}
137
+ ${E.map((s) => this._GuSelectItem(s)).join("")}
138
138
  </${n.SELECTPICKER}>
139
139
  `;
140
140
  }
@@ -176,12 +176,15 @@ class d extends I {
176
176
  </${n.RADIO_BUTTONS}>
177
177
  `;
178
178
  }
179
- _GuButton({ name: e, label: t, id: E = "" }) {
179
+ _GuButton({ name: e, label: t, id: E = "", className: o = "", icon: r = "", disabled: s = !1 }) {
180
180
  return `
181
181
  <${n.BUTTON}
182
182
  ${$.BUTTON.name}="${e}"
183
183
  ${E ? `id="${E}"` : ""}
184
- ${$.BUTTON.caption}="${t}"}>
184
+ ${o ? `class="${o}"` : ""}
185
+ ${r ? `${$.BUTTON.icon}="${r}"` : ""}
186
+ ${s ? `${$.BUTTON.disabled}="true"` : ""}
187
+ ${$.BUTTON.caption}="${t}">
185
188
  </${n.BUTTON}>
186
189
  `;
187
190
  }
@@ -230,11 +233,11 @@ class d extends I {
230
233
  */
231
234
  _GuOrderable(e, t) {
232
235
  let E = "";
233
- t.forEach((a) => {
234
- const l = $.ORDERABLE_ITEM && "name" in $.ORDERABLE_ITEM ? $.ORDERABLE_ITEM.name : "name";
236
+ t.forEach((r) => {
237
+ const s = $.ORDERABLE_ITEM && "name" in $.ORDERABLE_ITEM ? $.ORDERABLE_ITEM.name : "name";
235
238
  E += `
236
- <${n.ORDERABLE_ITEM} ${l}="${a.key}">
237
- ${a.content}
239
+ <${n.ORDERABLE_ITEM} ${s}="${r.key}">
240
+ ${r.content}
238
241
  </${n.ORDERABLE_ITEM}>
239
242
  `;
240
243
  });
@@ -305,5 +308,5 @@ class d extends I {
305
308
  }
306
309
  }
307
310
  export {
308
- d as CommonControl
311
+ _ as CommonControl
309
312
  };
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-87033101]{position:relative;display:inline-block}.new-tag[data-v-87033101]{position:absolute;top:-8px;right:-16px;z-index:10}[data-v-87033101] .guido__view-option-selection-desktop svg,[data-v-87033101] .guido__view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-87033101] .in-segments-wrapper__button_selected,[data-v-87033101] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}[data-v-87033101] .in-tooltip-wrapper-v2__icon{cursor:pointer}.editor-toolbar[data-v-173c3a40]{gap:4px}.version-history-item[data-v-ee4b9c3f]{flex-basis:200px}.version-history[data-v-fad98586]{gap:8px}.version-history__toolbar[data-v-fad98586]{gap:4px}.view-options-wrapper[data-v-6ebabfe4]{position:relative;display:inline-block}.new-tag[data-v-6ebabfe4]{position:absolute;top:-8px;right:-16px;z-index:10}[data-v-6ebabfe4] .guido__verion-history-view-option-selection-desktop svg,[data-v-6ebabfe4] .guido__verion-history-view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-6ebabfe4] .in-segments-wrapper__button_selected,[data-v-6ebabfe4] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}[data-v-6ebabfe4] .in-tooltip-wrapper-v2__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-6e711fd7]{gap:4px}.header-wrapper[data-v-d11dd577]{min-width:1000px}.guido-loading__wrapper[data-v-07c4b2d8]{height:100%;top:75px!important;bottom:0!important}.guido-editor__wrapper[data-v-b0d3b445]{--ribbon-offset: 0px;position:relative;width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__container[data-v-b0d3b445]{width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__no-header[data-v-b0d3b445]{height:calc(100vh - 75px - var(--ribbon-offset))}[data-v-293f1c47] .in-breadcrumb-wrapper__links{cursor:pointer}.templates-wrapper[data-v-91a26acd]{gap:16px;grid-template-columns:repeat(3,1fr)}.templates-wrapper .template-wrapper[data-v-91a26acd]{cursor:pointer}.templates-wrapper .template-wrapper .template-container[data-v-91a26acd]{height:274px;padding:2px;transition:none}.templates-wrapper .template-wrapper .template-container.selected[data-v-91a26acd]{padding:1px}.templates-wrapper .template-wrapper .template-container .thumbnail[data-v-91a26acd]{object-fit:cover;transform:scale(1)}[data-v-b9a93c6e] .guido__verion-history-view-option-selection-desktop svg,[data-v-b9a93c6e] .guido__verion-history-view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-b9a93c6e] .in-segments-wrapper__button_selected,[data-v-b9a93c6e] .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-cf946232]{min-width:602px;height:70vh;min-height:583px;border-radius:10px}.desktop-preview iframe[data-v-cf946232]{min-height:504px}.iframe-wrapper[data-v-f255b2bb]{width:258px}.iframe-scaled[data-v-f255b2bb]{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-6bcaca8a] .vueperslides__parallax-wrapper{padding-bottom:110px!important}[data-v-f16f20f8] .vueperslides__bullets{pointer-events:none!important}[data-v-f16f20f8] .vueperslides__parallax-wrapper{padding-bottom:110px!important}[data-v-bb3cca55] .vueperslides__bullets{pointer-events:none!important}[data-v-bb3cca55] .vueperslides__parallax-wrapper{height:110px!important;padding-bottom:110px!important}[data-v-b09e80c4] .vueperslides__bullets{pointer-events:none!important}[data-v-b09e80c4] .vueperslides__parallax-wrapper{height:110px!important;padding-bottom:110px!important}[data-v-9bdef600] .vueperslides__parallax-wrapper{padding-bottom:110px!important}
1
+ @charset "UTF-8";.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-87033101]{position:relative;display:inline-block}.new-tag[data-v-87033101]{position:absolute;top:-8px;right:-16px;z-index:10}[data-v-87033101] .guido__view-option-selection-desktop svg,[data-v-87033101] .guido__view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-87033101] .in-segments-wrapper__button_selected,[data-v-87033101] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}[data-v-87033101] .in-tooltip-wrapper-v2__icon{cursor:pointer}.editor-toolbar[data-v-173c3a40]{gap:4px}.version-history-item[data-v-ee4b9c3f]{flex-basis:200px}.version-history[data-v-fad98586]{gap:8px}.version-history__toolbar[data-v-fad98586]{gap:4px}.view-options-wrapper[data-v-6ebabfe4]{position:relative;display:inline-block}.new-tag[data-v-6ebabfe4]{position:absolute;top:-8px;right:-16px;z-index:10}[data-v-6ebabfe4] .guido__verion-history-view-option-selection-desktop svg,[data-v-6ebabfe4] .guido__verion-history-view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-6ebabfe4] .in-segments-wrapper__button_selected,[data-v-6ebabfe4] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}[data-v-6ebabfe4] .in-tooltip-wrapper-v2__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-6e711fd7]{gap:4px}.header-wrapper[data-v-d11dd577]{min-width:1000px}.guido-loading__wrapper[data-v-07c4b2d8]{height:100%;top:75px!important;bottom:0!important}.guido-editor__wrapper[data-v-5c588dc5]{--ribbon-offset: 0px;position:relative;width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__container[data-v-5c588dc5]{width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__no-header[data-v-5c588dc5]{height:calc(100vh - 75px - var(--ribbon-offset))}[data-v-293f1c47] .in-breadcrumb-wrapper__links{cursor:pointer}.templates-wrapper[data-v-91a26acd]{gap:16px;grid-template-columns:repeat(3,1fr)}.templates-wrapper .template-wrapper[data-v-91a26acd]{cursor:pointer}.templates-wrapper .template-wrapper .template-container[data-v-91a26acd]{height:274px;padding:2px;transition:none}.templates-wrapper .template-wrapper .template-container.selected[data-v-91a26acd]{padding:1px}.templates-wrapper .template-wrapper .template-container .thumbnail[data-v-91a26acd]{object-fit:cover;transform:scale(1)}[data-v-b9a93c6e] .guido__verion-history-view-option-selection-desktop svg,[data-v-b9a93c6e] .guido__verion-history-view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-b9a93c6e] .in-segments-wrapper__button_selected,[data-v-b9a93c6e] .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-cf946232]{min-width:602px;height:70vh;min-height:583px;border-radius:10px}.desktop-preview iframe[data-v-cf946232]{min-height:504px}.iframe-wrapper[data-v-f255b2bb]{width:258px}.iframe-scaled[data-v-f255b2bb]{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-6bcaca8a] .vueperslides__parallax-wrapper{padding-bottom:110px!important}[data-v-f16f20f8] .vueperslides__bullets{pointer-events:none!important}[data-v-f16f20f8] .vueperslides__parallax-wrapper{padding-bottom:110px!important}[data-v-bb3cca55] .vueperslides__bullets{pointer-events:none!important}[data-v-bb3cca55] .vueperslides__parallax-wrapper{height:110px!important;padding-bottom:110px!important}[data-v-b09e80c4] .vueperslides__bullets{pointer-events:none!important}[data-v-b09e80c4] .vueperslides__parallax-wrapper{height:110px!important;padding-bottom:110px!important}[data-v-9bdef600] .vueperslides__parallax-wrapper{padding-bottom:110px!important}.assign-strategy-drawer-content .assign-strategy-select[data-v-2580a7d9]{width:100%;max-width:none}.assign-strategy-drawer-content .assign-strategy-select[data-v-2580a7d9] .in-dropdown-box__container{width:413px}.assign-strategy-drawer .spaced-dot-sep{background-image:linear-gradient(90deg,#91949f 20%,#fff0 0);background-position:center bottom;background-repeat:repeat-x;background-size:5px 1px}.assign-strategy-drawer .spaced-dot-sep--top{background-position:center top}.assign-strategy-drawer .spaced-dot-sep--fc-n:first-child{background:none}
@@ -1,52 +1,91 @@
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),
1
+ import { useHttp as l } from "../composables/useHttp.js";
2
+ import { URLS as m, QUERY_PARAMS as u } from "../enums/extensions/recommendationBlock.js";
3
+ const y = "[sr_strategies.status][=][active]*[sr_strategies.suitable_channels][~][EMAIL]", R = (c) => c.reduce(
4
+ (s, r, i) => (s[i] = {
5
+ attributeName: r.attributeName,
6
+ attributeJs: r.attributeJs,
7
+ attributeType: r.attributeType,
8
+ type: r.type,
9
+ displayName: r.displayName,
10
+ isFilterable: r.isFilterable
11
+ }, s),
12
12
  {}
13
- ), f = () => {
14
- const { get: o } = d(), { get: a } = d({ headers: {} }), t = "6KcLM9TwheVB1mgK";
13
+ ), _ = () => {
14
+ const { get: c, post: s } = l(), { get: r } = l({ headers: {} }), i = "6KcLM9TwheVB1mgK";
15
15
  return {
16
16
  fetchRecommendationCreateData: async () => {
17
17
  try {
18
- return (await o("/newsletter/recommendations/create-data")).data;
18
+ return (await c("/newsletter/recommendations/create-data")).data;
19
19
  } catch (e) {
20
20
  throw console.error("fetchUserModalState error:", e), e;
21
21
  }
22
22
  },
23
23
  fetchRecommendationFilters: async () => {
24
24
  try {
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);
25
+ const { data: e } = await c(
26
+ m.PRODUCT_ATTRIBUTES_PATH
27
+ ), o = Array.isArray(e) ? e : (e == null ? void 0 : e.data) ?? [];
28
+ return R(o);
29
29
  } catch (e) {
30
30
  throw console.error("fetchRecommendationFilters error:", e), e;
31
31
  }
32
32
  },
33
- fetchRecommendationProducts: async (e, n) => {
34
- var i;
33
+ fetchRecommendationProducts: async (e, o) => {
34
+ var t;
35
35
  try {
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}`
36
+ const n = new URLSearchParams(Object.entries(o));
37
+ n.set(u.CLIENT_ID, i);
38
+ const d = decodeURIComponent(n.toString());
39
+ console.debug("🏁 Recommendation API Query:", d);
40
+ const a = await r(
41
+ `${m.RECOMMENDATION_API_URL}/v2/${e}?${d}`
42
42
  );
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;
43
+ return ((t = a == null ? void 0 : a.data) == null ? void 0 : t.data) ?? [];
44
+ } catch (n) {
45
+ throw console.error("fetchRecommendationProducts error:", n), n;
46
+ }
47
+ },
48
+ fetchRecommendationProductsByUrl: async (e) => {
49
+ var o;
50
+ try {
51
+ const t = new RegExp(`[?&]${u.CLIENT_ID}=`).test(e), n = e.includes("?") ? "&" : "?", d = t ? e : `${e}${n}${u.CLIENT_ID}=${i}`, a = await r(
52
+ d
53
+ );
54
+ return ((o = a == null ? void 0 : a.data) == null ? void 0 : o.data) ?? [];
55
+ } catch (t) {
56
+ return console.error("fetchRecommendationProductsByUrl error:", t), [];
57
+ }
58
+ },
59
+ fetchRecommendationStrategies: async () => {
60
+ try {
61
+ const { data: e } = await c(
62
+ `${m.RECOMMENDATION_STRATEGIES_PATH}?filters=${encodeURIComponent(y)}`
63
+ );
64
+ return Array.isArray(e) ? e : (e == null ? void 0 : e.data) ?? [];
65
+ } catch (e) {
66
+ throw console.error("fetchRecommendationStrategies error:", e), e;
67
+ }
68
+ },
69
+ generateStrategyEndpoint: async (e, o) => {
70
+ try {
71
+ const { data: t } = await s(
72
+ `${m.RECOMMENDATION_STRATEGIES_PATH}/endpoint-generate`,
73
+ {
74
+ campaignId: 0,
75
+ pageTypes: [],
76
+ isPreviewer: !1,
77
+ strategy: e,
78
+ userId: "",
79
+ currency: o
80
+ }
81
+ );
82
+ return !t || typeof t != "object" || !("full_path" in t || "data" in t) ? (console.error("generateStrategyEndpoint unexpected response shape:", t), null) : "full_path" in t ? t : t.data;
83
+ } catch (t) {
84
+ return console.error("generateStrategyEndpoint error:", t), null;
46
85
  }
47
86
  }
48
87
  };
49
88
  };
50
89
  export {
51
- f as useRecommendationApi
90
+ _ as useRecommendationApi
52
91
  };
@@ -395,6 +395,7 @@ export declare const FeaturesSchema: v.ObjectSchema<{
395
395
  readonly allowlistEnabled: v.OptionalSchema<v.BooleanSchema<undefined>, false>;
396
396
  /** Enable persistent link tracking-id assignment for the click heatmap (opt-in) */
397
397
  readonly linkTrackingIds: v.OptionalSchema<v.BooleanSchema<undefined>, false>;
398
+ readonly reusableRecommendationStrategy: v.OptionalSchema<v.BooleanSchema<undefined>, false>;
398
399
  }, undefined>;
399
400
  /**
400
401
  * Default block types available in Stripo
@@ -794,6 +795,7 @@ export declare const GuidoConfigSchema: v.ObjectSchema<{
794
795
  readonly allowlistEnabled: v.OptionalSchema<v.BooleanSchema<undefined>, false>;
795
796
  /** Enable persistent link tracking-id assignment for the click heatmap (opt-in) */
796
797
  readonly linkTrackingIds: v.OptionalSchema<v.BooleanSchema<undefined>, false>;
798
+ readonly reusableRecommendationStrategy: v.OptionalSchema<v.BooleanSchema<undefined>, false>;
797
799
  }, undefined>, {}>;
798
800
  /** Block configuration */
799
801
  readonly blocks: v.OptionalSchema<v.ObjectSchema<{
@@ -0,0 +1,3 @@
1
+ import '@useinsider/design-system-organisms/style';
2
+ declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue/types/v3-component-options.js").ComponentOptionsMixin, import("vue/types/v3-component-options.js").ComponentOptionsMixin, {}, string, Readonly<import("vue").ExtractPropTypes<{}>>, {}>;
3
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue/types/v3-component-options.js").ComponentOptionsMixin, import("vue/types/v3-component-options.js").ComponentOptionsMixin, {}, string, Readonly<import("vue").ExtractPropTypes<{}>>, {}>;
2
+ export default _default;