@useinsider/guido 3.12.0-beta.cfe6433 → 3.12.0-beta.d77b0d2

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 (92) hide show
  1. package/dist/@types/config/schemas.js +9 -4
  2. package/dist/components/Guido.vue.js +6 -6
  3. package/dist/components/Guido.vue2.js +50 -49
  4. package/dist/components/organisms/email-preview/desktop-preview/DesktopPreview.vue.js +1 -1
  5. package/dist/components/organisms/email-preview/desktop-preview/DesktopPreview.vue2.js +8 -8
  6. package/dist/components/organisms/email-preview/mobile-preview/ContentView.vue.js +5 -5
  7. package/dist/components/organisms/email-preview/mobile-preview/ContentView.vue2.js +10 -10
  8. package/dist/components/organisms/extensions/recommendation/StrategyDetailDrawer.vue.js +38 -0
  9. package/dist/components/organisms/extensions/recommendation/StrategyDetailDrawer.vue2.js +271 -0
  10. package/dist/components/organisms/extensions/recommendation/strategy-detail/CampaignTable.vue.js +18 -0
  11. package/dist/components/organisms/extensions/recommendation/strategy-detail/CampaignTable.vue2.js +42 -0
  12. package/dist/components/organisms/extensions/recommendation/strategy-detail/FilterHumanizer.vue.js +20 -0
  13. package/dist/components/organisms/extensions/recommendation/strategy-detail/FilterHumanizer.vue2.js +18 -0
  14. package/dist/components/organisms/extensions/recommendation/strategy-detail/HumanizerCondition.vue.js +20 -0
  15. package/dist/components/organisms/extensions/recommendation/strategy-detail/HumanizerCondition.vue2.js +60 -0
  16. package/dist/components/organisms/extensions/recommendation/strategy-detail/HumanizerGroup.vue.js +19 -0
  17. package/dist/components/organisms/extensions/recommendation/strategy-detail/HumanizerGroup.vue2.js +19 -0
  18. package/dist/components/organisms/extensions/recommendation/strategy-detail/InfoDisplayValue.vue.js +22 -0
  19. package/dist/components/organisms/extensions/recommendation/strategy-detail/InfoDisplayValue.vue2.js +29 -0
  20. package/dist/composables/useHtmlValidator.js +68 -60
  21. package/dist/composables/useHttp.js +61 -52
  22. package/dist/composables/usePreviewInteractionGuard.js +36 -11
  23. package/dist/composables/useRecommendation.js +56 -40
  24. package/dist/composables/useRecommendationPreview.js +61 -60
  25. package/dist/composables/useSave.js +22 -22
  26. package/dist/composables/useStrategyFilters.js +16 -0
  27. package/dist/config/migrator/recommendationMigrator.js +7 -4
  28. package/dist/enums/date.js +4 -3
  29. package/dist/enums/extensions/filteringV2.js +1024 -0
  30. package/dist/enums/extensions/recommendationBlock.js +45 -24
  31. package/dist/enums/extensions/strategyDetail.js +149 -0
  32. package/dist/extensions/Blocks/Recommendation/constants/controlIds.js +1 -1
  33. package/dist/extensions/Blocks/Recommendation/constants/defaultConfig.js +12 -11
  34. package/dist/extensions/Blocks/Recommendation/controls/blockBackground/index.js +10 -0
  35. package/dist/extensions/Blocks/Recommendation/controls/main/index.js +141 -123
  36. package/dist/extensions/Blocks/Recommendation/controls/main/strategy.js +297 -0
  37. package/dist/extensions/Blocks/Recommendation/extension.js +23 -21
  38. package/dist/extensions/Blocks/Recommendation/iconsRegistry.js +16 -2
  39. package/dist/extensions/Blocks/Recommendation/recommendation.css.js +137 -0
  40. package/dist/extensions/Blocks/Recommendation/settingsPanel.js +41 -40
  41. package/dist/extensions/Blocks/Recommendation/store/recommendation.js +549 -165
  42. package/dist/extensions/Blocks/Recommendation/utils/strategyHumanizer.js +97 -0
  43. package/dist/extensions/Blocks/Recommendation/utils/strategyNavigation.js +8 -0
  44. package/dist/extensions/Blocks/Recommendation/utils/strategySummary.js +95 -0
  45. package/dist/extensions/Blocks/Recommendation/utils/strategyUrl.js +43 -0
  46. package/dist/extensions/Blocks/Recommendation/validation/requiredFields.js +24 -10
  47. package/dist/extensions/Blocks/Unsubscribe/utils/constants.js +3 -2
  48. package/dist/extensions/Blocks/common-control.js +37 -35
  49. package/dist/extensions/Blocks/controlFactories.js +125 -75
  50. package/dist/guido.css +1 -1
  51. package/dist/services/recommendationApi.js +127 -33
  52. package/dist/services/stripoApi.js +18 -18
  53. package/dist/src/@types/config/schemas.d.ts +10 -0
  54. package/dist/src/components/organisms/extensions/recommendation/StrategyDetailDrawer.vue.d.ts +2 -0
  55. package/dist/src/components/organisms/extensions/recommendation/strategy-detail/CampaignTable.vue.d.ts +43 -0
  56. package/dist/src/components/organisms/extensions/recommendation/strategy-detail/FilterHumanizer.vue.d.ts +29 -0
  57. package/dist/src/components/organisms/extensions/recommendation/strategy-detail/HumanizerCondition.vue.d.ts +40 -0
  58. package/dist/src/components/organisms/extensions/recommendation/strategy-detail/HumanizerGroup.vue.d.ts +38 -0
  59. package/dist/src/components/organisms/extensions/recommendation/strategy-detail/InfoDisplayValue.vue.d.ts +51 -0
  60. package/dist/src/composables/useConfig.d.ts +2 -0
  61. package/dist/src/composables/useHtmlValidator.d.ts +2 -0
  62. package/dist/src/composables/usePreviewInteractionGuard.d.ts +1 -1
  63. package/dist/src/composables/useRecommendation.d.ts +2 -0
  64. package/dist/src/composables/useStrategyFilters.d.ts +24 -0
  65. package/dist/src/enums/extensions/filteringV2.d.ts +72 -0
  66. package/dist/src/enums/extensions/recommendationBlock.d.ts +33 -0
  67. package/dist/src/enums/extensions/strategyDetail.d.ts +90 -0
  68. package/dist/src/extensions/Blocks/Recommendation/constants/controlIds.d.ts +1 -0
  69. package/dist/src/extensions/Blocks/Recommendation/controls/blockBackground/index.d.ts +14 -0
  70. package/dist/src/extensions/Blocks/Recommendation/controls/index.d.ts +1 -0
  71. package/dist/src/extensions/Blocks/Recommendation/controls/main/index.d.ts +10 -4
  72. package/dist/src/extensions/Blocks/Recommendation/controls/main/strategy.d.ts +118 -0
  73. package/dist/src/extensions/Blocks/Recommendation/store/recommendation.d.ts +958 -1
  74. package/dist/src/extensions/Blocks/Recommendation/types/nodeConfig.d.ts +7 -0
  75. package/dist/src/extensions/Blocks/Recommendation/utils/strategyHumanizer.d.ts +50 -0
  76. package/dist/src/extensions/Blocks/Recommendation/utils/strategyNavigation.d.ts +10 -0
  77. package/dist/src/extensions/Blocks/Recommendation/utils/strategySummary.d.ts +34 -0
  78. package/dist/src/extensions/Blocks/Recommendation/utils/strategyUrl.d.ts +51 -0
  79. package/dist/src/extensions/Blocks/Recommendation/validation/requiredFields.d.ts +8 -1
  80. package/dist/src/extensions/Blocks/Unsubscribe/utils/constants.d.ts +1 -0
  81. package/dist/src/extensions/Blocks/common-control.d.ts +5 -2
  82. package/dist/src/extensions/Blocks/controlFactories.d.ts +36 -0
  83. package/dist/src/mock/api/recommendation-strategies.d.ts +2 -0
  84. package/dist/src/services/recommendationApi.d.ts +9 -1
  85. package/dist/src/stores/config.d.ts +18 -0
  86. package/dist/src/utils/genericUtil.d.ts +9 -0
  87. package/dist/src/utils/urlSchemes.d.ts +6 -0
  88. package/dist/utils/dateUtil.js +23 -10
  89. package/dist/utils/genericUtil.js +10 -1
  90. package/dist/utils/templatePreparation.js +70 -57
  91. package/dist/utils/urlSchemes.js +4 -0
  92. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
- import { TextAlignBuiltInControl as a, TextColorBuiltInControl as g, TextSizeBuiltInControl as f, TextStyleBuiltInControl as x, TextFontFamilyBuiltInControl as C, ButtonBackgroundColorBuiltInControl as T, TextPaddingsBuiltInControl as B, ImageSizeBuiltInControl as m, ImageMarginsBuiltInControl as y, ButtonAlignBuiltInControl as I, ButtonBorderBuiltInControl as S, ButtonBorderRadiusBuiltInControl as A, ButtonColorBuiltInControl as b, ButtonFontFamilyBuiltInControl as N, ButtonMarginsBuiltInControl as q, ButtonPaddingsBuiltInControl as $, ButtonTextBuiltInControl as k, ButtonTextSizeBuiltInControl as p, ButtonTextStyleAndFontColorBuiltInControl as h, ButtonFitToContainerBuiltInControl as F, TextLineSpacingBuiltInControl as M } from "../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
2
- const R = "buttonTextStyleForm", _ = "backgroundColor", E = /* @__PURE__ */ new Set(["", "transparent", "rgba(0, 0, 0, 0)"]);
3
- function z(o, n, r) {
4
- return class extends a {
1
+ import { TextAlignBuiltInControl as C, TextColorBuiltInControl as x, TextSizeBuiltInControl as T, TextStyleBuiltInControl as B, TextFontFamilyBuiltInControl as m, ButtonBackgroundColorBuiltInControl as d, TextPaddingsBuiltInControl as y, ImageSizeBuiltInControl as b, ImageMarginsBuiltInControl as I, ButtonAlignBuiltInControl as S, ButtonBorderBuiltInControl as A, ButtonBorderRadiusBuiltInControl as k, ButtonColorBuiltInControl as N, ButtonFontFamilyBuiltInControl as h, ButtonMarginsBuiltInControl as p, ButtonPaddingsBuiltInControl as $, ButtonTextBuiltInControl as q, ButtonTextSizeBuiltInControl as F, ButtonTextStyleAndFontColorBuiltInControl as v, ButtonFitToContainerBuiltInControl as R, TextLineSpacingBuiltInControl as M } from "../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
2
+ const O = "buttonTextStyleForm", a = "backgroundColor", g = /* @__PURE__ */ new Set(["", "transparent", "rgba(0, 0, 0, 0)"]), _ = ["elementColor", a], E = /^#([0-9a-f]{3}|[0-9a-f]{6})$/i;
3
+ function P(o, n, r) {
4
+ return class extends C {
5
5
  getId() {
6
6
  return o;
7
7
  }
@@ -13,8 +13,8 @@ function z(o, n, r) {
13
13
  }
14
14
  };
15
15
  }
16
- function v(o, n, r) {
17
- return class extends g {
16
+ function H(o, n, r) {
17
+ return class extends x {
18
18
  getId() {
19
19
  return o;
20
20
  }
@@ -26,8 +26,8 @@ function v(o, n, r) {
26
26
  }
27
27
  };
28
28
  }
29
- function P(o, n, r) {
30
- return class extends f {
29
+ function U(o, n, r) {
30
+ return class extends T {
31
31
  getId() {
32
32
  return o;
33
33
  }
@@ -39,8 +39,8 @@ function P(o, n, r) {
39
39
  }
40
40
  };
41
41
  }
42
- function D(o, n, r) {
43
- return class extends x {
42
+ function Y(o, n, r) {
43
+ return class extends B {
44
44
  getId() {
45
45
  return o;
46
46
  }
@@ -52,8 +52,8 @@ function D(o, n, r) {
52
52
  }
53
53
  };
54
54
  }
55
- function K(o, n, r) {
56
- return class extends C {
55
+ function G(o, n, r) {
56
+ return class extends m {
57
57
  getId() {
58
58
  return o;
59
59
  }
@@ -65,8 +65,8 @@ function K(o, n, r) {
65
65
  }
66
66
  };
67
67
  }
68
- function L(o, n, r) {
69
- return class extends T {
68
+ function V(o, n, r) {
69
+ return class extends d {
70
70
  getId() {
71
71
  return o;
72
72
  }
@@ -89,16 +89,65 @@ function L(o, n, r) {
89
89
  const t = this.getTargetNodes(e);
90
90
  if (!t.length)
91
91
  return;
92
- const s = this.api.getValues()[_], i = !s || E.has(s), c = this.api.getDocumentModifier();
92
+ const i = this.api.getValues()[a], l = !i || g.has(i), s = this.api.getDocumentModifier();
93
93
  return t.forEach((u) => {
94
- const l = c.modifyHtml(u);
95
- i ? l.removeStyle("background-color") : l.setStyle("background-color", s);
96
- }), c;
94
+ const c = s.modifyHtml(u);
95
+ l ? c.removeStyle("background-color") : c.setStyle("background-color", i);
96
+ }), s;
97
97
  }
98
98
  };
99
99
  }
100
- function U(o, n, r) {
101
- return class extends B {
100
+ function K(o) {
101
+ const n = _.find((e) => e in o);
102
+ if (!n)
103
+ return;
104
+ const r = o[n];
105
+ return typeof r == "string" ? r : "";
106
+ }
107
+ function L(o, n) {
108
+ return n.startsWith(".") && "hasClass" in o && o.hasClass(n.slice(1));
109
+ }
110
+ function z(o, n) {
111
+ try {
112
+ return L(o, n) ? o : o.closest(n) ?? void 0;
113
+ } catch {
114
+ return;
115
+ }
116
+ }
117
+ function w(o, n) {
118
+ return class extends d {
119
+ getId() {
120
+ return o;
121
+ }
122
+ /** The parent control renders its own generic title; restore the block-level wording. */
123
+ getLabels() {
124
+ return { title: this.api.translate("Block Background Color") };
125
+ }
126
+ /** Guard: redirect the borrowed button parent onto the block `<td>` so it never paints the Buy buttons. */
127
+ getTargetNodes(r) {
128
+ const e = z(r, n);
129
+ return e ? [e] : [];
130
+ }
131
+ /**
132
+ * Writes the picked background onto the block as an inline style plus a `bgcolor`
133
+ * attribute. This is the whole mechanism, not a mirror: the parent control's own
134
+ * write never reaches the block element (verified at runtime). `bgcolor` is the
135
+ * channel Outlook honours on a `<td>`, and matches what the migrator emits.
136
+ */
137
+ getAdditionalModifications(r) {
138
+ const [e] = this.getTargetNodes(r);
139
+ if (!e)
140
+ return;
141
+ const t = K(this.api.getValues());
142
+ if (t === void 0)
143
+ return;
144
+ const i = !t || g.has(t), l = this.api.getDocumentModifier(), s = l.modifyHtml(e);
145
+ return i ? s.removeStyle("background-color").removeAttribute("bgcolor") : (s.setStyle("background-color", t), E.test(t) ? s.setAttribute("bgcolor", t) : s.removeAttribute("bgcolor")), l;
146
+ }
147
+ };
148
+ }
149
+ function W(o, n, r) {
150
+ return class extends y {
102
151
  getId() {
103
152
  return o;
104
153
  }
@@ -110,7 +159,7 @@ function U(o, n, r) {
110
159
  }
111
160
  };
112
161
  }
113
- function Y(o, n, r) {
162
+ function X(o, n, r) {
114
163
  return class extends M {
115
164
  getId() {
116
165
  return o;
@@ -120,8 +169,8 @@ function Y(o, n, r) {
120
169
  }
121
170
  };
122
171
  }
123
- function w(o, n, r = ".ins-recommendation-product-container") {
124
- return class extends I {
172
+ function j(o, n, r = ".ins-recommendation-product-container") {
173
+ return class extends S {
125
174
  getId() {
126
175
  return o;
127
176
  }
@@ -131,8 +180,8 @@ function w(o, n, r = ".ins-recommendation-product-container") {
131
180
  }
132
181
  };
133
182
  }
134
- function G(o, n, r = ".ins-recommendation-product-container") {
135
- return class extends b {
183
+ function J(o, n, r = ".ins-recommendation-product-container") {
184
+ return class extends N {
136
185
  getId() {
137
186
  return o;
138
187
  }
@@ -142,8 +191,8 @@ function G(o, n, r = ".ins-recommendation-product-container") {
142
191
  }
143
192
  };
144
193
  }
145
- function H(o, n, r = ".ins-recommendation-product-container") {
146
- return class extends S {
194
+ function Q(o, n, r = ".ins-recommendation-product-container") {
195
+ return class extends A {
147
196
  getId() {
148
197
  return o;
149
198
  }
@@ -153,8 +202,8 @@ function H(o, n, r = ".ins-recommendation-product-container") {
153
202
  }
154
203
  };
155
204
  }
156
- function V(o, n, r = ".ins-recommendation-product-container") {
157
- return class extends A {
205
+ function Z(o, n, r = ".ins-recommendation-product-container") {
206
+ return class extends k {
158
207
  getId() {
159
208
  return o;
160
209
  }
@@ -164,8 +213,8 @@ function V(o, n, r = ".ins-recommendation-product-container") {
164
213
  }
165
214
  };
166
215
  }
167
- function W(o, n, r = ".ins-recommendation-product-container") {
168
- return class extends N {
216
+ function tt(o, n, r = ".ins-recommendation-product-container") {
217
+ return class extends h {
169
218
  getId() {
170
219
  return o;
171
220
  }
@@ -175,8 +224,8 @@ function W(o, n, r = ".ins-recommendation-product-container") {
175
224
  }
176
225
  };
177
226
  }
178
- function X(o, n, r = ".ins-recommendation-product-container") {
179
- return class extends q {
227
+ function et(o, n, r = ".ins-recommendation-product-container") {
228
+ return class extends p {
180
229
  getId() {
181
230
  return o;
182
231
  }
@@ -186,7 +235,7 @@ function X(o, n, r = ".ins-recommendation-product-container") {
186
235
  }
187
236
  };
188
237
  }
189
- function j(o, n, r = ".ins-recommendation-product-container") {
238
+ function nt(o, n, r = ".ins-recommendation-product-container") {
190
239
  return class extends $ {
191
240
  getId() {
192
241
  return o;
@@ -197,8 +246,8 @@ function j(o, n, r = ".ins-recommendation-product-container") {
197
246
  }
198
247
  };
199
248
  }
200
- function J(o, n, r = ".ins-recommendation-product-container") {
201
- return class extends k {
249
+ function rt(o, n, r = ".ins-recommendation-product-container") {
250
+ return class extends q {
202
251
  getId() {
203
252
  return o;
204
253
  }
@@ -208,8 +257,8 @@ function J(o, n, r = ".ins-recommendation-product-container") {
208
257
  }
209
258
  };
210
259
  }
211
- function Q(o, n, r = ".ins-recommendation-product-container") {
212
- return class extends p {
260
+ function ot(o, n, r = ".ins-recommendation-product-container") {
261
+ return class extends F {
213
262
  getId() {
214
263
  return o;
215
264
  }
@@ -219,8 +268,8 @@ function Q(o, n, r = ".ins-recommendation-product-container") {
219
268
  }
220
269
  };
221
270
  }
222
- function Z(o, n, r) {
223
- return class extends h {
271
+ function st(o, n, r) {
272
+ return class extends v {
224
273
  getId() {
225
274
  return o;
226
275
  }
@@ -242,21 +291,21 @@ function Z(o, n, r) {
242
291
  const t = e.closest(r);
243
292
  if (!t)
244
293
  return;
245
- const s = t.querySelectorAll(`[esd-extension-block-id="${n}"] a.es-button`);
246
- if (!s.length)
294
+ const i = t.querySelectorAll(`[esd-extension-block-id="${n}"] a.es-button`);
295
+ if (!i.length)
247
296
  return;
248
- const i = this.api.getValues()[R];
249
- if (!i)
297
+ const l = this.api.getValues()[O];
298
+ if (!l)
250
299
  return;
251
- const c = i.bold ? "bold" : "normal", u = i.italic ? "italic" : "normal", l = this.api.getDocumentModifier();
252
- return s.forEach((d) => {
253
- l.modifyHtml(d).setStyle("font-weight", c).setStyle("font-style", u);
254
- }), l;
300
+ const s = l.bold ? "bold" : "normal", u = l.italic ? "italic" : "normal", c = this.api.getDocumentModifier();
301
+ return i.forEach((f) => {
302
+ c.modifyHtml(f).setStyle("font-weight", s).setStyle("font-style", u);
303
+ }), c;
255
304
  }
256
305
  };
257
306
  }
258
- function tt(o, n, r) {
259
- return class extends F {
307
+ function it(o, n, r) {
308
+ return class extends R {
260
309
  getId() {
261
310
  return o;
262
311
  }
@@ -266,8 +315,8 @@ function tt(o, n, r) {
266
315
  }
267
316
  };
268
317
  }
269
- function et(o, n, r) {
270
- return class extends m {
318
+ function lt(o, n, r) {
319
+ return class extends b {
271
320
  getId() {
272
321
  return o;
273
322
  }
@@ -281,8 +330,8 @@ function et(o, n, r) {
281
330
  }
282
331
  };
283
332
  }
284
- function nt(o, n, r) {
285
- return class extends y {
333
+ function ct(o, n, r) {
334
+ return class extends I {
286
335
  getId() {
287
336
  return o;
288
337
  }
@@ -297,25 +346,26 @@ function nt(o, n, r) {
297
346
  };
298
347
  }
299
348
  export {
300
- w as createButtonAlignControl,
301
- H as createButtonBorderControl,
302
- V as createButtonBorderRadiusControl,
303
- G as createButtonColorControl,
304
- tt as createButtonFitToContainerControl,
305
- W as createButtonFontFamilyControl,
306
- X as createButtonMarginsControl,
307
- j as createButtonPaddingsControl,
308
- J as createButtonTextControl,
309
- Q as createButtonTextSizeControl,
310
- Z as createButtonTextStyleAndFontColorControl,
311
- nt as createImageMarginsControl,
312
- et as createImageSizeControl,
313
- U as createPaddingsControl,
314
- z as createTextAlignControl,
315
- L as createTextBackgroundColorControl,
316
- v as createTextColorControl,
317
- K as createTextFontFamilyControl,
318
- Y as createTextLineSpacingControl,
319
- P as createTextSizeControl,
320
- D as createTextStyleControl
349
+ w as createBlockBackgroundColorControl,
350
+ j as createButtonAlignControl,
351
+ Q as createButtonBorderControl,
352
+ Z as createButtonBorderRadiusControl,
353
+ J as createButtonColorControl,
354
+ it as createButtonFitToContainerControl,
355
+ tt as createButtonFontFamilyControl,
356
+ et as createButtonMarginsControl,
357
+ nt as createButtonPaddingsControl,
358
+ rt as createButtonTextControl,
359
+ ot as createButtonTextSizeControl,
360
+ st as createButtonTextStyleAndFontColorControl,
361
+ ct as createImageMarginsControl,
362
+ lt as createImageSizeControl,
363
+ W as createPaddingsControl,
364
+ P as createTextAlignControl,
365
+ V as createTextBackgroundColorControl,
366
+ H as createTextColorControl,
367
+ G as createTextFontFamilyControl,
368
+ X as createTextLineSpacingControl,
369
+ U as createTextSizeControl,
370
+ Y as createTextStyleControl
321
371
  };
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-fad98586]{gap:8px}.version-history__toolbar[data-v-fad98586]{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-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-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-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-06afaecb]{min-width:602px;height:70vh;min-height:583px;border-radius:10px}.desktop-preview iframe[data-v-06afaecb]{min-height:504px}.iframe-wrapper[data-v-cbafc185]{width:258px}.iframe-scaled[data-v-cbafc185]{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
+ .gap-16[data-v-5553d071],.gap-16[data-v-0e1b0c54]{gap:16px}[data-v-3ff1b2a9] .in-ag-filter-header{display:none}.condition-data[data-v-2685bc55]{gap:4px}.filter-humanizer[data-v-3ecb7de4]{margin:0 -32px}[data-v-6e572ff5] .in-tooltip-wrapper__box{max-width:inherit}[data-v-8e655adb] .in-drawer__content{padding:0}.other-details div[data-v-8e655adb]:first-child{margin-top:0}.strategy-shared-notice[data-v-8e655adb]{margin:0;padding-left:18px}.strategy-shared-notice li+li[data-v-8e655adb]{margin-top:4px}[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-fad98586]{gap:8px}.version-history__toolbar[data-v-fad98586]{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-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-f96d1003]{--ribbon-offset: 0px;position:relative;width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__container[data-v-f96d1003]{width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__no-header[data-v-f96d1003]{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,52 +1,146 @@
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
1
+ import { useHttp as g } from "../composables/useHttp.js";
2
+ import { URLS as i, RRS_STRATEGIES_MAX_PAGES as f, QUERY_PARAMS as m, RRS_STRATEGIES_PER_PAGE as A, RRS_EMAIL_ACTIVE_FILTER as y } from "../enums/extensions/recommendationBlock.js";
3
+ const l = (n) => {
4
+ if (Array.isArray(n))
5
+ return n;
6
+ const a = !!n && typeof n == "object" && "data" in n, o = n == null ? void 0 : n.data;
7
+ return Array.isArray(o) ? o : (n && (!a || o != null) && console.error("[Guido] Unexpected RRS payload shape, falling back to empty:", Object.keys(n)), []);
8
+ }, E = (n) => !n || typeof n != "object" ? null : "data" in n ? n.data ?? null : Object.keys(n).length ? n : null, T = (n) => n.reduce(
9
+ (a, o, d) => (a[d] = {
10
+ attributeName: o.attributeName,
11
+ attributeJs: o.attributeJs,
12
+ attributeType: o.attributeType,
13
+ type: o.type,
14
+ displayName: o.displayName,
15
+ isFilterable: o.isFilterable
11
16
  }, a),
12
17
  {}
13
- ), f = () => {
14
- const { get: o } = d(), { get: a } = d({ headers: {} }), t = "6KcLM9TwheVB1mgK";
18
+ ), G = () => {
19
+ const { get: n, post: a } = g(), { get: o } = g({ headers: {} }), d = "6KcLM9TwheVB1mgK";
15
20
  return {
21
+ duplicateStrategy: async (r) => {
22
+ try {
23
+ const { data: t } = await a(
24
+ i.STRATEGY_DUPLICATE_PATH.replace("{{id}}", r)
25
+ ), e = E(t) ?? t;
26
+ return !(e != null && e.strategyId) || e.status === !1 ? null : String(e.strategyId);
27
+ } catch (t) {
28
+ return console.error("duplicateStrategy error:", t), null;
29
+ }
30
+ },
16
31
  fetchRecommendationCreateData: async () => {
17
32
  try {
18
- return (await o("/newsletter/recommendations/create-data")).data;
19
- } catch (e) {
20
- throw console.error("fetchUserModalState error:", e), e;
33
+ const t = (await n("/newsletter/recommendations/create-data")).data;
34
+ return {
35
+ ...t,
36
+ currencies: Array.isArray(t == null ? void 0 : t.currencies) ? t.currencies : [],
37
+ activePredictiveAlgorithms: Array.isArray(t == null ? void 0 : t.activePredictiveAlgorithms) ? t.activePredictiveAlgorithms : [],
38
+ languages: (t == null ? void 0 : t.languages) ?? {}
39
+ };
40
+ } catch (r) {
41
+ throw console.error("fetchRecommendationCreateData error:", r), r;
21
42
  }
22
43
  },
23
44
  fetchRecommendationFilters: async () => {
24
45
  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);
29
- } catch (e) {
30
- throw console.error("fetchRecommendationFilters error:", e), e;
46
+ const { data: r } = await n(
47
+ i.PRODUCT_ATTRIBUTES_PATH
48
+ ), t = Array.isArray(r) ? r : (r == null ? void 0 : r.data) ?? [];
49
+ return T(t);
50
+ } catch (r) {
51
+ throw console.error("fetchRecommendationFilters error:", r), r;
31
52
  }
32
53
  },
33
- fetchRecommendationProducts: async (e, n) => {
34
- var i;
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}`
54
+ fetchRecommendationProducts: async (r, t) => {
55
+ var e;
56
+ try {
57
+ const c = new URLSearchParams(Object.entries(t));
58
+ c.set(m.CLIENT_ID, d);
59
+ const u = decodeURIComponent(c.toString());
60
+ console.debug("🏁 Recommendation API Query:", u);
61
+ const s = await o(
62
+ `${i.RECOMMENDATION_API_URL}/v2/${r}?${u}`
42
63
  );
43
- return ((i = c == null ? void 0 : c.data) == null ? void 0 : i.data) ?? [];
64
+ return ((e = s == null ? void 0 : s.data) == null ? void 0 : e.data) ?? [];
65
+ } catch (c) {
66
+ throw console.error("fetchRecommendationProducts error:", c), c;
67
+ }
68
+ },
69
+ fetchRecommendationProductsByUrl: async (r) => {
70
+ var t;
71
+ try {
72
+ const e = await o(r);
73
+ return ((t = e == null ? void 0 : e.data) == null ? void 0 : t.data) ?? [];
74
+ } catch (e) {
75
+ throw console.error("fetchRecommendationProductsByUrl error:", e), e;
76
+ }
77
+ },
78
+ fetchRecommendationStrategies: async () => {
79
+ try {
80
+ const r = [], t = /* @__PURE__ */ new Set();
81
+ for (let e = 1; e <= f; e++) {
82
+ const c = new URLSearchParams({
83
+ [m.FILTERS]: y,
84
+ [m.PER_PAGE]: String(A),
85
+ [m.PAGE]: String(e)
86
+ }), { data: u } = await n(
87
+ `${i.RECOMMENDATION_STRATEGIES_PATH}?${c.toString()}`
88
+ ), s = l(u), S = t.size;
89
+ if (s.forEach((R) => {
90
+ const h = String(R.strategy_id);
91
+ t.has(h) || (t.add(h), r.push(R));
92
+ }), s.length < A || t.size === S)
93
+ break;
94
+ }
95
+ return r;
44
96
  } catch (r) {
45
- throw console.error("fetchRecommendationProducts error:", r), r;
97
+ throw console.error("fetchRecommendationStrategies error:", r), r;
98
+ }
99
+ },
100
+ fetchStrategyCampaigns: async (r, t) => {
101
+ try {
102
+ const { data: e } = await n(
103
+ `${i.RECOMMENDATION_STRATEGIES_PATH}/${r}/campaigns`
104
+ );
105
+ return l(e).map((c) => ({
106
+ id: c.id,
107
+ name: c.name,
108
+ status: c.status,
109
+ variants: c.variants ?? [],
110
+ channel: t(`products.${c.productAlias}`),
111
+ productAlias: c.productAlias,
112
+ isPreventing: c.isPreventing
113
+ }));
114
+ } catch (e) {
115
+ return console.error("fetchStrategyCampaigns error:", e), [];
116
+ }
117
+ },
118
+ generateStrategyEndpoint: async (r, t) => {
119
+ try {
120
+ const e = {
121
+ campaignId: t,
122
+ // Email has no page types (RecommendationStrategyEnums::NON_PAGE_TYPE_CHANNELS),
123
+ // so this stays empty rather than splitting an empty string into [''].
124
+ pageTypes: [],
125
+ isPreviewer: !1,
126
+ strategy: r,
127
+ // Resolved per recipient at send time, never here.
128
+ userId: ""
129
+ }, { data: c } = await a(
130
+ i.STRATEGY_ENDPOINT_GENERATE_PATH,
131
+ e
132
+ );
133
+ return E(c);
134
+ } catch (e) {
135
+ console.error("generateStrategyEndpoint error:", e);
136
+ const c = e == null ? void 0 : e.status;
137
+ if (typeof c == "number" && c >= 400 && c < 500)
138
+ return null;
139
+ throw e;
46
140
  }
47
141
  }
48
142
  };
49
143
  };
50
144
  export {
51
- f as useRecommendationApi
145
+ G as useRecommendationApi
52
146
  };
@@ -1,9 +1,13 @@
1
- import { useHttp as d } from "../composables/useHttp.js";
2
- import { useToaster as m } from "../composables/useToaster.js";
3
- import { MAX_DEFAULT_TEMPLATE_ID as y } from "../enums/defaults.js";
4
- import { useBlankTemplate as f } from "./blankTemplate.js";
5
- const D = () => {
6
- const { get: s, post: u } = d(), { handleError: r } = m(), { getBlankTemplate: o } = f();
1
+ import { useHttp as m } from "../composables/useHttp.js";
2
+ import { useToaster as y } from "../composables/useToaster.js";
3
+ import { MAX_DEFAULT_TEMPLATE_ID as f } from "../enums/defaults.js";
4
+ import { useBlankTemplate as g } from "./blankTemplate.js";
5
+ const l = () => ({
6
+ id: 0,
7
+ stripoId: 0,
8
+ unsubscriptionPreferencePages: []
9
+ }), D = () => {
10
+ const { get: s, post: u } = m(), { handleError: r } = y(), { getBlankTemplate: n } = g();
7
11
  return {
8
12
  getToken: async () => {
9
13
  try {
@@ -26,13 +30,13 @@ const D = () => {
26
30
  },
27
31
  getDefaultTemplate: async () => {
28
32
  try {
29
- const t = new URLSearchParams(window.location.search), e = t.get("default-template"), l = t.get("master"), n = e ? parseInt(e) : 0, i = n >= 1 && n <= y ? n : 0;
30
- if (!i && !l)
31
- return await o();
32
- const p = `/stripo/default-template/${i}`, { data: c } = await s(p), a = typeof c == "string" ? JSON.parse(c) : c;
33
- return !a || typeof a != "object" || !("html" in a) || !("css" in a) ? await o() : a;
33
+ const t = new URLSearchParams(window.location.search), e = t.get("default-template"), p = t.get("master"), o = e ? parseInt(e) : 0, i = o >= 1 && o <= f ? o : 0;
34
+ if (!i && !p)
35
+ return await n();
36
+ const d = `/stripo/default-template/${i}`, { data: c } = await s(d), a = typeof c == "string" ? JSON.parse(c) : c;
37
+ return !a || typeof a != "object" || !("html" in a) || !("css" in a) ? await n() : a;
34
38
  } catch (t) {
35
- return r(t, "Failed to fetch default template"), o();
39
+ return r(t, "Failed to fetch default template"), n();
36
40
  }
37
41
  },
38
42
  getSyncModulesStatus: async () => {
@@ -53,13 +57,9 @@ const D = () => {
53
57
  getSyncModule: async (t) => {
54
58
  try {
55
59
  const { data: e } = await s(`/stripo/stripo-modules/${t}/get`);
56
- return e;
60
+ return Array.isArray(e == null ? void 0 : e.unsubscriptionPreferencePages) ? e : l();
57
61
  } catch (e) {
58
- return r(e, "Failed to get sync module"), {
59
- id: 0,
60
- stripoId: 0,
61
- unsubscriptionPreferencePages: []
62
- };
62
+ return r(e, "Failed to get sync module"), l();
63
63
  }
64
64
  },
65
65
  setSyncModuleUnsubscriptionPages: async (t) => {
@@ -377,6 +377,11 @@ export declare const FeaturesSchema: v.ObjectSchema<{
377
377
  readonly liquidSyntax: v.OptionalSchema<v.BooleanSchema<undefined>, false>;
378
378
  /** Enable autosave (3-min interval + tab-hide). User toggles on/off from the header. */
379
379
  readonly autosave: v.OptionalSchema<v.BooleanSchema<undefined>, false>;
380
+ /**
381
+ * Select a Reusable Recommendation Strategy (RRS) instead of a per-block algorithm.
382
+ * Replaces the algorithm dropdown with a strategy dropdown fed from Smart Recommender.
383
+ */
384
+ readonly reusableRecommendationStrategy: v.OptionalSchema<v.BooleanSchema<undefined>, true>;
380
385
  }, undefined>;
381
386
  /**
382
387
  * Default block types available in Stripo
@@ -764,6 +769,11 @@ export declare const GuidoConfigSchema: v.ObjectSchema<{
764
769
  readonly liquidSyntax: v.OptionalSchema<v.BooleanSchema<undefined>, false>;
765
770
  /** Enable autosave (3-min interval + tab-hide). User toggles on/off from the header. */
766
771
  readonly autosave: v.OptionalSchema<v.BooleanSchema<undefined>, false>;
772
+ /**
773
+ * Select a Reusable Recommendation Strategy (RRS) instead of a per-block algorithm.
774
+ * Replaces the algorithm dropdown with a strategy dropdown fed from Smart Recommender.
775
+ */
776
+ readonly reusableRecommendationStrategy: v.OptionalSchema<v.BooleanSchema<undefined>, true>;
767
777
  }, undefined>, {}>;
768
778
  /** Block configuration */
769
779
  readonly blocks: v.OptionalSchema<v.ObjectSchema<{
@@ -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;