@useinsider/guido 3.17.0-beta.e6704da → 3.17.0-beta.eae947f
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/README.md +5 -6
- package/dist/@types/config/schemas.js +6 -12
- package/dist/components/Guido.vue.js +6 -6
- package/dist/components/Guido.vue2.js +61 -63
- package/dist/composables/useCustomInterfaceAppearance.js +16 -19
- package/dist/composables/useRecommendation.js +34 -41
- package/dist/config/migrator/recommendationMigrator.js +4 -6
- package/dist/enums/academy.js +1 -2
- package/dist/enums/date.js +3 -4
- package/dist/enums/extensions/recommendationBlock.js +23 -25
- package/dist/extensions/Blocks/Items/block.js +98 -49
- package/dist/extensions/Blocks/Items/constants/currency.js +11 -0
- package/dist/extensions/Blocks/Items/controls/price/currencyLocation.js +25 -24
- package/dist/extensions/Blocks/Items/controls/price/currencySymbol.js +12 -11
- package/dist/extensions/Blocks/Items/template.js +153 -152
- package/dist/extensions/Blocks/Recommendation/constants/defaultConfig.js +11 -13
- package/dist/extensions/Blocks/Recommendation/controls/cardComposition/index.js +95 -96
- package/dist/extensions/Blocks/Recommendation/controls/main/index.js +154 -156
- package/dist/extensions/Blocks/Recommendation/store/recommendation.js +68 -216
- package/dist/extensions/Blocks/common-control.js +19 -22
- package/dist/guido.css +1 -1
- package/dist/services/recommendationApi.js +29 -78
- package/dist/src/@types/config/schemas.d.ts +0 -12
- package/dist/src/composables/useConfig.d.ts +0 -2
- package/dist/src/composables/useRecommendation.d.ts +0 -1
- package/dist/src/enums/academy.d.ts +0 -1
- package/dist/src/enums/extensions/recommendationBlock.d.ts +0 -2
- package/dist/src/extensions/Blocks/Items/block.d.ts +21 -0
- package/dist/src/extensions/Blocks/Items/constants/currency.d.ts +19 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/main/index.d.ts +3 -14
- package/dist/src/extensions/Blocks/Recommendation/store/recommendation.d.ts +10 -214
- package/dist/src/extensions/Blocks/Recommendation/types/nodeConfig.d.ts +0 -6
- package/dist/src/extensions/Blocks/common-control.d.ts +1 -4
- package/dist/src/services/recommendationApi.d.ts +1 -4
- package/dist/src/stores/config.d.ts +0 -18
- package/dist/utils/dateUtil.js +10 -23
- package/dist/utils/pairProductVariables.js +60 -59
- package/dist/utils/templatePreparation.js +34 -37
- package/package.json +2 -3
- package/dist/components/organisms/extensions/recommendation/AssignStrategyDrawer.vue.js +0 -18
- package/dist/components/organisms/extensions/recommendation/AssignStrategyDrawer.vue2.js +0 -70
- package/dist/components/organisms/extensions/recommendation/StrategyInfoBox.vue.js +0 -20
- package/dist/components/organisms/extensions/recommendation/StrategyInfoBox.vue2.js +0 -55
- package/dist/extensions/Blocks/Recommendation/controls/main/strategy.js +0 -141
- package/dist/src/components/organisms/extensions/recommendation/AssignStrategyDrawer.vue.d.ts +0 -3
- package/dist/src/components/organisms/extensions/recommendation/StrategyInfoBox.vue.d.ts +0 -24
- package/dist/src/extensions/Blocks/Recommendation/controls/main/strategy.d.ts +0 -29
- package/dist/src/mock/api/recommendation-strategies.d.ts +0 -43
- package/dist/static/styles/components/recommendation-strategy.css.js +0 -171
package/README.md
CHANGED
|
@@ -162,7 +162,6 @@ const config: GuidoConfigInput = {
|
|
|
162
162
|
liquidSyntax?: boolean, // Default: false - Enable Liquid template syntax
|
|
163
163
|
autosave?: boolean, // Default: false - Show the Auto Save toggle in the header. See wiki/AUTOSAVE.md.
|
|
164
164
|
allowlistEnabled?: boolean, // Default: false - Pre-save domain-allowlist check (opt-in). Guido self-serves the block toaster (role lookup, deep-link, copy from window.trans).
|
|
165
|
-
reusableRecommendationStrategy?: boolean, // Default: false - Assign an RRS strategy to recommendation blocks instead of per-block algorithm/filters/shuffle/product-count settings.
|
|
166
165
|
},
|
|
167
166
|
|
|
168
167
|
// Optional: Callbacks
|
|
@@ -634,16 +633,16 @@ toaster fires (useful before the host has wired the catalog).
|
|
|
634
633
|
|
|
635
634
|
```bash
|
|
636
635
|
# Install
|
|
637
|
-
|
|
636
|
+
npm install
|
|
638
637
|
|
|
639
638
|
# Start dev server
|
|
640
|
-
|
|
639
|
+
npm start
|
|
641
640
|
|
|
642
641
|
# Build
|
|
643
|
-
|
|
642
|
+
npm run build
|
|
644
643
|
|
|
645
644
|
# Lint & type-check
|
|
646
|
-
|
|
645
|
+
npm run lint
|
|
647
646
|
```
|
|
648
647
|
|
|
649
648
|
### Environment Variables
|
|
@@ -661,7 +660,7 @@ VITE_STRIPO_USER=your_user
|
|
|
661
660
|
|
|
662
661
|
```bash
|
|
663
662
|
# Build the package
|
|
664
|
-
|
|
663
|
+
npm run build
|
|
665
664
|
|
|
666
665
|
# Create tarball
|
|
667
666
|
npm pack
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ModuleFolderDefaults as f } from "../../enums/defaults.js";
|
|
2
|
-
import { object as a, number as n, optional as e, string as t, picklist as i, pipe as m, minLength as b, custom as
|
|
2
|
+
import { object as a, number as n, optional as e, string as t, picklist as i, pipe as m, minLength as b, custom as k, boolean as o, array as c, transform as C, record as y, fallback as R, literal as u, looseObject as g, variant as T, union as h, unknown as r, lazy as I } from "../../node_modules/valibot/dist/index.js";
|
|
3
3
|
const p = {
|
|
4
4
|
/** Promotional/marketing emails */
|
|
5
5
|
PROMOTIONAL: 1,
|
|
@@ -76,7 +76,7 @@ const p = {
|
|
|
76
76
|
children: e(c(S)),
|
|
77
77
|
// eslint-disable-next-line camelcase -- backend field name
|
|
78
78
|
select_items: e(c(S))
|
|
79
|
-
})), N =
|
|
79
|
+
})), N = y(
|
|
80
80
|
t(),
|
|
81
81
|
R(c(S), [])
|
|
82
82
|
), P = g({
|
|
@@ -132,7 +132,7 @@ const p = {
|
|
|
132
132
|
* strategy, currency, locale, and layout data.
|
|
133
133
|
*/
|
|
134
134
|
recommendationConfigs: e(
|
|
135
|
-
|
|
135
|
+
y(t(), P),
|
|
136
136
|
{}
|
|
137
137
|
)
|
|
138
138
|
}), x = a({
|
|
@@ -219,13 +219,7 @@ const p = {
|
|
|
219
219
|
/** Enable pre-save domain-allowlist validation (opt-in; Guido self-serves the block toaster) */
|
|
220
220
|
allowlistEnabled: e(o(), !1),
|
|
221
221
|
/** Enable persistent link tracking-id assignment for the click heatmap (opt-in) */
|
|
222
|
-
linkTrackingIds: e(o(), !1)
|
|
223
|
-
/**
|
|
224
|
-
* Assign a Reusable Recommendation Strategy (RRS) to recommendation blocks instead of
|
|
225
|
-
* per-block algorithm settings. Hides Algorithm, Filters, Shuffle and Number of Products
|
|
226
|
-
* (they live on the strategy) and adds the Assign Strategy flow.
|
|
227
|
-
*/
|
|
228
|
-
reusableRecommendationStrategy: e(o(), !1)
|
|
222
|
+
linkTrackingIds: e(o(), !1)
|
|
229
223
|
}), B = i([
|
|
230
224
|
"amp-accordion",
|
|
231
225
|
"amp-carousel",
|
|
@@ -293,7 +287,7 @@ const p = {
|
|
|
293
287
|
...d.entries,
|
|
294
288
|
type: u("custom"),
|
|
295
289
|
/** Custom processor function */
|
|
296
|
-
processor:
|
|
290
|
+
processor: k(
|
|
297
291
|
(s) => typeof s == "function",
|
|
298
292
|
"processor must be a function"
|
|
299
293
|
)
|
|
@@ -313,7 +307,7 @@ const p = {
|
|
|
313
307
|
* Return false to cancel the save operation.
|
|
314
308
|
*/
|
|
315
309
|
externalValidation: e(
|
|
316
|
-
|
|
310
|
+
k(
|
|
317
311
|
(s) => typeof s == "function",
|
|
318
312
|
"externalValidation must be a function"
|
|
319
313
|
)
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import
|
|
1
|
+
import i from "./Guido.vue2.js";
|
|
2
2
|
/* empty css */
|
|
3
|
-
import
|
|
3
|
+
import a from "../_virtual/_plugin-vue2_normalizer.js";
|
|
4
4
|
var t = function() {
|
|
5
5
|
var o = this, r = o._self._c, e = o._self._setupProxy;
|
|
6
|
-
return r("div", { ref: "wrapperRef", staticClass: "guido-editor__wrapper", class: { "guido-editor__no-header": e.noHeader } }, [r(e.HeaderWrapper, { ref: "headerWrapperRef" }), r(e.AutoSaveController), e.editorStore.isPreviewModeOpen ? r(e.PreviewContainer) : o._e(), r("div", { directives: [{ name: "show", rawName: "v-show", value: !e.previewStore.isLoaded, expression: "!previewStore.isLoaded" }], staticClass: "guido-editor__container", class: { "guido-editor__no-header": e.noHeader }, attrs: { id: "guido-editor" } }), r(e.Toaster), r(e.FilterSelectionDrawer),
|
|
6
|
+
return r("div", { ref: "wrapperRef", staticClass: "guido-editor__wrapper", class: { "guido-editor__no-header": e.noHeader } }, [r(e.HeaderWrapper, { ref: "headerWrapperRef" }), r(e.AutoSaveController), e.editorStore.isPreviewModeOpen ? r(e.PreviewContainer) : o._e(), r("div", { directives: [{ name: "show", rawName: "v-show", value: !e.previewStore.isLoaded, expression: "!previewStore.isLoaded" }], staticClass: "guido-editor__container", class: { "guido-editor__no-header": e.noHeader }, attrs: { id: "guido-editor" } }), r(e.Toaster), r(e.FilterSelectionDrawer), r(e.SaveAsTemplateDrawer), e.isTestPartner() ? o._e() : r(e.OnboardingWrapper, { on: { "onboarding-finished": function(p) {
|
|
7
7
|
return e.emit("onboarding:finished");
|
|
8
8
|
} } }), r(e.UnsubscribeWrapper), r(e.LoadingWrapper)], 1);
|
|
9
|
-
}, n = [], s = /* @__PURE__ */
|
|
10
|
-
|
|
9
|
+
}, n = [], s = /* @__PURE__ */ a(
|
|
10
|
+
i,
|
|
11
11
|
t,
|
|
12
12
|
n,
|
|
13
13
|
!1,
|
|
14
14
|
null,
|
|
15
|
-
"
|
|
15
|
+
"b0d3b445"
|
|
16
16
|
);
|
|
17
17
|
const l = s.exports;
|
|
18
18
|
export {
|
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
import { defineComponent as
|
|
2
|
-
import { useCortexBlueprintBridge as
|
|
3
|
-
import { provideGuidoActions as
|
|
4
|
-
import { useGuidoStateBridge as
|
|
5
|
-
import { usePartner as
|
|
6
|
-
import { useStripo as
|
|
7
|
-
import { useTimerClone as
|
|
8
|
-
import { migrate as
|
|
9
|
-
import { ModuleFolderDefaults as
|
|
10
|
-
import { RIBBON_SELECTOR as
|
|
11
|
-
import { useRecommendationExtensionStore as
|
|
12
|
-
import
|
|
13
|
-
import
|
|
14
|
-
import
|
|
15
|
-
import
|
|
16
|
-
import
|
|
17
|
-
import
|
|
18
|
-
import
|
|
19
|
-
import { useStripoApi as
|
|
20
|
-
import { useConfigStore as
|
|
21
|
-
import { useDynamicContentStore as
|
|
22
|
-
import { useEditorStore as
|
|
23
|
-
import { usePreviewStore as
|
|
24
|
-
import { useTemplateStore as
|
|
25
|
-
import { useUnsubscribeStore as
|
|
26
|
-
import { readTrackFloor as
|
|
27
|
-
const
|
|
1
|
+
import { defineComponent as j, defineAsyncComponent as R, ref as B, computed as U, watch as _, onMounted as J, onUnmounted as Q } from "vue";
|
|
2
|
+
import { useCortexBlueprintBridge as X } from "../composables/useCortexBlueprintBridge.js";
|
|
3
|
+
import { provideGuidoActions as Y } from "../composables/useGuidoActions.js";
|
|
4
|
+
import { useGuidoStateBridge as Z } from "../composables/useGuidoStateBridge.js";
|
|
5
|
+
import { usePartner as ee } from "../composables/usePartner.js";
|
|
6
|
+
import { useStripo as te } from "../composables/useStripo.js";
|
|
7
|
+
import { useTimerClone as oe } from "../composables/useTimerClone.js";
|
|
8
|
+
import { migrate as N } from "../config/migrator/index.js";
|
|
9
|
+
import { ModuleFolderDefaults as O } from "../enums/defaults.js";
|
|
10
|
+
import { RIBBON_SELECTOR as ne } from "../enums/onboarding.js";
|
|
11
|
+
import { useRecommendationExtensionStore as re } from "../extensions/Blocks/Recommendation/store/recommendation.js";
|
|
12
|
+
import se from "./organisms/AutoSaveController.vue.js";
|
|
13
|
+
import ae from "./organisms/base/Toaster.vue.js";
|
|
14
|
+
import ie from "./organisms/extensions/recommendation/FilterSelectionDrawer.vue.js";
|
|
15
|
+
import ce from "./organisms/header/HeaderWrapper.vue.js";
|
|
16
|
+
import de from "./organisms/LoadingWrapper.vue.js";
|
|
17
|
+
import me from "./organisms/save-as-template/SaveAsTemplateDrawer.vue.js";
|
|
18
|
+
import le from "./organisms/unsubscribe/UnsubscribeWrapper.vue.js";
|
|
19
|
+
import { useStripoApi as ue } from "../services/stripoApi.js";
|
|
20
|
+
import { useConfigStore as pe } from "../stores/config.js";
|
|
21
|
+
import { useDynamicContentStore as fe } from "../stores/dynamic-content.js";
|
|
22
|
+
import { useEditorStore as P } from "../stores/editor.js";
|
|
23
|
+
import { usePreviewStore as ye } from "../stores/preview.js";
|
|
24
|
+
import { useTemplateStore as ve } from "../stores/template.js";
|
|
25
|
+
import { useUnsubscribeStore as he } from "../stores/unsubscribe.js";
|
|
26
|
+
import { readTrackFloor as A } from "../utils/linkTrackingIds.js";
|
|
27
|
+
const ze = /* @__PURE__ */ j({
|
|
28
28
|
__name: "Guido",
|
|
29
29
|
props: {
|
|
30
30
|
config: null,
|
|
@@ -32,21 +32,19 @@ const qe = /* @__PURE__ */ J({
|
|
|
32
32
|
},
|
|
33
33
|
emits: ["dynamic-content:open", "back", "save:start", "save:complete", "on-change", "ready", "onboarding:finished", "test-email:click"],
|
|
34
34
|
setup(W, { expose: x, emit: r }) {
|
|
35
|
-
const a = W, G =
|
|
35
|
+
const a = W, G = R(
|
|
36
36
|
() => import("./organisms/email-preview/PreviewContainer.vue.js")
|
|
37
|
-
), H =
|
|
37
|
+
), H = R(
|
|
38
38
|
() => import("./organisms/onboarding/OnboardingWrapper.vue.js")
|
|
39
|
-
),
|
|
40
|
-
() => import("./organisms/extensions/recommendation/AssignStrategyDrawer.vue.js")
|
|
41
|
-
), S = B(), l = B(), u = ye(), h = Se(), o = fe();
|
|
39
|
+
), h = B(), l = B(), u = fe(), S = he(), o = pe();
|
|
42
40
|
a.ready && o.init(a.config);
|
|
43
|
-
const c =
|
|
41
|
+
const c = P(), $ = ye(), m = U(() => c.hasChanges), { isTestPartner: z } = ee(), g = () => {
|
|
44
42
|
var t;
|
|
45
|
-
return (t =
|
|
46
|
-
},
|
|
43
|
+
return (t = h.value) == null ? void 0 : t.handleSave(!0);
|
|
44
|
+
}, b = (t) => {
|
|
47
45
|
c.loadingStatus = t;
|
|
48
46
|
};
|
|
49
|
-
|
|
47
|
+
X(), Z();
|
|
50
48
|
const p = () => {
|
|
51
49
|
var t, e;
|
|
52
50
|
return {
|
|
@@ -54,14 +52,14 @@ const qe = /* @__PURE__ */ J({
|
|
|
54
52
|
userId: o.userId,
|
|
55
53
|
username: o.username,
|
|
56
54
|
partnerName: o.partnerName,
|
|
57
|
-
savedModulesFolderName: ((t = o.editor) == null ? void 0 : t.savedModulesFolderName) ||
|
|
58
|
-
defaultModulesFolderName: ((e = o.editor) == null ? void 0 : e.defaultModulesFolderName) ||
|
|
55
|
+
savedModulesFolderName: ((t = o.editor) == null ? void 0 : t.savedModulesFolderName) || O.SAVED_MODULES,
|
|
56
|
+
defaultModulesFolderName: ((e = o.editor) == null ? void 0 : e.defaultModulesFolderName) || O.DEFAULT_MODULES
|
|
59
57
|
};
|
|
60
|
-
}, { initPlugin:
|
|
58
|
+
}, { initPlugin: E, preloadRuntime: w } = te(), { getDefaultTemplate: C } = ue(), { cloneTimersOnSave: D, hasTimerBlocks: k } = oe(), q = U(() => {
|
|
61
59
|
var t;
|
|
62
60
|
return !((t = o.ui) != null && t.showHeader);
|
|
63
61
|
});
|
|
64
|
-
|
|
62
|
+
Y({
|
|
65
63
|
onBack: () => {
|
|
66
64
|
console.debug("guido:back"), r("back");
|
|
67
65
|
},
|
|
@@ -76,9 +74,9 @@ const qe = /* @__PURE__ */ J({
|
|
|
76
74
|
console.debug("guido:test-email:click"), r("test-email:click");
|
|
77
75
|
}
|
|
78
76
|
});
|
|
79
|
-
const
|
|
77
|
+
const T = (t) => {
|
|
80
78
|
console.debug("dynamic-content:close", t), u.setSelectedDynamicContent(t), document.dispatchEvent(new CustomEvent("dynamic-content:close", { detail: t }));
|
|
81
|
-
},
|
|
79
|
+
}, F = () => {
|
|
82
80
|
console.debug("dynamic-content:close", "Without Data"), document.dispatchEvent(new CustomEvent("dynamic-content:close", { detail: { text: "", value: "" } }));
|
|
83
81
|
};
|
|
84
82
|
_(() => m.value, () => {
|
|
@@ -91,38 +89,38 @@ const qe = /* @__PURE__ */ J({
|
|
|
91
89
|
let i = null;
|
|
92
90
|
const y = () => {
|
|
93
91
|
var e;
|
|
94
|
-
const t = document.querySelector(
|
|
92
|
+
const t = document.querySelector(ne);
|
|
95
93
|
(e = l.value) == null || e.style.setProperty("--ribbon-offset", `${(t == null ? void 0 : t.offsetHeight) ?? 0}px`);
|
|
96
94
|
}, v = async () => {
|
|
97
95
|
var t;
|
|
98
96
|
try {
|
|
99
97
|
o.initialized || o.init(a.config), c.templateId = o.templateId;
|
|
100
|
-
const e = o.template, s = (e == null ? void 0 : e.html) || "", d = (e == null ? void 0 : e.css) || "",
|
|
101
|
-
|
|
102
|
-
const
|
|
98
|
+
const e = o.template, s = (e == null ? void 0 : e.html) || "", d = (e == null ? void 0 : e.css) || "", I = (e == null ? void 0 : e.preselectedDynamicContent) || [];
|
|
99
|
+
S.selectedUnsubscribePages = (e == null ? void 0 : e.selectedUnsubscribePages) || [];
|
|
100
|
+
const L = ((t = e == null ? void 0 : e.migration) == null ? void 0 : t.recommendationConfigs) ?? {}, M = o.isFeatureEnabled("linkTrackingIds");
|
|
103
101
|
let n = {
|
|
104
|
-
html: s && await
|
|
102
|
+
html: s && await N(s, L),
|
|
105
103
|
css: d
|
|
106
104
|
};
|
|
107
|
-
n.html || (n = await C(), n.html = await
|
|
108
|
-
const
|
|
109
|
-
|
|
110
|
-
const
|
|
111
|
-
preselectedDynamicContentList:
|
|
105
|
+
n.html || (n = await C(), n.html = await N(n.html, L));
|
|
106
|
+
const K = M ? A(n.html, (e == null ? void 0 : e.trackIdCounter) || 0) : 0;
|
|
107
|
+
k(n.html) && (n.html = await D(n.html)), M && (c.trackIdSessionFloor = Math.max(K, A(n.html)));
|
|
108
|
+
const V = {
|
|
109
|
+
preselectedDynamicContentList: I,
|
|
112
110
|
onReady: () => {
|
|
113
111
|
console.debug("guido:ready"), r("ready");
|
|
114
112
|
}
|
|
115
113
|
};
|
|
116
|
-
await
|
|
114
|
+
await E(n, p(), V), u.selectedDynamicContentList = I;
|
|
117
115
|
} catch (e) {
|
|
118
116
|
console.error("Failed to initialize Stripo editor:", e);
|
|
119
117
|
}
|
|
120
118
|
};
|
|
121
|
-
return
|
|
119
|
+
return J(async () => {
|
|
122
120
|
var e;
|
|
123
|
-
console.debug("Guido says happy coding 🎉"), console.debug("🚗 Ka-Chow"),
|
|
121
|
+
console.debug("Guido says happy coding 🎉"), console.debug("🚗 Ka-Chow"), re().$reset(), P().$reset(), ve().$reset(), y();
|
|
124
122
|
const t = (e = l.value) == null ? void 0 : e.parentElement;
|
|
125
|
-
if (t && (i = new ResizeObserver(y), i.observe(t)),
|
|
123
|
+
if (t && (i = new ResizeObserver(y), i.observe(t)), w(), a.ready)
|
|
126
124
|
await v();
|
|
127
125
|
else {
|
|
128
126
|
const s = _(() => a.ready, (d) => {
|
|
@@ -130,7 +128,7 @@ const qe = /* @__PURE__ */ J({
|
|
|
130
128
|
});
|
|
131
129
|
}
|
|
132
130
|
document.addEventListener("dynamic-content:open", f);
|
|
133
|
-
}),
|
|
131
|
+
}), Q(() => {
|
|
134
132
|
i == null || i.disconnect(), document.removeEventListener("dynamic-content:open", f);
|
|
135
133
|
try {
|
|
136
134
|
window.UIEditor.removeEditor();
|
|
@@ -140,15 +138,15 @@ const qe = /* @__PURE__ */ J({
|
|
|
140
138
|
o.reset();
|
|
141
139
|
}), x({
|
|
142
140
|
dynamicContent: {
|
|
143
|
-
insert:
|
|
144
|
-
close:
|
|
141
|
+
insert: T,
|
|
142
|
+
close: F
|
|
145
143
|
},
|
|
146
144
|
hasChanges: m,
|
|
147
|
-
saveSilent:
|
|
148
|
-
setLoading:
|
|
149
|
-
}), { __sfc: !0, PreviewContainer: G, OnboardingWrapper: H,
|
|
145
|
+
saveSilent: g,
|
|
146
|
+
setLoading: b
|
|
147
|
+
}), { __sfc: !0, PreviewContainer: G, OnboardingWrapper: H, headerWrapperRef: h, wrapperRef: l, dynamicContentStore: u, unsubscribeStore: S, props: a, configStore: o, editorStore: c, previewStore: $, hasChanges: m, isTestPartner: z, saveSilent: g, setLoading: b, emit: r, buildMetadata: p, initPlugin: E, preloadRuntime: w, getDefaultTemplate: C, cloneTimersOnSave: D, hasTimerBlocks: k, noHeader: q, insertDynamicContent: T, closeDynamicContent: F, handleDynamicContentOpen: f, ribbonObserver: i, updateRibbonOffset: y, startEditor: v, AutoSaveController: se, Toaster: ae, FilterSelectionDrawer: ie, HeaderWrapper: ce, LoadingWrapper: de, SaveAsTemplateDrawer: me, UnsubscribeWrapper: le };
|
|
150
148
|
}
|
|
151
149
|
});
|
|
152
150
|
export {
|
|
153
|
-
|
|
151
|
+
ze as default
|
|
154
152
|
};
|
|
@@ -4,21 +4,20 @@ import e from "../static/styles/components/amp-block.css.js";
|
|
|
4
4
|
import i from "../static/styles/components/base-input.css.js";
|
|
5
5
|
import p from "../static/styles/components/button-group.css.js";
|
|
6
6
|
import n from "../static/styles/components/button.css.js";
|
|
7
|
-
import
|
|
8
|
-
import
|
|
7
|
+
import s from "../static/styles/components/combobox.css.js";
|
|
8
|
+
import C from "../static/styles/components/counter.css.js";
|
|
9
9
|
import f from "../static/styles/components/dropdown-menu.css.js";
|
|
10
10
|
import a from "../static/styles/components/loader.css.js";
|
|
11
11
|
import u from "../static/styles/components/narrow-panel.css.js";
|
|
12
12
|
import c from "../static/styles/components/popup.css.js";
|
|
13
|
-
import d from "../static/styles/components/
|
|
14
|
-
import l from "../static/styles/components/
|
|
15
|
-
import h from "../static/styles/components/
|
|
16
|
-
import w from "../static/styles/components/
|
|
17
|
-
import y from "../static/styles/components/
|
|
18
|
-
import B from "../static/styles/
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
b,
|
|
13
|
+
import d from "../static/styles/components/switcher.css.js";
|
|
14
|
+
import l from "../static/styles/components/tabs.css.js";
|
|
15
|
+
import h from "../static/styles/components/tools.css.js";
|
|
16
|
+
import w from "../static/styles/components/version-history.css.js";
|
|
17
|
+
import y from "../static/styles/components/wide-panel.css.js";
|
|
18
|
+
import B from "../static/styles/variables.css.js";
|
|
19
|
+
const b = [
|
|
20
|
+
B,
|
|
22
21
|
// Must be on top
|
|
23
22
|
S,
|
|
24
23
|
// Must be on top
|
|
@@ -27,24 +26,22 @@ const A = [
|
|
|
27
26
|
i,
|
|
28
27
|
p,
|
|
29
28
|
n,
|
|
30
|
-
C,
|
|
31
29
|
s,
|
|
30
|
+
C,
|
|
32
31
|
f,
|
|
33
32
|
a,
|
|
34
33
|
u,
|
|
35
34
|
c,
|
|
35
|
+
d,
|
|
36
36
|
l,
|
|
37
37
|
h,
|
|
38
38
|
w,
|
|
39
|
-
y
|
|
40
|
-
B,
|
|
41
|
-
d
|
|
42
|
-
// Last: overrides button.css / wide-panel.css defaults
|
|
39
|
+
y
|
|
43
40
|
].join(`
|
|
44
41
|
|
|
45
|
-
`),
|
|
42
|
+
`), v = () => ({ importCss: () => {
|
|
46
43
|
const o = new CSSStyleSheet();
|
|
47
|
-
o.replaceSync(
|
|
44
|
+
o.replaceSync(b);
|
|
48
45
|
const r = document.querySelector("ui-editor");
|
|
49
46
|
if (!r)
|
|
50
47
|
return;
|
|
@@ -52,5 +49,5 @@ const A = [
|
|
|
52
49
|
t && (t.adoptedStyleSheets = [o]);
|
|
53
50
|
} });
|
|
54
51
|
export {
|
|
55
|
-
|
|
52
|
+
v as useCustomInterfaceAppearance
|
|
56
53
|
};
|
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
import { getRecommendationFeedSourceMaps as
|
|
2
|
-
import { MinDeviceViewport as C, DefaultPadding as
|
|
1
|
+
import { getRecommendationFeedSourceMaps as I, URLS as R } from "../enums/extensions/recommendationBlock.js";
|
|
2
|
+
import { MinDeviceViewport as C, DefaultPadding as b } from "../enums/recommendation.js";
|
|
3
3
|
import { useRecommendationExtensionStore as l } from "../extensions/Blocks/Recommendation/store/recommendation.js";
|
|
4
|
-
import { generateCompleteFilterQuery as
|
|
5
|
-
import { getPartnerRecommendationParams as
|
|
4
|
+
import { generateCompleteFilterQuery as h } from "../extensions/Blocks/Recommendation/utils/filterUtil.js";
|
|
5
|
+
import { getPartnerRecommendationParams as y } from "../extensions/Blocks/Recommendation/utils/partnerCustomizations.js";
|
|
6
6
|
import { sanitizeProductIds as x } from "../extensions/Blocks/Recommendation/utils/productIds.js";
|
|
7
7
|
import { useConfigStore as P } from "../stores/config.js";
|
|
8
8
|
const B = () => ({
|
|
9
9
|
calculateCardWidth: ({
|
|
10
|
-
mobileLeftPadding:
|
|
11
|
-
mobileRightPadding:
|
|
12
|
-
cardsInRow:
|
|
10
|
+
mobileLeftPadding: a,
|
|
11
|
+
mobileRightPadding: s,
|
|
12
|
+
cardsInRow: c,
|
|
13
13
|
unresponsive: n
|
|
14
14
|
}) => {
|
|
15
|
-
const
|
|
16
|
-
return (C - e) /
|
|
15
|
+
const r = n ? c : 1, e = a + s + (r - 1) * b;
|
|
16
|
+
return (C - e) / r;
|
|
17
17
|
},
|
|
18
|
-
getRecommendationCampaignData: (
|
|
19
|
-
const
|
|
18
|
+
getRecommendationCampaignData: (a) => {
|
|
19
|
+
const s = l(), c = Number(a), n = s.blockStates[c];
|
|
20
20
|
if (!n)
|
|
21
21
|
return {
|
|
22
22
|
textTrimming: !1,
|
|
@@ -30,54 +30,47 @@ const B = () => ({
|
|
|
30
30
|
discountBeforeTextValue: "",
|
|
31
31
|
discountAfterTextValue: ""
|
|
32
32
|
};
|
|
33
|
-
const { recommendationConfigs:
|
|
33
|
+
const { recommendationConfigs: r } = n, e = r.orientation === "grid" ? "vertical" : "horizontal";
|
|
34
34
|
return {
|
|
35
|
-
textTrimming:
|
|
35
|
+
textTrimming: r.textTrimming,
|
|
36
36
|
orientation: e,
|
|
37
37
|
mobileLeftPadding: 0,
|
|
38
38
|
mobileRightPadding: 0,
|
|
39
|
-
cardsInRow:
|
|
40
|
-
unresponsive:
|
|
39
|
+
cardsInRow: r.cardsInRow,
|
|
40
|
+
unresponsive: r.unresponsive,
|
|
41
41
|
priceBeforeTextValue: "",
|
|
42
42
|
priceAfterTextValue: "",
|
|
43
43
|
discountBeforeTextValue: "",
|
|
44
44
|
discountAfterTextValue: ""
|
|
45
45
|
};
|
|
46
46
|
},
|
|
47
|
-
buildCampaignUrl: (
|
|
47
|
+
buildCampaignUrl: (a, s) => {
|
|
48
48
|
var m;
|
|
49
|
-
const
|
|
49
|
+
const c = l(), n = P(), r = Number(a);
|
|
50
50
|
let e;
|
|
51
|
-
if (
|
|
52
|
-
e =
|
|
51
|
+
if (s)
|
|
52
|
+
e = s;
|
|
53
53
|
else {
|
|
54
|
-
const
|
|
55
|
-
if (!
|
|
54
|
+
const i = c.blockStates[r];
|
|
55
|
+
if (!i)
|
|
56
56
|
return "";
|
|
57
|
-
const { recommendationConfigs:
|
|
57
|
+
const { recommendationConfigs: o } = i;
|
|
58
58
|
e = {
|
|
59
|
-
strategy:
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
shuffleProducts: r.shuffleProducts
|
|
59
|
+
strategy: o.strategy,
|
|
60
|
+
language: o.language,
|
|
61
|
+
currencyCode: o.currencySettings.value,
|
|
62
|
+
size: o.size,
|
|
63
|
+
productIds: o.productIds,
|
|
64
|
+
filters: o.filters,
|
|
65
|
+
shuffleProducts: o.shuffleProducts
|
|
67
66
|
};
|
|
68
67
|
}
|
|
69
|
-
|
|
70
|
-
return s.recommendationCampaignUrls[i] = {
|
|
71
|
-
strategyId: e.strategyId,
|
|
72
|
-
locale: e.language,
|
|
73
|
-
currency: e.currencyCode
|
|
74
|
-
}, "";
|
|
75
|
-
const g = ((m = y().find((a) => a.key === e.strategy)) == null ? void 0 : m.path) || "", t = new URLSearchParams();
|
|
68
|
+
const f = ((m = I().find((i) => i.key === e.strategy)) == null ? void 0 : m.path) || "", t = new URLSearchParams();
|
|
76
69
|
t.set("locale", e.language), t.set("currency", e.currencyCode), t.set("partnerName", n.partnerName), t.set("size", e.size), t.set("details", "true"), t.set("campaignId", n.variationId), e.strategy === "manualMerchandising" ? t.set("productId", x(e.productIds)) : e.strategy === "similarViewed" && t.set("productId", "{itemId}"), e.strategy === "userBased" && t.set("userId", "{user_id}");
|
|
77
|
-
const
|
|
78
|
-
d && t.set("filter", d), e.shuffleProducts && t.set("shuffle", "true"), Object.entries(
|
|
79
|
-
const p = decodeURIComponent(t.toString()), u = `${
|
|
80
|
-
return
|
|
70
|
+
const g = e.filters.filter((i) => i.isValid), d = h(g);
|
|
71
|
+
d && t.set("filter", d), e.shuffleProducts && t.set("shuffle", "true"), Object.entries(y(n.partnerName, e.strategy)).forEach(([i, o]) => t.set(i, o));
|
|
72
|
+
const p = decodeURIComponent(t.toString()), u = `${R.RECOMMENDATION_API_URL}/v2/${f}?${p}`;
|
|
73
|
+
return c.recommendationCampaignUrls[a] = u, u;
|
|
81
74
|
}
|
|
82
75
|
});
|
|
83
76
|
export {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { BlockId as f } from "../../enums/block.js";
|
|
2
|
-
import { useTemplateStore as
|
|
3
|
-
import { mapComposition as
|
|
2
|
+
import { useTemplateStore as b } from "../../stores/template.js";
|
|
3
|
+
import { mapComposition as y } from "./recommendation/compositionMapper.js";
|
|
4
4
|
import { extractCurrencyFromBlock as v, extractTitleText as C, extractCardBgColor as M, isPartnerManagedBlock as S } from "./recommendation/extractors.js";
|
|
5
5
|
import { buildBlockHtml as w } from "./recommendation/htmlBuilder.js";
|
|
6
6
|
import { parseRecommendationId as x, parseLegacyConfig as R } from "./recommendation/parseLegacyConfig.js";
|
|
@@ -20,10 +20,8 @@ function B(i, t, a) {
|
|
|
20
20
|
), !1;
|
|
21
21
|
const n = a[String(o)] ?? {
|
|
22
22
|
currencySettings: v(t)
|
|
23
|
-
}, c = T(n, r, o), e =
|
|
23
|
+
}, c = T(n, r, o), e = y((d = r.composition) == null ? void 0 : d.variables), l = C(t), g = M(t), p = {
|
|
24
24
|
...c,
|
|
25
|
-
// Legacy blocks predate RRS — never strategy-backed.
|
|
26
|
-
strategyId: "",
|
|
27
25
|
composition: e.composition,
|
|
28
26
|
visibility: e.visibility,
|
|
29
27
|
textTrimming: e.anyTextTrimming
|
|
@@ -58,7 +56,7 @@ function B(i, t, a) {
|
|
|
58
56
|
function q(i, t = {}) {
|
|
59
57
|
const a = new DOMParser(), o = a.parseFromString(i, "text/html"), r = Array.from(o.querySelectorAll(h));
|
|
60
58
|
try {
|
|
61
|
-
|
|
59
|
+
b().$patch((e) => {
|
|
62
60
|
e.migrations = {
|
|
63
61
|
...e.migrations,
|
|
64
62
|
[f.Recommendation]: r.length
|
package/dist/enums/academy.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
const e = "https://academy.insiderone.com", o = {
|
|
2
2
|
EMAIL_EDITOR: `${e}/docs/email-drag-and-drop-editor`,
|
|
3
3
|
GLOBAL_UNSUBSCRIBE: `${e}/docs/global-unsubscribe-preference-center`,
|
|
4
|
-
AMP_FOR_EMAILS: `${e}/docs/amp-for-emails
|
|
5
|
-
EMAIL_RECOMMENDATION_BLOCK: `${e}/docs/new-editor-email-recommendation-block`
|
|
4
|
+
AMP_FOR_EMAILS: `${e}/docs/amp-for-emails`
|
|
6
5
|
};
|
|
7
6
|
export {
|
|
8
7
|
o as ACADEMY_LINKS
|
package/dist/enums/date.js
CHANGED