@useinsider/guido 3.12.0-beta.0c5c36f → 3.12.0-beta.19da4fb
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.
- package/dist/@types/config/schemas.js +9 -4
- package/dist/components/Guido.vue.js +8 -8
- package/dist/components/Guido.vue2.js +58 -56
- package/dist/components/organisms/extensions/recommendation/StrategyDetailDrawer.vue.js +38 -0
- package/dist/components/organisms/extensions/recommendation/StrategyDetailDrawer.vue2.js +271 -0
- package/dist/components/organisms/extensions/recommendation/StrategyInfoBox.vue.js +20 -0
- package/dist/components/organisms/extensions/recommendation/StrategyInfoBox.vue2.js +16 -0
- package/dist/components/organisms/extensions/recommendation/StrategyPicker.vue.js +20 -0
- package/dist/components/organisms/extensions/recommendation/StrategyPicker.vue2.js +80 -0
- package/dist/components/organisms/extensions/recommendation/strategy-detail/CampaignTable.vue.js +18 -0
- package/dist/components/organisms/extensions/recommendation/strategy-detail/CampaignTable.vue2.js +42 -0
- package/dist/components/organisms/extensions/recommendation/strategy-detail/FilterHumanizer.vue.js +20 -0
- package/dist/components/organisms/extensions/recommendation/strategy-detail/FilterHumanizer.vue2.js +18 -0
- package/dist/components/organisms/extensions/recommendation/strategy-detail/HumanizerCondition.vue.js +20 -0
- package/dist/components/organisms/extensions/recommendation/strategy-detail/HumanizerCondition.vue2.js +60 -0
- package/dist/components/organisms/extensions/recommendation/strategy-detail/HumanizerGroup.vue.js +19 -0
- package/dist/components/organisms/extensions/recommendation/strategy-detail/HumanizerGroup.vue2.js +19 -0
- package/dist/components/organisms/extensions/recommendation/strategy-detail/InfoDisplayValue.vue.js +22 -0
- package/dist/components/organisms/extensions/recommendation/strategy-detail/InfoDisplayValue.vue2.js +29 -0
- package/dist/composables/useRecommendation.js +82 -51
- package/dist/composables/useStrategyFilters.js +16 -0
- package/dist/config/migrator/recommendationMigrator.js +7 -4
- package/dist/enums/date.js +4 -3
- package/dist/enums/extensions/filteringV2.js +1024 -0
- package/dist/enums/extensions/recommendationBlock.js +43 -29
- package/dist/enums/extensions/strategyDetail.js +148 -0
- package/dist/extensions/Blocks/Recommendation/constants/defaultConfig.js +12 -11
- package/dist/extensions/Blocks/Recommendation/controls/main/index.js +137 -119
- package/dist/extensions/Blocks/Recommendation/controls/main/strategy.js +57 -0
- package/dist/extensions/Blocks/Recommendation/store/recommendation.js +392 -112
- package/dist/extensions/Blocks/Recommendation/utils/strategyHumanizer.js +97 -0
- package/dist/extensions/Blocks/Recommendation/utils/strategyInfoBox.js +24 -0
- package/dist/extensions/Blocks/Recommendation/utils/strategyNavigation.js +8 -0
- package/dist/extensions/Blocks/Recommendation/utils/strategySummary.js +95 -0
- package/dist/extensions/Blocks/Recommendation/validation/requiredFields.js +24 -10
- package/dist/guido.css +1 -1
- package/dist/node_modules/@vueuse/core/index.js +48 -0
- package/dist/node_modules/@vueuse/shared/index.js +57 -27
- package/dist/services/recommendationApi.js +86 -29
- package/dist/src/@types/config/schemas.d.ts +10 -0
- package/dist/src/components/organisms/extensions/recommendation/StrategyDetailDrawer.vue.d.ts +2 -0
- package/dist/src/components/organisms/extensions/recommendation/StrategyInfoBox.vue.d.ts +26 -0
- package/dist/src/components/organisms/extensions/recommendation/StrategyPicker.vue.d.ts +2 -0
- package/dist/src/components/organisms/extensions/recommendation/strategy-detail/CampaignTable.vue.d.ts +43 -0
- package/dist/src/components/organisms/extensions/recommendation/strategy-detail/FilterHumanizer.vue.d.ts +29 -0
- package/dist/src/components/organisms/extensions/recommendation/strategy-detail/HumanizerCondition.vue.d.ts +40 -0
- package/dist/src/components/organisms/extensions/recommendation/strategy-detail/HumanizerGroup.vue.d.ts +38 -0
- package/dist/src/components/organisms/extensions/recommendation/strategy-detail/InfoDisplayValue.vue.d.ts +51 -0
- package/dist/src/composables/useConfig.d.ts +2 -0
- package/dist/src/composables/useRecommendation.d.ts +2 -0
- package/dist/src/composables/useStrategyFilters.d.ts +24 -0
- package/dist/src/enums/extensions/filteringV2.d.ts +72 -0
- package/dist/src/enums/extensions/recommendationBlock.d.ts +21 -0
- package/dist/src/enums/extensions/strategyDetail.d.ts +90 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/main/index.d.ts +10 -4
- package/dist/src/extensions/Blocks/Recommendation/controls/main/strategy.d.ts +16 -0
- package/dist/src/extensions/Blocks/Recommendation/store/recommendation.d.ts +894 -1
- package/dist/src/extensions/Blocks/Recommendation/types/nodeConfig.d.ts +7 -0
- package/dist/src/extensions/Blocks/Recommendation/utils/strategyHumanizer.d.ts +50 -0
- package/dist/src/extensions/Blocks/Recommendation/utils/strategyInfoBox.d.ts +33 -0
- package/dist/src/extensions/Blocks/Recommendation/utils/strategyNavigation.d.ts +10 -0
- package/dist/src/extensions/Blocks/Recommendation/utils/strategySummary.d.ts +34 -0
- package/dist/src/extensions/Blocks/Recommendation/validation/requiredFields.d.ts +8 -1
- package/dist/src/mock/api/recommendation-strategies.d.ts +2 -0
- package/dist/src/services/recommendationApi.d.ts +8 -1
- package/dist/src/stores/config.d.ts +18 -0
- package/dist/src/utils/genericUtil.d.ts +9 -0
- package/dist/static/styles/base.css.js +25 -0
- package/dist/utils/dateUtil.js +23 -10
- package/dist/utils/genericUtil.js +10 -1
- package/dist/utils/templatePreparation.js +70 -57
- package/package.json +1 -1
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { FilterTypeNames as f, OperatorAbbreviations as N, UserEvents as y, UserEventKeys as d } from "../../../../enums/extensions/strategyDetail.js";
|
|
2
|
+
import { formatShortDate as p } from "../../../../utils/dateUtil.js";
|
|
3
|
+
const L = /* @__PURE__ */ new Set([
|
|
4
|
+
d.CURRENTLY_VIEWED_ITEM,
|
|
5
|
+
d.LEGACY_CURRENTLY_VIEWED_ITEM
|
|
6
|
+
]), g = /^(\d+)([whd])$/, h = (t) => t ? t.charAt(0).toUpperCase() + t.slice(1) : "", v = (t, e) => {
|
|
7
|
+
const r = y.find((n) => n.value === t);
|
|
8
|
+
return r ? e(r.text) : t;
|
|
9
|
+
}, C = (t, e) => {
|
|
10
|
+
if (t.userAttribute)
|
|
11
|
+
return t.userAttribute;
|
|
12
|
+
if (!t.userEvent)
|
|
13
|
+
return "";
|
|
14
|
+
const r = v(t.userEvent, e);
|
|
15
|
+
if (L.has(t.userEvent))
|
|
16
|
+
return r;
|
|
17
|
+
const n = t.userEventCount ?? 0;
|
|
18
|
+
if (n <= 0)
|
|
19
|
+
return r;
|
|
20
|
+
const a = e(
|
|
21
|
+
n === 1 ? "discovery-strategy-filtering.item" : "discovery-strategy-filtering.items"
|
|
22
|
+
);
|
|
23
|
+
return `${r} ${n} ${a}`;
|
|
24
|
+
}, O = [
|
|
25
|
+
f.USER_ATTRIBUTE_FILTER,
|
|
26
|
+
f.USER_EVENT_FILTER,
|
|
27
|
+
f.USER_CONTEXT_FILTER
|
|
28
|
+
], V = (t) => O.includes(t ?? ""), S = (t, e, r) => {
|
|
29
|
+
if (!t)
|
|
30
|
+
return "";
|
|
31
|
+
const n = g.exec(t);
|
|
32
|
+
if (!n)
|
|
33
|
+
return "";
|
|
34
|
+
const [, a, c] = n, s = e.find((T) => T.value === c), $ = s ? s.text.toLowerCase() : c;
|
|
35
|
+
return ` ${r("purchase-history.in-last")} ${a} ${$}`;
|
|
36
|
+
}, R = (t, e) => t.map((r) => `[${r}]`).join(` ${e} `), b = (t) => {
|
|
37
|
+
let e;
|
|
38
|
+
try {
|
|
39
|
+
e = JSON.parse(t);
|
|
40
|
+
} catch {
|
|
41
|
+
return t.split(",");
|
|
42
|
+
}
|
|
43
|
+
return Array.isArray(e) ? e.map((r) => String(r)) : [String(e)];
|
|
44
|
+
};
|
|
45
|
+
function w(t) {
|
|
46
|
+
const {
|
|
47
|
+
condition: e,
|
|
48
|
+
selectedOperator: r,
|
|
49
|
+
filterValue: n,
|
|
50
|
+
timeUnit: a,
|
|
51
|
+
inBetweenValues: c,
|
|
52
|
+
timeUnitOptions: s,
|
|
53
|
+
isDateAttribute: $,
|
|
54
|
+
isMultiSelect: T,
|
|
55
|
+
isInOrNotInOperator: U,
|
|
56
|
+
trans: E
|
|
57
|
+
} = t, { IN_LAST: A, IN_BETWEEN: _ } = N.OPERATOR, l = E("action-builder.and");
|
|
58
|
+
if (V(e.type)) {
|
|
59
|
+
const i = C(e, E);
|
|
60
|
+
if (i)
|
|
61
|
+
return `${i}${S(e.duration, s, E)}`;
|
|
62
|
+
}
|
|
63
|
+
const u = e.type === f.EVENT_BASED_FILTER ? S(e.duration, s, E) : "";
|
|
64
|
+
if (e.time && r !== _)
|
|
65
|
+
return `${p(e.time)}${u}`;
|
|
66
|
+
if (r === A) {
|
|
67
|
+
const [i] = n.match(/\d+/g) || [];
|
|
68
|
+
if (!i)
|
|
69
|
+
return n;
|
|
70
|
+
const o = s.find((m) => m.value === a);
|
|
71
|
+
return `${i} ${h((o == null ? void 0 : o.text) ?? "")}`.trimEnd();
|
|
72
|
+
}
|
|
73
|
+
if (r === _) {
|
|
74
|
+
if ($() && e.time) {
|
|
75
|
+
const [m = "", I = ""] = e.time.split(":");
|
|
76
|
+
return `${p(m)} ${l} ${p(I)}${u}`;
|
|
77
|
+
}
|
|
78
|
+
const [i = "", o = ""] = c ?? [];
|
|
79
|
+
return `${i} ${l} ${o}${u}`;
|
|
80
|
+
}
|
|
81
|
+
if (T())
|
|
82
|
+
return `${R(b(n), l)}${u}`;
|
|
83
|
+
if (U()) {
|
|
84
|
+
const i = n.split(",");
|
|
85
|
+
return `${i.length > 1 ? R(i, l) : n}${u}`;
|
|
86
|
+
}
|
|
87
|
+
return `${n}${u}`;
|
|
88
|
+
}
|
|
89
|
+
export {
|
|
90
|
+
R as bracketJoin,
|
|
91
|
+
h as capitalizeFirstLetter,
|
|
92
|
+
S as getDurationSuffix,
|
|
93
|
+
w as getSuitableValue,
|
|
94
|
+
C as getUserContextValue,
|
|
95
|
+
v as getUserEventLabel,
|
|
96
|
+
b as parseMultiSelectValue
|
|
97
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { formatShortDate as o } from "../../../../utils/dateUtil.js";
|
|
2
|
+
const a = "view-more", p = (t, e, i) => ({
|
|
3
|
+
id: `strategy-info-box-${t.strategy_id}`,
|
|
4
|
+
theme: "light",
|
|
5
|
+
variant: "information",
|
|
6
|
+
titleText: t.name,
|
|
7
|
+
descriptionText: e("gpt-app-builder.strategy-last-updated", {
|
|
8
|
+
date: o(t.updated_at)
|
|
9
|
+
}),
|
|
10
|
+
buttonOptions: [{
|
|
11
|
+
id: a,
|
|
12
|
+
type: "text",
|
|
13
|
+
text: e("gpt-app-builder.view-more"),
|
|
14
|
+
value: String(t.strategy_id),
|
|
15
|
+
status: "default",
|
|
16
|
+
icon: "line-info-circle"
|
|
17
|
+
}],
|
|
18
|
+
slot: i,
|
|
19
|
+
slotProps: { strategy: t }
|
|
20
|
+
});
|
|
21
|
+
export {
|
|
22
|
+
a as VIEW_MORE_BUTTON_ID,
|
|
23
|
+
p as buildStrategyInfoBoxProps
|
|
24
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { STRATEGY_PAGES as a } from "../../../../enums/extensions/recommendationBlock.js";
|
|
2
|
+
const o = (t) => {
|
|
3
|
+
window.location.assign(t);
|
|
4
|
+
}, e = (t) => a.EDIT.replace("{{id}}", String(t));
|
|
5
|
+
export {
|
|
6
|
+
e as buildStrategyEditPath,
|
|
7
|
+
o as navigateToStrategyPage
|
|
8
|
+
};
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { TimeAbbreviations as g, Operators as y, OperatorNames as c, OperatorAbbreviations as I, DataTypes as O, MultiSelectDataTypes as E } from "../../../../enums/extensions/filteringV2.js";
|
|
2
|
+
import { capitalizeFirstLetter as d, bracketJoin as T, parseMultiSelectValue as v } from "./strategyHumanizer.js";
|
|
3
|
+
import { formatShortDate as f } from "../../../../utils/dateUtil.js";
|
|
4
|
+
import { parseJsonField as b } from "../../../../utils/genericUtil.js";
|
|
5
|
+
const S = "CHEF", _ = "MIXED", M = [S, _], N = 2, h = 4, A = (e) => `recommendation-algorithm-names.${(e || "").replaceAll("_", "-").toLowerCase()}`, x = (e) => ({
|
|
6
|
+
[S]: "discovery-strategy.chef",
|
|
7
|
+
[_]: "discovery-strategy.mixed-algorithm"
|
|
8
|
+
})[e] ?? "discovery-strategy.single-algorithm", L = (e, t) => {
|
|
9
|
+
if (!M.includes(e.algorithm))
|
|
10
|
+
return t(A(e.algorithm));
|
|
11
|
+
const o = t(x(e.algorithm)), i = (e.algorithm_used || "").split(",").map((r) => r.trim()).filter(Boolean).map((r) => t(A(r))), n = [...new Set(i)];
|
|
12
|
+
if (n.length > 1) {
|
|
13
|
+
const r = t("strategy-info-box-content.and-more", { count: n.length - 1 });
|
|
14
|
+
return `${o} - ${n[0]} ${r}`;
|
|
15
|
+
}
|
|
16
|
+
return `${o} - ${n.join(", ")}`;
|
|
17
|
+
}, C = (e, t) => {
|
|
18
|
+
const o = [
|
|
19
|
+
e.exclude_view && "viewed",
|
|
20
|
+
e.exclude_purchase && "purchased",
|
|
21
|
+
e.exclude_cart && "cart"
|
|
22
|
+
].filter(Boolean);
|
|
23
|
+
return o.length ? o.map((n, r) => {
|
|
24
|
+
if (r === 0)
|
|
25
|
+
return t(`recommendation-strategy.recently_${n}`) + (o.length > 2 ? "," : "");
|
|
26
|
+
const s = t(`recommendation-strategy.${n}`);
|
|
27
|
+
return r === o.length - 1 ? `${t("ds-condition.and")} ${s}` : s;
|
|
28
|
+
}).join(" ") : t("recommendation-strategy.none");
|
|
29
|
+
}, D = (e, t) => {
|
|
30
|
+
var n;
|
|
31
|
+
const i = (y[((n = e.attribute) == null ? void 0 : n.attributeType) ?? ""] || []).find((r) => r.value === e.selectedOperator);
|
|
32
|
+
return i ? t(i.text) : "";
|
|
33
|
+
}, w = ({ attribute: e }) => (e == null ? void 0 : e.attributeType) === O.DATE, R = (e) => {
|
|
34
|
+
var r;
|
|
35
|
+
const t = ((r = e.attribute) == null ? void 0 : r.attributeType) ?? "", o = e.selectedOperator ?? "";
|
|
36
|
+
if (!E.includes(t) || [c.CONTAINS, c.NOT_CONTAINS].includes(o))
|
|
37
|
+
return !1;
|
|
38
|
+
const i = [c.IS_EXACTLY, c.IS_NOT_EXACTLY].includes(o);
|
|
39
|
+
return !((e.isHierarchyCategory || t === O.STRING) && i);
|
|
40
|
+
}, j = (e, t, o) => {
|
|
41
|
+
const i = e.value ?? "", n = t("action-builder.and"), { IN_LAST: r, IN_BETWEEN: s } = I.OPERATOR;
|
|
42
|
+
if (e.time && e.selectedOperator !== s)
|
|
43
|
+
return f(e.time);
|
|
44
|
+
if (e.selectedOperator === r) {
|
|
45
|
+
const [a] = i.match(/\d+/g) || [], l = o[e.timeUnit ?? ""];
|
|
46
|
+
return a && l ? `${a} ${l}` : i;
|
|
47
|
+
}
|
|
48
|
+
if (e.selectedOperator === s) {
|
|
49
|
+
if (w(e)) {
|
|
50
|
+
const [m = "", u = ""] = (e.time ?? "").split(":");
|
|
51
|
+
return `${f(m)} ${n} ${f(u)}`;
|
|
52
|
+
}
|
|
53
|
+
const [a = "", l = ""] = e.inBetweenValues ?? [];
|
|
54
|
+
return `${a} ${n} ${l}`;
|
|
55
|
+
}
|
|
56
|
+
if (R(e))
|
|
57
|
+
return T(v(i), n);
|
|
58
|
+
if ([c.IN, c.NOT_IN].includes(e.selectedOperator)) {
|
|
59
|
+
const a = i.split(",");
|
|
60
|
+
return a.length > 1 ? T(a, n) : i;
|
|
61
|
+
}
|
|
62
|
+
return i;
|
|
63
|
+
}, F = (e, t) => {
|
|
64
|
+
var $;
|
|
65
|
+
const o = b(e.filters, {}), n = Object.values(o).slice(0, N).flatMap((p) => (p == null ? void 0 : p.conditionList) ?? []), [r] = n;
|
|
66
|
+
if (!r)
|
|
67
|
+
return t("recommendation-strategy.none");
|
|
68
|
+
const s = {
|
|
69
|
+
[g.WEEK]: d(t("journey-builder.weeks")),
|
|
70
|
+
[g.DAY]: d(t("settings.day-s")),
|
|
71
|
+
[g.HOUR]: d(t("settings.hour-s"))
|
|
72
|
+
}, a = d((($ = r.attribute) == null ? void 0 : $.text) ?? ""), l = D(r, t), m = j(r, t, s), u = `${a} ${t("input.value")} ${l} ${m}`;
|
|
73
|
+
return n.length > 1 ? `${u} ${t("strategy-info-box-content.and-more", { count: n.length - 1 })}` : u;
|
|
74
|
+
}, H = (e, t) => {
|
|
75
|
+
const o = b(e.manual_merchandising_products, []), i = b(e.mixed_strategies, []), n = (Array.isArray(i) ? i : []).map((s) => s == null ? void 0 : s.productId).filter(Boolean), r = [.../* @__PURE__ */ new Set([...Array.isArray(o) ? o : [], ...n])];
|
|
76
|
+
if (!r.length)
|
|
77
|
+
return t("recommendation-strategy.none");
|
|
78
|
+
if (r.length > h) {
|
|
79
|
+
const s = t("strategy-info-box-content.and-more", {
|
|
80
|
+
count: r.length - h
|
|
81
|
+
});
|
|
82
|
+
return `${r.slice(0, h).join(", ")} ${s}`;
|
|
83
|
+
}
|
|
84
|
+
return r.join(", ");
|
|
85
|
+
}, V = (e, t) => [
|
|
86
|
+
{ title: t("gpt-app-builder.algorithms-and-method"), value: L(e, t) },
|
|
87
|
+
{ title: t("gpt-app-builder.exclusions"), value: C(e, t) },
|
|
88
|
+
{ title: t("gpt-app-builder.filters"), value: F(e, t) },
|
|
89
|
+
{ title: t("gpt-app-builder.manual-merchandising"), value: H(e, t) }
|
|
90
|
+
];
|
|
91
|
+
export {
|
|
92
|
+
V as buildStrategySummary,
|
|
93
|
+
A as getAlgorithmTranslationKey,
|
|
94
|
+
x as getMethodTranslationKey
|
|
95
|
+
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const
|
|
1
|
+
const u = [
|
|
2
2
|
{
|
|
3
3
|
key: "locale",
|
|
4
4
|
getValue: (e) => e.language,
|
|
@@ -9,25 +9,39 @@ const l = [
|
|
|
9
9
|
getValue: (e) => e.currencySettings.value,
|
|
10
10
|
getAvailableOptions: (e) => e.currencyList.map((n) => n.text),
|
|
11
11
|
canBeEmpty: !0
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
// Only a *deleted* strategy blocks the save (SD-145578 AC-4). An empty
|
|
15
|
+
// strategyId is legitimate: blocks saved before RRS keep running on their
|
|
16
|
+
// algorithm URL, and with the flag on by default those templates must stay
|
|
17
|
+
// saveable.
|
|
18
|
+
//
|
|
19
|
+
// `canValidateStrategy` gates the whole check — mid-fetch the listing is
|
|
20
|
+
// empty and every assigned id would look deleted.
|
|
21
|
+
key: "strategy",
|
|
22
|
+
optional: !0,
|
|
23
|
+
getValue: (e) => e.strategyId,
|
|
24
|
+
getAvailableOptions: (e) => e.strategyIds,
|
|
25
|
+
condition: (e, n) => n.isRrsEnabled && n.canValidateStrategy
|
|
12
26
|
}
|
|
13
27
|
], o = "newsletter.recommendation-fill-required-fields";
|
|
14
|
-
function c(e, n,
|
|
15
|
-
return
|
|
16
|
-
var
|
|
17
|
-
if (t.condition && !t.condition(e))
|
|
28
|
+
function c(e, n, l = u) {
|
|
29
|
+
return l.filter((t) => {
|
|
30
|
+
var i;
|
|
31
|
+
if (t.condition && !t.condition(e, n))
|
|
18
32
|
return !1;
|
|
19
|
-
const
|
|
20
|
-
if (t.canBeEmpty && (
|
|
33
|
+
const a = (i = t.getAvailableOptions) == null ? void 0 : i.call(t, n);
|
|
34
|
+
if (t.canBeEmpty && (a == null ? void 0 : a.length) === 0)
|
|
21
35
|
return !1;
|
|
22
|
-
const
|
|
23
|
-
return
|
|
36
|
+
const r = t.getValue(e);
|
|
37
|
+
return r ? a !== void 0 && !a.includes(r) : !t.optional;
|
|
24
38
|
}).map((t) => t.key);
|
|
25
39
|
}
|
|
26
40
|
function s(e, n) {
|
|
27
41
|
return c(e, n).length === 0;
|
|
28
42
|
}
|
|
29
43
|
export {
|
|
30
|
-
|
|
44
|
+
u as REQUIRED_RECOMMENDATION_FIELDS,
|
|
31
45
|
o as RecommendationRequiredFieldsKey,
|
|
32
46
|
c as getInvalidFields,
|
|
33
47
|
s as isConfigValid
|
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-
|
|
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-ef803818]{gap:4px}.filter-humanizer[data-v-3ecb7de4]{margin:0 -32px}[data-v-6e572ff5] .in-tooltip-wrapper__box{max-width:inherit}[data-v-30363cc2] .in-drawer__content{padding:0}.other-details div[data-v-30363cc2]:first-child{margin-top:0}.strategy-shared-notice[data-v-30363cc2]{margin:0;padding-left:18px}.strategy-shared-notice li+li[data-v-30363cc2]{margin-top:4px}.strategy-info-box__row+.strategy-info-box__row[data-v-0cfc2679]{margin-top:12px}.strategy-info-box__title[data-v-0cfc2679]{margin:0;font-size:12px;line-height:16px}.strategy-info-box__value[data-v-0cfc2679]{margin:0;font-size:13px;line-height:18px;word-break:break-word}.strategy-picker[data-v-4d69210f]{position:fixed;display:flex;align-items:center;gap:8px;z-index:20}.strategy-picker__select[data-v-4d69210f]{flex:1;min-width:0}[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-b42dde02]{--ribbon-offset: 0px;position:relative;width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__container[data-v-b42dde02]{width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__no-header[data-v-b42dde02]{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}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { noop as y, toValue as f, isObject as v, tryOnScopeDispose as A, isClient as E } from "../shared/index.js";
|
|
2
|
+
import { createFilterWrapper as g, debounceFilter as j, throttleFilter as M, useDebounceFn as S, useThrottleFn as T } from "../shared/index.js";
|
|
3
|
+
import "../../vue-demi/lib/index.js";
|
|
4
|
+
import { watch as F } from "vue";
|
|
5
|
+
const w = E ? window : void 0;
|
|
6
|
+
function b(n) {
|
|
7
|
+
var t;
|
|
8
|
+
const e = f(n);
|
|
9
|
+
return (t = e == null ? void 0 : e.$el) != null ? t : e;
|
|
10
|
+
}
|
|
11
|
+
function C(...n) {
|
|
12
|
+
let t, e, o, u;
|
|
13
|
+
if (typeof n[0] == "string" || Array.isArray(n[0]) ? ([e, o, u] = n, t = w) : [t, e, o, u] = n, !t)
|
|
14
|
+
return y;
|
|
15
|
+
Array.isArray(e) || (e = [e]), Array.isArray(o) || (o = [o]);
|
|
16
|
+
const a = [], c = () => {
|
|
17
|
+
a.forEach((r) => r()), a.length = 0;
|
|
18
|
+
}, m = (r, i, s, l) => (r.addEventListener(i, s, l), () => r.removeEventListener(i, s, l)), d = F(
|
|
19
|
+
() => [b(t), f(u)],
|
|
20
|
+
([r, i]) => {
|
|
21
|
+
if (c(), !r)
|
|
22
|
+
return;
|
|
23
|
+
const s = v(i) ? { ...i } : i;
|
|
24
|
+
a.push(
|
|
25
|
+
...e.flatMap((l) => o.map((h) => m(r, l, h, s)))
|
|
26
|
+
);
|
|
27
|
+
},
|
|
28
|
+
{ immediate: !0, flush: "post" }
|
|
29
|
+
), p = () => {
|
|
30
|
+
d(), c();
|
|
31
|
+
};
|
|
32
|
+
return A(p), p;
|
|
33
|
+
}
|
|
34
|
+
export {
|
|
35
|
+
g as createFilterWrapper,
|
|
36
|
+
j as debounceFilter,
|
|
37
|
+
w as defaultWindow,
|
|
38
|
+
E as isClient,
|
|
39
|
+
v as isObject,
|
|
40
|
+
y as noop,
|
|
41
|
+
M as throttleFilter,
|
|
42
|
+
f as toValue,
|
|
43
|
+
A as tryOnScopeDispose,
|
|
44
|
+
b as unrefElement,
|
|
45
|
+
S as useDebounceFn,
|
|
46
|
+
C as useEventListener,
|
|
47
|
+
T as useThrottleFn
|
|
48
|
+
};
|
|
@@ -1,45 +1,75 @@
|
|
|
1
1
|
import "../../vue-demi/lib/index.js";
|
|
2
|
-
import { unref as
|
|
3
|
-
function
|
|
4
|
-
return
|
|
2
|
+
import { isRef as D, unref as S, getCurrentScope as x, onScopeDispose as O } from "vue";
|
|
3
|
+
function R(e) {
|
|
4
|
+
return x() ? (O(e), !0) : !1;
|
|
5
5
|
}
|
|
6
|
+
function d(e) {
|
|
7
|
+
return typeof e == "function" ? e() : S(e);
|
|
8
|
+
}
|
|
9
|
+
const G = typeof window < "u" && typeof document < "u";
|
|
6
10
|
typeof WorkerGlobalScope < "u" && globalThis instanceof WorkerGlobalScope;
|
|
7
|
-
const m = () => {
|
|
11
|
+
const F = Object.prototype.toString, V = (e) => F.call(e) === "[object Object]", m = () => {
|
|
8
12
|
};
|
|
9
|
-
function h(
|
|
10
|
-
function
|
|
11
|
-
return new Promise((
|
|
12
|
-
Promise.resolve(
|
|
13
|
+
function h(e, r) {
|
|
14
|
+
function n(...t) {
|
|
15
|
+
return new Promise((o, i) => {
|
|
16
|
+
Promise.resolve(e(() => r.apply(this, t), { fn: r, thisArg: this, args: t })).then(o).catch(i);
|
|
13
17
|
});
|
|
14
18
|
}
|
|
15
|
-
return
|
|
19
|
+
return n;
|
|
16
20
|
}
|
|
17
|
-
function
|
|
18
|
-
let
|
|
19
|
-
const
|
|
20
|
-
clearTimeout(
|
|
21
|
+
function P(e, r = {}) {
|
|
22
|
+
let n, t, o = m;
|
|
23
|
+
const i = (l) => {
|
|
24
|
+
clearTimeout(l), o(), o = m;
|
|
21
25
|
};
|
|
22
|
-
return (
|
|
23
|
-
const
|
|
24
|
-
return
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
},
|
|
28
|
-
|
|
29
|
-
},
|
|
26
|
+
return (l) => {
|
|
27
|
+
const c = d(e), u = d(r.maxWait);
|
|
28
|
+
return n && i(n), c <= 0 || u !== void 0 && u <= 0 ? (t && (i(t), t = null), Promise.resolve(l())) : new Promise((s, b) => {
|
|
29
|
+
o = r.rejectOnCancel ? b : s, u && !t && (t = setTimeout(() => {
|
|
30
|
+
n && i(n), t = null, s(l());
|
|
31
|
+
}, u)), n = setTimeout(() => {
|
|
32
|
+
t && i(t), t = null, s(l());
|
|
33
|
+
}, c);
|
|
30
34
|
});
|
|
31
35
|
};
|
|
32
36
|
}
|
|
33
|
-
function
|
|
37
|
+
function g(...e) {
|
|
38
|
+
let r = 0, n, t = !0, o = m, i, f, l, c, u;
|
|
39
|
+
!D(e[0]) && typeof e[0] == "object" ? { delay: f, trailing: l = !0, leading: c = !0, rejectOnCancel: u = !1 } = e[0] : [f, l = !0, c = !0, u = !1] = e;
|
|
40
|
+
const s = () => {
|
|
41
|
+
n && (clearTimeout(n), n = void 0, o(), o = m);
|
|
42
|
+
};
|
|
43
|
+
return (j) => {
|
|
44
|
+
const a = d(f), w = Date.now() - r, p = () => i = j();
|
|
45
|
+
return s(), a <= 0 ? (r = Date.now(), p()) : (w > a && (c || !t) ? (r = Date.now(), p()) : l && (i = new Promise((T, y) => {
|
|
46
|
+
o = u ? y : T, n = setTimeout(() => {
|
|
47
|
+
r = Date.now(), t = !0, T(p()), s();
|
|
48
|
+
}, Math.max(0, a - w));
|
|
49
|
+
})), !c && !n && (n = setTimeout(() => t = !0, a)), t = !1, i);
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
function k(e, r = 200, n = {}) {
|
|
53
|
+
return h(
|
|
54
|
+
P(r, n),
|
|
55
|
+
e
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
function A(e, r = 200, n = !1, t = !0, o = !1) {
|
|
34
59
|
return h(
|
|
35
|
-
|
|
36
|
-
|
|
60
|
+
g(r, n, t, o),
|
|
61
|
+
e
|
|
37
62
|
);
|
|
38
63
|
}
|
|
39
64
|
export {
|
|
40
65
|
h as createFilterWrapper,
|
|
41
|
-
|
|
66
|
+
P as debounceFilter,
|
|
67
|
+
G as isClient,
|
|
68
|
+
V as isObject,
|
|
42
69
|
m as noop,
|
|
43
|
-
|
|
44
|
-
|
|
70
|
+
g as throttleFilter,
|
|
71
|
+
d as toValue,
|
|
72
|
+
R as tryOnScopeDispose,
|
|
73
|
+
k as useDebounceFn,
|
|
74
|
+
A as useThrottleFn
|
|
45
75
|
};
|
|
@@ -1,52 +1,109 @@
|
|
|
1
1
|
import { useHttp as d } from "../composables/useHttp.js";
|
|
2
|
-
import { QUERY_PARAMS as
|
|
3
|
-
const
|
|
4
|
-
(
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
2
|
+
import { QUERY_PARAMS as m, URLS as s, RRS_EMAIL_ACTIVE_FILTER as A } from "../enums/extensions/recommendationBlock.js";
|
|
3
|
+
const h = (t) => {
|
|
4
|
+
if (Array.isArray(t))
|
|
5
|
+
return t;
|
|
6
|
+
const c = !!t && typeof t == "object" && "data" in t, o = t == null ? void 0 : t.data;
|
|
7
|
+
return Array.isArray(o) ? o : (t && (!c || o != null) && console.error("[Guido] Unexpected RRS payload shape, falling back to empty:", Object.keys(t)), []);
|
|
8
|
+
}, l = (t) => !t || typeof t != "object" ? null : "data" in t ? t.data ?? null : Object.keys(t).length ? t : null, f = (t) => t.reduce(
|
|
9
|
+
(c, o, i) => (c[i] = {
|
|
10
|
+
attributeName: o.attributeName,
|
|
11
|
+
attributeJs: o.attributeJs,
|
|
12
|
+
attributeType: o.attributeType,
|
|
13
|
+
type: o.type,
|
|
14
|
+
displayName: o.displayName,
|
|
15
|
+
isFilterable: o.isFilterable
|
|
16
|
+
}, c),
|
|
12
17
|
{}
|
|
13
|
-
),
|
|
14
|
-
const { get:
|
|
18
|
+
), _ = () => {
|
|
19
|
+
const { get: t, post: c } = d(), { get: o } = d({ headers: {} }), i = "6KcLM9TwheVB1mgK";
|
|
15
20
|
return {
|
|
21
|
+
duplicateStrategy: async (e) => {
|
|
22
|
+
try {
|
|
23
|
+
const { data: r } = await c(
|
|
24
|
+
s.STRATEGY_DUPLICATE_PATH.replace("{{id}}", e)
|
|
25
|
+
), n = l(r) ?? r;
|
|
26
|
+
return !(n != null && n.strategyId) || n.status === !1 ? null : String(n.strategyId);
|
|
27
|
+
} catch (r) {
|
|
28
|
+
return console.error("duplicateStrategy error:", r), null;
|
|
29
|
+
}
|
|
30
|
+
},
|
|
16
31
|
fetchRecommendationCreateData: async () => {
|
|
17
32
|
try {
|
|
18
|
-
return (await
|
|
33
|
+
return (await t("/newsletter/recommendations/create-data")).data;
|
|
19
34
|
} catch (e) {
|
|
20
|
-
throw console.error("
|
|
35
|
+
throw console.error("fetchRecommendationCreateData error:", e), e;
|
|
21
36
|
}
|
|
22
37
|
},
|
|
23
38
|
fetchRecommendationFilters: async () => {
|
|
24
39
|
try {
|
|
25
|
-
const { data: e } = await
|
|
26
|
-
|
|
27
|
-
),
|
|
28
|
-
return
|
|
40
|
+
const { data: e } = await t(
|
|
41
|
+
s.PRODUCT_ATTRIBUTES_PATH
|
|
42
|
+
), r = Array.isArray(e) ? e : (e == null ? void 0 : e.data) ?? [];
|
|
43
|
+
return f(r);
|
|
29
44
|
} catch (e) {
|
|
30
45
|
throw console.error("fetchRecommendationFilters error:", e), e;
|
|
31
46
|
}
|
|
32
47
|
},
|
|
33
|
-
fetchRecommendationProducts: async (e,
|
|
34
|
-
var
|
|
48
|
+
fetchRecommendationProducts: async (e, r) => {
|
|
49
|
+
var n;
|
|
50
|
+
try {
|
|
51
|
+
const a = new URLSearchParams(Object.entries(r));
|
|
52
|
+
a.set(m.CLIENT_ID, i);
|
|
53
|
+
const R = decodeURIComponent(a.toString());
|
|
54
|
+
console.debug("🏁 Recommendation API Query:", R);
|
|
55
|
+
const u = await o(
|
|
56
|
+
`${s.RECOMMENDATION_API_URL}/v2/${e}?${R}`
|
|
57
|
+
);
|
|
58
|
+
return ((n = u == null ? void 0 : u.data) == null ? void 0 : n.data) ?? [];
|
|
59
|
+
} catch (a) {
|
|
60
|
+
throw console.error("fetchRecommendationProducts error:", a), a;
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
fetchRecommendationStrategies: async () => {
|
|
64
|
+
try {
|
|
65
|
+
const e = new URLSearchParams({ [m.FILTERS]: A }), { data: r } = await t(
|
|
66
|
+
`${s.RECOMMENDATION_STRATEGIES_PATH}/?${e.toString()}`
|
|
67
|
+
);
|
|
68
|
+
return h(r);
|
|
69
|
+
} catch (e) {
|
|
70
|
+
throw console.error("fetchRecommendationStrategies error:", e), e;
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
fetchStrategyCampaigns: async (e, r) => {
|
|
74
|
+
try {
|
|
75
|
+
const { data: n } = await t(
|
|
76
|
+
`${s.RECOMMENDATION_STRATEGIES_PATH}/${e}/campaigns`
|
|
77
|
+
);
|
|
78
|
+
return h(n).map((a) => ({
|
|
79
|
+
id: a.id,
|
|
80
|
+
name: a.name,
|
|
81
|
+
status: a.status,
|
|
82
|
+
variants: a.variants ?? [],
|
|
83
|
+
channel: r(`products.${a.productAlias}`),
|
|
84
|
+
productAlias: a.productAlias,
|
|
85
|
+
isPreventing: a.isPreventing
|
|
86
|
+
}));
|
|
87
|
+
} catch (n) {
|
|
88
|
+
return console.error("fetchStrategyCampaigns error:", n), [];
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
fetchStrategyRecommendationUrl: async (e) => {
|
|
35
92
|
try {
|
|
36
|
-
const r = new URLSearchParams(
|
|
37
|
-
|
|
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}`
|
|
93
|
+
const r = new URLSearchParams({ [m.STRATEGY_ID]: e }), { data: n } = await t(
|
|
94
|
+
`${s.STRATEGY_RECOMMENDATION_URL_PATH}?${r.toString()}`
|
|
42
95
|
);
|
|
43
|
-
return (
|
|
96
|
+
return l(n);
|
|
44
97
|
} catch (r) {
|
|
45
|
-
|
|
98
|
+
console.error("fetchStrategyRecommendationUrl error:", r);
|
|
99
|
+
const n = r == null ? void 0 : r.status;
|
|
100
|
+
if (typeof n == "number" && n >= 400 && n < 500)
|
|
101
|
+
return null;
|
|
102
|
+
throw r;
|
|
46
103
|
}
|
|
47
104
|
}
|
|
48
105
|
};
|
|
49
106
|
};
|
|
50
107
|
export {
|
|
51
|
-
|
|
108
|
+
_ as useRecommendationApi
|
|
52
109
|
};
|
|
@@ -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;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Body of the hover card shown beside an option in the strategy dropdown.
|
|
3
|
+
*
|
|
4
|
+
* `InSelect` renders this through an option's `infoBoxProps.slot`, so the card
|
|
5
|
+
* frame — title, "last updated", the View More button — comes from the design
|
|
6
|
+
* system and only these four rows are ours.
|
|
7
|
+
*
|
|
8
|
+
* Port of discovery-strategies-fe's `StrategyInfoBoxContent.composition.vue`; the
|
|
9
|
+
* row logic already lives in `buildStrategySummary`, which the detail drawer's
|
|
10
|
+
* algorithm/method helpers share.
|
|
11
|
+
*/
|
|
12
|
+
import type { RrsStrategy } from '@@/Types/recommendation';
|
|
13
|
+
type __VLS_Props = {
|
|
14
|
+
strategy: RrsStrategy;
|
|
15
|
+
};
|
|
16
|
+
declare const _default: import("vue").DefineComponent<__VLS_TypePropsToOption<__VLS_Props>, {}, {}, {}, {}, import("vue/types/v3-component-options.js").ComponentOptionsMixin, import("vue/types/v3-component-options.js").ComponentOptionsMixin, {}, string, Readonly<import("vue").ExtractPropTypes<__VLS_TypePropsToOption<__VLS_Props>>>, {}>;
|
|
17
|
+
export default _default;
|
|
18
|
+
type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
|
|
19
|
+
type __VLS_TypePropsToOption<T> = {
|
|
20
|
+
[K in keyof T]-?: {} extends Pick<T, K> ? {
|
|
21
|
+
type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>;
|
|
22
|
+
} : {
|
|
23
|
+
type: import('vue').PropType<T[K]>;
|
|
24
|
+
required: true;
|
|
25
|
+
};
|
|
26
|
+
};
|
|
@@ -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;
|