@useinsider/guido 3.27.0-beta.ee85b86 → 3.27.1-beta.842075e
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 -10
- package/dist/components/Guido.vue.js +7 -7
- package/dist/components/Guido.vue2.js +83 -86
- package/dist/composables/useHtmlCompiler.js +8 -9
- package/dist/composables/useModuleRepair.js +32 -63
- package/dist/composables/useRecommendation.js +8 -16
- package/dist/composables/useStripo.js +43 -44
- package/dist/config/compiler/htmlCompilerRules.js +6 -16
- package/dist/config/compiler/recommendationCompilerRules.js +29 -41
- package/dist/config/migrator/unsubscribeMigrator.js +112 -100
- package/dist/enums/recommendation.js +4 -5
- package/dist/extensions/Blocks/Recommendation/controls/image/index.js +58 -40
- package/dist/extensions/Blocks/Unsubscribe/block.js +104 -96
- package/dist/extensions/Blocks/Unsubscribe/utils/constants.js +4 -3
- package/dist/extensions/Blocks/Unsubscribe/utils/swapMergeTagInHref.js +5 -0
- package/dist/guido.css +1 -1
- package/dist/package.json.js +4 -4
- package/dist/src/@types/generic.d.ts +0 -7
- package/dist/src/composables/useModuleRepair.d.ts +0 -6
- package/dist/src/composables/useRecommendation.d.ts +0 -4
- package/dist/src/enums/recommendation.d.ts +0 -1
- package/dist/src/extensions/Blocks/Recommendation/controls/image/index.d.ts +2 -0
- package/dist/src/extensions/Blocks/Unsubscribe/utils/constants.d.ts +1 -0
- package/dist/src/extensions/Blocks/Unsubscribe/utils/swapMergeTagInHref.d.ts +1 -0
- package/dist/src/utils/dynamicContentConverter.d.ts +18 -20
- package/dist/src/utils/genericUtil.d.ts +8 -4
- package/dist/static/stripo-runtime-manifest.json.js +2 -2
- package/dist/utils/dynamicContentConverter.js +27 -41
- package/dist/utils/genericUtil.js +39 -39
- package/package.json +2 -2
- package/dist/components/organisms/dynamic-content/AmbiguousDynamicContentModal.vue.js +0 -24
- package/dist/components/organisms/dynamic-content/AmbiguousDynamicContentModal.vue2.js +0 -59
- package/dist/composables/useAmbiguousDynamicContent.js +0 -72
- package/dist/enums/dynamic-content.js +0 -4
- package/dist/src/components/organisms/dynamic-content/AmbiguousDynamicContentModal.vue.d.ts +0 -2
- package/dist/src/composables/useAmbiguousDynamicContent.d.ts +0 -7
- package/dist/src/enums/dynamic-content.d.ts +0 -3
- package/dist/src/stores/module-dynamic-content.d.ts +0 -30
- package/dist/src/utils/dynamicContentPendingMarker.d.ts +0 -2
- package/dist/stores/module-dynamic-content.js +0 -20
- package/dist/utils/dynamicContentPendingMarker.js +0 -6
|
@@ -1,79 +1,97 @@
|
|
|
1
|
-
import { EditorStatePropertyType as
|
|
2
|
-
import { createImageMarginsControl as
|
|
1
|
+
import { EditorStatePropertyType as M, PreviewDeviceMode as I, ModificationDescription as g } from "../../../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
|
|
2
|
+
import { createImageMarginsControl as C, createImageSizeControl as O } from "../../../controlFactories.js";
|
|
3
3
|
import { RecommendationBlockId as c } from "../../constants/blockIds.js";
|
|
4
|
-
import { RecommendationControlId as
|
|
5
|
-
import { BLOCK_ROOT_SELECTOR as l } from "../../constants/selectors.js";
|
|
6
|
-
import { hasGetStyle as a, hasGetAttribute as
|
|
7
|
-
const
|
|
8
|
-
function
|
|
4
|
+
import { RecommendationControlId as f } from "../../constants/controlIds.js";
|
|
5
|
+
import { BLOCK_ROOT_SELECTOR as l, MOBILE_CONTAINER_SELECTOR as R } from "../../constants/selectors.js";
|
|
6
|
+
import { hasGetStyle as a, hasGetAttribute as T } from "../../utils/tagName.js";
|
|
7
|
+
const _ = { width: "", height: "auto", "max-height": "" }, E = `${l} img.adapt-img`, b = `*${l.slice(1)}`, p = `@media only screen and (max-width: 600px) { ${E} { max-height: none !important; } }`;
|
|
8
|
+
function x(t) {
|
|
9
9
|
return { width: "auto", height: "auto", "max-height": `${t}px` };
|
|
10
10
|
}
|
|
11
11
|
function A(t) {
|
|
12
|
-
return t.querySelectorAll(
|
|
12
|
+
return t.querySelectorAll(b).some((e) => "getSelector" in e && e.getSelector() === E);
|
|
13
13
|
}
|
|
14
|
-
function
|
|
15
|
-
return a(t) && Object.entries(e).some(([o,
|
|
14
|
+
function B(t, e) {
|
|
15
|
+
return a(t) && Object.entries(e).some(([o, i]) => (t.getStyle(o) ?? "") !== i);
|
|
16
16
|
}
|
|
17
17
|
function S(t) {
|
|
18
18
|
const e = t.getDocumentRootCssNode();
|
|
19
19
|
return e && !A(e) ? e : null;
|
|
20
20
|
}
|
|
21
|
-
function
|
|
22
|
-
const
|
|
23
|
-
if (!
|
|
21
|
+
function U(t, e) {
|
|
22
|
+
const i = e.querySelectorAll("img").some((r) => a(r) && !!r.getStyle("max-height")) ? S(t) : null;
|
|
23
|
+
if (!i)
|
|
24
24
|
return;
|
|
25
|
-
const
|
|
26
|
-
|
|
25
|
+
const n = t.getDocumentModifier();
|
|
26
|
+
n.modifyCss(i).appendRule(p), n.apply(new g("Add the reco image mobile fit rule"));
|
|
27
27
|
}
|
|
28
|
-
const
|
|
28
|
+
const L = `[esd-extension-block-id="${c.IMAGE}"]`, v = /^\d+px$/;
|
|
29
29
|
function y(t) {
|
|
30
|
-
return
|
|
30
|
+
return T(t) && Number(t.getAttribute("height")) || 0;
|
|
31
31
|
}
|
|
32
|
-
function
|
|
32
|
+
function w(t) {
|
|
33
33
|
const e = y(t), o = a(t) ? t.getStyle("max-height") ?? "" : "";
|
|
34
|
-
return
|
|
34
|
+
return v.test(o) && e > 0 && o !== `${e}px`;
|
|
35
35
|
}
|
|
36
|
-
function
|
|
37
|
-
const o = e.querySelectorAll(
|
|
36
|
+
function Z(t, e) {
|
|
37
|
+
const o = e.querySelectorAll(L).map((n) => n.querySelector("img")).filter(w);
|
|
38
38
|
if (!o.length)
|
|
39
39
|
return;
|
|
40
|
-
const
|
|
41
|
-
o.forEach((
|
|
40
|
+
const i = t.getDocumentModifier();
|
|
41
|
+
o.forEach((n) => i.modifyHtml(n).setStyle("max-height", `${y(n)}px`)), i.apply(new g("Sync the reco image height bound").asHidden());
|
|
42
|
+
}
|
|
43
|
+
function h(t) {
|
|
44
|
+
try {
|
|
45
|
+
return !!t.closest(R);
|
|
46
|
+
} catch {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
42
49
|
}
|
|
43
|
-
class D extends
|
|
44
|
-
|
|
50
|
+
class D extends O(
|
|
51
|
+
f.IMAGE_SIZE,
|
|
45
52
|
c.IMAGE,
|
|
46
53
|
l
|
|
47
54
|
) {
|
|
55
|
+
// Stripo derives the mobile size from rendered targets, and the container hidden in mobile preview renders 0px.
|
|
56
|
+
getTargetNodes(e) {
|
|
57
|
+
const o = super.getTargetNodes(e);
|
|
58
|
+
if (!this.isMobilePreview())
|
|
59
|
+
return o;
|
|
60
|
+
const i = h(e);
|
|
61
|
+
return i === null ? [] : o.filter((n) => h(n) === i);
|
|
62
|
+
}
|
|
48
63
|
getAdditionalModifications(e) {
|
|
49
|
-
if (this.
|
|
64
|
+
if (this.isMobilePreview())
|
|
50
65
|
return;
|
|
51
|
-
const o = this.getFitStyles(),
|
|
52
|
-
if (!
|
|
66
|
+
const o = this.getFitStyles(), i = this.getTargetNodes(e).map((s) => s.querySelector("img")).filter((s) => B(s, o)), n = o["max-height"] ? S(this.api) : null;
|
|
67
|
+
if (!i.length && !n)
|
|
53
68
|
return;
|
|
54
69
|
const r = this.api.getDocumentModifier();
|
|
55
|
-
return
|
|
56
|
-
const
|
|
57
|
-
Object.entries(o).forEach(([
|
|
58
|
-
|
|
70
|
+
return n && r.modifyCss(n).appendRule(p), i.forEach((s) => {
|
|
71
|
+
const u = r.modifyHtml(s);
|
|
72
|
+
Object.entries(o).forEach(([d, m]) => {
|
|
73
|
+
m ? u.setStyle(d, m) : u.removeStyle(d);
|
|
59
74
|
});
|
|
60
75
|
}), r;
|
|
61
76
|
}
|
|
77
|
+
isMobilePreview() {
|
|
78
|
+
return this.api.getEditorState()[M.previewDeviceMode] === I.MOBILE;
|
|
79
|
+
}
|
|
62
80
|
getFitStyles() {
|
|
63
81
|
const { size: e } = this.api.getValues();
|
|
64
|
-
return (e == null ? void 0 : e.type) === "height" && e.value ?
|
|
82
|
+
return (e == null ? void 0 : e.type) === "height" && e.value ? x(e.value) : _;
|
|
65
83
|
}
|
|
66
84
|
}
|
|
67
|
-
const
|
|
68
|
-
|
|
85
|
+
const N = C(
|
|
86
|
+
f.IMAGE_MARGINS,
|
|
69
87
|
c.IMAGE,
|
|
70
88
|
l
|
|
71
|
-
),
|
|
89
|
+
), j = {
|
|
72
90
|
size: D,
|
|
73
|
-
margins:
|
|
91
|
+
margins: N
|
|
74
92
|
};
|
|
75
93
|
export {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
94
|
+
j as ImageControls,
|
|
95
|
+
U as ensureMobileFitRule,
|
|
96
|
+
Z as syncHeightBound
|
|
79
97
|
};
|
|
@@ -1,48 +1,49 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var
|
|
4
|
-
import { useToaster as
|
|
5
|
-
import { ToasterTypeOptions as
|
|
6
|
-
import { PAGE_TYPES as
|
|
7
|
-
import { useEditorStore as
|
|
8
|
-
import { useUnsubscribeStore as
|
|
9
|
-
import { Block as
|
|
10
|
-
import { getDefaultTemplate as
|
|
11
|
-
import { UNSUBSCRIBE_BLOCK_SELECTOR as
|
|
12
|
-
import {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
[
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
1
|
+
var R = Object.defineProperty;
|
|
2
|
+
var v = (l, c, e) => c in l ? R(l, c, { enumerable: !0, configurable: !0, writable: !0, value: e }) : l[c] = e;
|
|
3
|
+
var h = (l, c, e) => v(l, typeof c != "symbol" ? c + "" : c, e);
|
|
4
|
+
import { useToaster as D } from "../../../composables/useToaster.js";
|
|
5
|
+
import { ToasterTypeOptions as w } from "../../../enums/toaster.js";
|
|
6
|
+
import { PAGE_TYPES as B } from "../../../enums/unsubscribe.js";
|
|
7
|
+
import { useEditorStore as G } from "../../../stores/editor.js";
|
|
8
|
+
import { useUnsubscribeStore as u } from "../../../stores/unsubscribe.js";
|
|
9
|
+
import { Block as P, BlockCompositionType as x, ContextActionType as y, ModificationDescription as k, BlockType as M } from "../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
|
|
10
|
+
import { getDefaultTemplate as O } from "./template.js";
|
|
11
|
+
import { UNSUBSCRIBE_BLOCK_SELECTOR as f, DATA_ATTRIBUTES as o, UNSUBSCRIBE_EVENTS as E, UNSUBSCRIBE_MERGE_TAG_REGEX as I } from "./utils/constants.js";
|
|
12
|
+
import { swapMergeTagInHref as q } from "./utils/swapMergeTagInHref.js";
|
|
13
|
+
import { parsePageList as L } from "./utils/utils.js";
|
|
14
|
+
const F = "unsubscribe-block", _ = 'a[data-unsubscribe-link="true"]', C = "{{ins-unsubscribe-link}}", K = "https://academy.insiderone.com/docs/adding-unsubscribe-pages-into-emails", H = "Removing the unsubscribe text leaves an empty block, but an active unsubscribe link is required. Undo your last action to restore the text, or delete the unsubscribe block entirely.", Y = {
|
|
15
|
+
[B.GLOBAL_UNSUBSCRIBE]: "{{ins-global-unsubscribe-link}}",
|
|
16
|
+
[B.SUBSCRIPTION_PREFERENCE_CENTER]: "{{ins-preferences-unsubscribe-link}}"
|
|
17
|
+
}, V = 3;
|
|
18
|
+
let d = null, b = null;
|
|
19
|
+
const N = () => {
|
|
20
|
+
d && (document.removeEventListener(E.SELECT, d), d = null);
|
|
21
|
+
}, U = () => {
|
|
22
|
+
b && (document.removeEventListener(E.CANCEL, b), b = null);
|
|
23
|
+
}, W = () => {
|
|
24
|
+
N(), U();
|
|
24
25
|
};
|
|
25
|
-
class
|
|
26
|
+
class se extends P {
|
|
26
27
|
constructor() {
|
|
27
28
|
super();
|
|
28
|
-
|
|
29
|
+
h(this, "currentNode");
|
|
29
30
|
// Per-block "did this instance have a link last time we saw it?" tracking.
|
|
30
31
|
// Keyed by the stable `data-unsubscribe-block-id` we assign, because
|
|
31
32
|
// ImmutableHtmlNode instances are recreated on every document mutation and
|
|
32
33
|
// can't be used as Map keys directly. A singleton boolean here would be
|
|
33
34
|
// polluted across blocks since Stripo fires onDocumentChanged per-instance.
|
|
34
|
-
|
|
35
|
+
h(this, "linkStateByBlockId", /* @__PURE__ */ new Map());
|
|
35
36
|
// Per-block prepend retry counter for the leading text guard (SD-143097).
|
|
36
|
-
|
|
37
|
+
h(this, "guardAttemptsByBlockId", /* @__PURE__ */ new Map());
|
|
37
38
|
}
|
|
38
39
|
getId() {
|
|
39
|
-
return
|
|
40
|
+
return F;
|
|
40
41
|
}
|
|
41
42
|
getIcon() {
|
|
42
43
|
return "unsubscribe-icon";
|
|
43
44
|
}
|
|
44
45
|
getBlockCompositionType() {
|
|
45
|
-
return
|
|
46
|
+
return x.BLOCK;
|
|
46
47
|
}
|
|
47
48
|
getName() {
|
|
48
49
|
return this.api.translate("Unsubscribe Block");
|
|
@@ -51,16 +52,16 @@ class J extends U {
|
|
|
51
52
|
return this.api.translate("Unsubscribe Block Description");
|
|
52
53
|
}
|
|
53
54
|
getTemplate() {
|
|
54
|
-
return
|
|
55
|
+
return O();
|
|
55
56
|
}
|
|
56
57
|
getContextActionsIds() {
|
|
57
|
-
return [
|
|
58
|
+
return [y.MOVE, y.REMOVE];
|
|
58
59
|
}
|
|
59
60
|
onSelect(e) {
|
|
60
|
-
if (this.currentNode = e,
|
|
61
|
+
if (this.currentNode = e, G().isPreviewModeOpen)
|
|
61
62
|
return;
|
|
62
63
|
const t = this._getOrAssignBlockId(e);
|
|
63
|
-
t && this.linkStateByBlockId.set(t, this._hasUnsubscribeLink(e)), this._setupSelectEventListener(), this._setupCancelEventListener(t), !("getAttribute" in e && e.getAttribute("data-migration")) && (this._resetStoreState(), t && (
|
|
64
|
+
t && this.linkStateByBlockId.set(t, this._hasUnsubscribeLink(e)), this._setupSelectEventListener(), this._setupCancelEventListener(t), !("getAttribute" in e && e.getAttribute("data-migration")) && (this._resetStoreState(), t && (u().pendingBlockId = t), this._loadBlockState(e), this._checkExistingBlocks(), this._openDrawer());
|
|
64
65
|
}
|
|
65
66
|
onCreated(e) {
|
|
66
67
|
this._ensureLeadingTextGuard(e);
|
|
@@ -68,7 +69,7 @@ class J extends U {
|
|
|
68
69
|
onDocumentInit() {
|
|
69
70
|
try {
|
|
70
71
|
const e = this.api.getDocumentRoot();
|
|
71
|
-
e && "querySelectorAll" in e && e.querySelectorAll(
|
|
72
|
+
e && "querySelectorAll" in e && e.querySelectorAll(f).forEach((t) => {
|
|
72
73
|
this._ensureLeadingTextGuard(t);
|
|
73
74
|
});
|
|
74
75
|
} catch {
|
|
@@ -79,11 +80,11 @@ class J extends U {
|
|
|
79
80
|
const t = this._getOrAssignBlockId(e);
|
|
80
81
|
if (!t)
|
|
81
82
|
return;
|
|
82
|
-
const
|
|
83
|
-
this.linkStateByBlockId.get(t) === !0 && !
|
|
83
|
+
const i = this._hasUnsubscribeLink(e);
|
|
84
|
+
this.linkStateByBlockId.get(t) === !0 && !i && this._warnLinkRemoved(), this.linkStateByBlockId.set(t, i);
|
|
84
85
|
}
|
|
85
86
|
onDelete(e) {
|
|
86
|
-
|
|
87
|
+
W(), this._removeBlockTemplatesFromStore(e), this._resetStoreState();
|
|
87
88
|
const t = this._readBlockId(e);
|
|
88
89
|
t && (this.linkStateByBlockId.delete(t), this.guardAttemptsByBlockId.delete(t));
|
|
89
90
|
}
|
|
@@ -95,38 +96,38 @@ class J extends U {
|
|
|
95
96
|
_ensureLeadingTextGuard(e) {
|
|
96
97
|
if (!("querySelector" in e))
|
|
97
98
|
return;
|
|
98
|
-
const t = e.querySelector(
|
|
99
|
+
const t = e.querySelector(_);
|
|
99
100
|
if (!t)
|
|
100
101
|
return;
|
|
101
|
-
let
|
|
102
|
+
let i = t, r = i.parent();
|
|
102
103
|
for (; r && "getTagName" in r && r.getTagName().toLowerCase() !== "p"; )
|
|
103
|
-
|
|
104
|
+
i = r, r = r.parent();
|
|
104
105
|
if (!r || !("getTagName" in r) || r.getTagName().toLowerCase() !== "p")
|
|
105
106
|
return;
|
|
106
|
-
const
|
|
107
|
-
if (!!(
|
|
108
|
-
const
|
|
109
|
-
|
|
107
|
+
const s = i.previousSibling();
|
|
108
|
+
if (!!(s && s.getType() === "text" && s.getTextContent())) {
|
|
109
|
+
const a = this._readBlockId(e);
|
|
110
|
+
a && this.guardAttemptsByBlockId.delete(a);
|
|
110
111
|
return;
|
|
111
112
|
}
|
|
112
|
-
const
|
|
113
|
-
if (!
|
|
113
|
+
const g = this._getOrAssignBlockId(e);
|
|
114
|
+
if (!g)
|
|
114
115
|
return;
|
|
115
|
-
const
|
|
116
|
-
if (!(
|
|
117
|
-
this.guardAttemptsByBlockId.set(
|
|
116
|
+
const p = this.guardAttemptsByBlockId.get(g) ?? 0;
|
|
117
|
+
if (!(p >= V)) {
|
|
118
|
+
this.guardAttemptsByBlockId.set(g, p + 1);
|
|
118
119
|
try {
|
|
119
|
-
this.api.getDocumentModifier().modifyHtml(r).prepend(" ").apply(new
|
|
120
|
-
} catch (
|
|
121
|
-
console.warn("[UnsubscribeBlock] Failed to ensure link text guard:",
|
|
120
|
+
this.api.getDocumentModifier().modifyHtml(r).prepend(" ").apply(new k("Ensure unsubscribe link text guard"));
|
|
121
|
+
} catch (a) {
|
|
122
|
+
console.warn("[UnsubscribeBlock] Failed to ensure link text guard:", a);
|
|
122
123
|
}
|
|
123
124
|
}
|
|
124
125
|
}
|
|
125
126
|
_hasUnsubscribeLink(e) {
|
|
126
|
-
return "querySelector" in e ? !!e.querySelector(
|
|
127
|
+
return "querySelector" in e ? !!e.querySelector(_) : !1;
|
|
127
128
|
}
|
|
128
129
|
_readBlockId(e) {
|
|
129
|
-
return "getAttribute" in e ? e.getAttribute(
|
|
130
|
+
return "getAttribute" in e ? e.getAttribute(o.BLOCK_ID) : null;
|
|
130
131
|
}
|
|
131
132
|
/**
|
|
132
133
|
* Returns the block's stable id, assigning one via the document modifier if
|
|
@@ -140,13 +141,13 @@ class J extends U {
|
|
|
140
141
|
return t;
|
|
141
142
|
if (!("getAttribute" in e))
|
|
142
143
|
return null;
|
|
143
|
-
const
|
|
144
|
+
const i = this._generateNextBlockId();
|
|
144
145
|
try {
|
|
145
|
-
this.api.getDocumentModifier().modifyHtml(e).setAttribute(
|
|
146
|
+
this.api.getDocumentModifier().modifyHtml(e).setAttribute(o.BLOCK_ID, i).apply(new k(`Assign unsubscribe block id ${i}`));
|
|
146
147
|
} catch (r) {
|
|
147
148
|
return console.warn("[UnsubscribeBlock] Failed to assign block id:", r), null;
|
|
148
149
|
}
|
|
149
|
-
return
|
|
150
|
+
return i;
|
|
150
151
|
}
|
|
151
152
|
/**
|
|
152
153
|
* Generates a unique id by scanning the document for the highest existing
|
|
@@ -157,10 +158,10 @@ class J extends U {
|
|
|
157
158
|
let e = 0;
|
|
158
159
|
try {
|
|
159
160
|
const t = this.api.getDocumentRoot();
|
|
160
|
-
t && "querySelectorAll" in t && t.querySelectorAll(
|
|
161
|
+
t && "querySelectorAll" in t && t.querySelectorAll(f).forEach((r) => {
|
|
161
162
|
if ("getAttribute" in r) {
|
|
162
|
-
const
|
|
163
|
-
|
|
163
|
+
const s = r.getAttribute(o.BLOCK_ID), n = s ? parseInt(s) : 0;
|
|
164
|
+
n > e && (e = n);
|
|
164
165
|
}
|
|
165
166
|
});
|
|
166
167
|
} catch {
|
|
@@ -169,14 +170,14 @@ class J extends U {
|
|
|
169
170
|
}
|
|
170
171
|
_warnLinkRemoved() {
|
|
171
172
|
try {
|
|
172
|
-
const { showToaster: e } =
|
|
173
|
+
const { showToaster: e } = D();
|
|
173
174
|
e({
|
|
174
|
-
type:
|
|
175
|
-
message: this.api.translate(
|
|
175
|
+
type: w.Warning,
|
|
176
|
+
message: this.api.translate(H),
|
|
176
177
|
actionButton: {
|
|
177
178
|
text: this.api.translate("Visit Academy"),
|
|
178
179
|
onClick: () => {
|
|
179
|
-
window.open(
|
|
180
|
+
window.open(K, "_blank", "noopener,noreferrer");
|
|
180
181
|
}
|
|
181
182
|
}
|
|
182
183
|
});
|
|
@@ -185,55 +186,62 @@ class J extends U {
|
|
|
185
186
|
}
|
|
186
187
|
}
|
|
187
188
|
_setupSelectEventListener() {
|
|
188
|
-
|
|
189
|
-
const t = e, { collectionType:
|
|
190
|
-
this._updateBlock(
|
|
191
|
-
}, document.addEventListener(
|
|
189
|
+
N(), d = (e) => {
|
|
190
|
+
const t = e, { collectionType: i, selectedPages: r } = t.detail;
|
|
191
|
+
this._updateBlock(i, r.join(","));
|
|
192
|
+
}, document.addEventListener(E.SELECT, d);
|
|
192
193
|
}
|
|
193
194
|
_setupCancelEventListener(e) {
|
|
194
|
-
|
|
195
|
-
const { detail:
|
|
196
|
-
((
|
|
197
|
-
}, document.addEventListener(
|
|
195
|
+
U(), b = (t) => {
|
|
196
|
+
const { detail: i } = t;
|
|
197
|
+
((i == null ? void 0 : i.blockId) ?? null) === e && this._handleCancel();
|
|
198
|
+
}, document.addEventListener(E.CANCEL, b);
|
|
198
199
|
}
|
|
199
200
|
_handleCancel() {
|
|
200
201
|
try {
|
|
201
202
|
if (!this.currentNode)
|
|
202
203
|
return;
|
|
203
|
-
this.api.getDocumentModifier().modifyHtml(this.currentNode).replaceWith(`<${
|
|
204
|
+
this.api.getDocumentModifier().modifyHtml(this.currentNode).replaceWith(`<${M.EMPTY_CONTAINER}/>`).apply(new k("Removed unsubscribe block due to cancel"));
|
|
204
205
|
} catch (e) {
|
|
205
206
|
console.warn("[UnsubscribeBlock] Failed to remove unsubscribe block:", e);
|
|
206
207
|
}
|
|
207
208
|
}
|
|
208
209
|
_updateBlock(e, t) {
|
|
210
|
+
var a;
|
|
209
211
|
if (!this.currentNode || !("querySelector" in this.currentNode))
|
|
210
212
|
return;
|
|
211
|
-
const
|
|
212
|
-
if (!
|
|
213
|
+
const i = this.currentNode.querySelector(_);
|
|
214
|
+
if (!i)
|
|
213
215
|
return;
|
|
214
|
-
const r = this._getMergeTag(e);
|
|
215
|
-
|
|
216
|
+
const r = this._getMergeTag(e), s = this.api.getDocumentModifier(), n = "getAttribute" in i ? i.getAttribute("href") : null, p = [(a = n == null ? void 0 : n.match(I)) == null ? void 0 : a[0], C];
|
|
217
|
+
s.modifyHtml(i).setAttribute("href", r), this.currentNode.querySelectorAll("a[href]").forEach((m) => {
|
|
218
|
+
var T;
|
|
219
|
+
if (!("getAttribute" in m) || m.getAttribute("data-unsubscribe-link") === "true")
|
|
220
|
+
return;
|
|
221
|
+
const S = m.getAttribute("href") ?? "", A = (T = S.match(I)) == null ? void 0 : T[0];
|
|
222
|
+
A && p.includes(A) && s.modifyHtml(m).setAttribute("href", q(S, r));
|
|
223
|
+
}), s.modifyHtml(this.currentNode).setAttribute(o.PAGE_TYPE, e.toString()).setAttribute(o.PAGE_LIST, t), s.apply(new k(`Updated unsubscribe link to ${r}`));
|
|
216
224
|
}
|
|
217
225
|
_getMergeTag(e) {
|
|
218
|
-
return
|
|
226
|
+
return Y[e] ?? C;
|
|
219
227
|
}
|
|
220
228
|
_openDrawer() {
|
|
221
229
|
if (!(this.currentNode && this.currentNode.getAttribute("data-unsubscribe-page-type")))
|
|
222
230
|
try {
|
|
223
|
-
const e =
|
|
231
|
+
const e = u();
|
|
224
232
|
e.typeSelectionDrawerStatus = !0;
|
|
225
233
|
} catch (e) {
|
|
226
234
|
console.error("[UnsubscribeBlock] Failed to open drawer:", e);
|
|
227
235
|
}
|
|
228
236
|
}
|
|
229
237
|
_checkExistingBlocks() {
|
|
230
|
-
const e =
|
|
231
|
-
e.isGlobalUnsubscribeDisabled = !1, e.isSubscriptionPreferencesCenterDisabled = !1, this.api.getDocumentRoot().querySelectorAll(
|
|
232
|
-
if ("getAttribute" in
|
|
233
|
-
const r =
|
|
238
|
+
const e = u();
|
|
239
|
+
e.isGlobalUnsubscribeDisabled = !1, e.isSubscriptionPreferencesCenterDisabled = !1, this.api.getDocumentRoot().querySelectorAll(f).forEach((i) => {
|
|
240
|
+
if ("getAttribute" in i) {
|
|
241
|
+
const r = i.getAttribute(o.PAGE_TYPE);
|
|
234
242
|
if (r) {
|
|
235
|
-
const
|
|
236
|
-
|
|
243
|
+
const s = Number(r);
|
|
244
|
+
s === B.GLOBAL_UNSUBSCRIBE ? e.isGlobalUnsubscribeDisabled = !0 : s === B.SUBSCRIPTION_PREFERENCE_CENTER && (e.isSubscriptionPreferencesCenterDisabled = !0);
|
|
237
245
|
}
|
|
238
246
|
}
|
|
239
247
|
});
|
|
@@ -241,27 +249,27 @@ class J extends U {
|
|
|
241
249
|
async _loadBlockState(e) {
|
|
242
250
|
if (!("getAttribute" in e))
|
|
243
251
|
return;
|
|
244
|
-
const t = e.getAttribute(
|
|
245
|
-
if (!t || !
|
|
252
|
+
const t = e.getAttribute(o.PAGE_TYPE), i = e.getAttribute(o.PAGE_LIST);
|
|
253
|
+
if (!t || !i)
|
|
246
254
|
return;
|
|
247
|
-
const r =
|
|
248
|
-
await r.fetchTemplates(), r.setCollectionWithoutAutoSelection(
|
|
255
|
+
const r = u(), s = Number(t), n = L(i);
|
|
256
|
+
await r.fetchTemplates(), r.setCollectionWithoutAutoSelection(s), r.loadSelectedTemplates(n);
|
|
249
257
|
}
|
|
250
258
|
_resetStoreState() {
|
|
251
|
-
|
|
259
|
+
u().$reset();
|
|
252
260
|
}
|
|
253
261
|
_removeBlockTemplatesFromStore(e) {
|
|
254
262
|
if (!("getAttribute" in e))
|
|
255
263
|
return;
|
|
256
|
-
const t = e.getAttribute(
|
|
264
|
+
const t = e.getAttribute(o.PAGE_LIST);
|
|
257
265
|
if (!t)
|
|
258
266
|
return;
|
|
259
|
-
const
|
|
260
|
-
|
|
267
|
+
const i = u(), r = L(t);
|
|
268
|
+
i.removeUnsubscribePages(r);
|
|
261
269
|
}
|
|
262
270
|
}
|
|
263
271
|
export {
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
272
|
+
F as UNSUBSCRIBE_BLOCK_ID,
|
|
273
|
+
se as UnsubscribeBlock,
|
|
274
|
+
W as disposeUnsubscribeListeners
|
|
267
275
|
};
|
|
@@ -5,10 +5,11 @@ const s = {
|
|
|
5
5
|
PAGE_TYPE: "data-unsubscribe-page-type",
|
|
6
6
|
PAGE_LIST: "data-unsubscribe-page-list",
|
|
7
7
|
BLOCK_ID: "data-unsubscribe-block-id"
|
|
8
|
-
},
|
|
8
|
+
}, e = ".unsubscribe-block-v2", E = /{{ins-(?:global-)?(?:preferences-)?unsubscribe-link}}/, c = 'a[data-unsubscribe-link="true"], a.unsubscribe-link';
|
|
9
9
|
export {
|
|
10
10
|
b as DATA_ATTRIBUTES,
|
|
11
|
-
|
|
11
|
+
e as UNSUBSCRIBE_BLOCK_SELECTOR,
|
|
12
12
|
s as UNSUBSCRIBE_EVENTS,
|
|
13
|
-
|
|
13
|
+
c as UNSUBSCRIBE_LINK_SELECTOR,
|
|
14
|
+
E as UNSUBSCRIBE_MERGE_TAG_REGEX
|
|
14
15
|
};
|
package/dist/guido.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
@charset "UTF-8";.auth-error-modal[data-v-b4d7ae51]{position:relative;z-index:145}.gap-16[data-v-5553d071],.gap-16[data-v-0e1b0c54]{gap:16px}[data-v-9d988e4b] .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}.color-vision-select__dropdown[data-v-64cb50da]{z-index:20;width:387px}.accessibility-toolbar[data-v-391019bc]{gap:16px}.accessibility-toolbar[data-v-391019bc] .in-segments-wrapper__button svg{margin-right:0}.accessibility-toolbar[data-v-391019bc] .in-segments-wrapper__button .clearfix:after{content:none}.view-options-wrapper[data-v-87033101]{position:relative;display:inline-block}.new-tag[data-v-87033101]{position:absolute;top:-8px;right:-16px;z-index:10}[data-v-87033101] .guido__view-option-selection-desktop svg,[data-v-87033101] .guido__view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-87033101] .in-segments-wrapper__button_selected,[data-v-87033101] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}[data-v-87033101] .in-tooltip-wrapper-v2__icon{cursor:pointer}.editor-toolbar[data-v-173c3a40]{gap:4px}.version-history-item[data-v-ee4b9c3f]{flex-basis:200px}.version-history[data-v-fad98586]{gap:8px}.version-history__toolbar[data-v-fad98586]{gap:4px}.view-options-wrapper[data-v-6ebabfe4]{position:relative;display:inline-block}.new-tag[data-v-6ebabfe4]{position:absolute;top:-8px;right:-16px;z-index:10}[data-v-6ebabfe4] .guido__verion-history-view-option-selection-desktop svg,[data-v-6ebabfe4] .guido__verion-history-view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-6ebabfe4] .in-segments-wrapper__button_selected,[data-v-6ebabfe4] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}[data-v-6ebabfe4] .in-tooltip-wrapper-v2__icon{cursor:pointer}.editor-actions-menu__dropdown[data-v-bdb3b37a]{z-index:20;width:222px}.editor-actions[data-v-9a028d08]{gap:16px}.editor-actions__divider[data-v-9a028d08]{width:1px;height:40px;background-color:#e1e1e1}.right-slot[data-v-77451c9a]{gap:16px}.header-wrapper[data-v-3c713746]{min-width:1000px}.guido-loading__wrapper[data-v-07c4b2d8]{height:100%;top:75px!important;bottom:0!important}.validation-error-list[data-v-e48cebe9]{gap:16px}.validation-error-row[data-v-e48cebe9]{gap:8px;padding:24px;border:1px solid #E1E1E1;border-radius:8px}.validation-error-row__icon[data-v-e48cebe9]{flex-shrink:0;font-size:24px;line-height:0}.validation-error-row__text[data-v-e48cebe9]{font-size:13px;line-height:16px;color:#292929;word-break:break-word}.guido-editor__wrapper[data-v-
|
|
1
|
+
@charset "UTF-8";.auth-error-modal[data-v-b4d7ae51]{position:relative;z-index:145}.gap-16[data-v-5553d071],.gap-16[data-v-0e1b0c54]{gap:16px}[data-v-9d988e4b] .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}.color-vision-select__dropdown[data-v-64cb50da]{z-index:20;width:387px}.accessibility-toolbar[data-v-391019bc]{gap:16px}.accessibility-toolbar[data-v-391019bc] .in-segments-wrapper__button svg{margin-right:0}.accessibility-toolbar[data-v-391019bc] .in-segments-wrapper__button .clearfix:after{content:none}.view-options-wrapper[data-v-87033101]{position:relative;display:inline-block}.new-tag[data-v-87033101]{position:absolute;top:-8px;right:-16px;z-index:10}[data-v-87033101] .guido__view-option-selection-desktop svg,[data-v-87033101] .guido__view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-87033101] .in-segments-wrapper__button_selected,[data-v-87033101] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}[data-v-87033101] .in-tooltip-wrapper-v2__icon{cursor:pointer}.editor-toolbar[data-v-173c3a40]{gap:4px}.version-history-item[data-v-ee4b9c3f]{flex-basis:200px}.version-history[data-v-fad98586]{gap:8px}.version-history__toolbar[data-v-fad98586]{gap:4px}.view-options-wrapper[data-v-6ebabfe4]{position:relative;display:inline-block}.new-tag[data-v-6ebabfe4]{position:absolute;top:-8px;right:-16px;z-index:10}[data-v-6ebabfe4] .guido__verion-history-view-option-selection-desktop svg,[data-v-6ebabfe4] .guido__verion-history-view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-6ebabfe4] .in-segments-wrapper__button_selected,[data-v-6ebabfe4] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}[data-v-6ebabfe4] .in-tooltip-wrapper-v2__icon{cursor:pointer}.editor-actions-menu__dropdown[data-v-bdb3b37a]{z-index:20;width:222px}.editor-actions[data-v-9a028d08]{gap:16px}.editor-actions__divider[data-v-9a028d08]{width:1px;height:40px;background-color:#e1e1e1}.right-slot[data-v-77451c9a]{gap:16px}.header-wrapper[data-v-3c713746]{min-width:1000px}.guido-loading__wrapper[data-v-07c4b2d8]{height:100%;top:75px!important;bottom:0!important}.validation-error-list[data-v-e48cebe9]{gap:16px}.validation-error-row[data-v-e48cebe9]{gap:8px;padding:24px;border:1px solid #E1E1E1;border-radius:8px}.validation-error-row__icon[data-v-e48cebe9]{flex-shrink:0;font-size:24px;line-height:0}.validation-error-row__text[data-v-e48cebe9]{font-size:13px;line-height:16px;color:#292929;word-break:break-word}.guido-editor__wrapper[data-v-8fc59697]{--ribbon-offset: 0px;position:relative;width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__container[data-v-8fc59697]{width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__no-header[data-v-8fc59697]{height:calc(100vh - 75px - var(--ribbon-offset))}[data-v-293f1c47] .in-breadcrumb-wrapper__links{cursor:pointer}.templates-wrapper[data-v-eaf8e461]{gap:16px;grid-template-columns:repeat(3,1fr)}.templates-wrapper .template-wrapper[data-v-eaf8e461]{cursor:pointer}.templates-wrapper .template-wrapper .template-container[data-v-eaf8e461]{height:274px;padding:2px;transition:none}.templates-wrapper .template-wrapper .template-container.selected[data-v-eaf8e461]{padding:1px}.templates-wrapper .template-wrapper .template-container .thumbnail[data-v-eaf8e461]{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}.guido-tab-bar-onboarding[data-v-219b4f7c]{z-index:21}[data-v-fcba7e99] .vueperslides__bullets{pointer-events:none!important}[data-v-fcba7e99] .vueperslides__parallax-wrapper{padding-bottom:110px!important}[data-v-1a34025a] .vueperslides__bullets{pointer-events:none!important}[data-v-1a34025a] .vueperslides__parallax-wrapper{height:110px!important;padding-bottom:110px!important}[data-v-8fc96a58] .vueperslides__bullets,[data-v-ec2027ff] .vueperslides__bullets,[data-v-b09e80c4] .vueperslides__bullets{pointer-events:none!important}[data-v-b09e80c4] .vueperslides__parallax-wrapper{height:110px!important;padding-bottom:110px!important}[data-v-9bdef600] .vueperslides__parallax-wrapper{padding-bottom:110px!important}.assign-strategy-drawer-content .assign-strategy-select[data-v-6ce48dfd]{width:100%;max-width:none}.assign-strategy-drawer-content .assign-strategy-select[data-v-6ce48dfd] .in-skeleton{width:100%!important}.assign-strategy-drawer-content .assign-strategy-select[data-v-6ce48dfd] .in-dropdown-box__container{width:413px}.assign-strategy-drawer .spaced-dot-sep{background-image:linear-gradient(90deg,#91949f 20%,#fff0 0);background-position:center bottom;background-repeat:repeat-x;background-size:5px 1px}.assign-strategy-drawer .spaced-dot-sep--top{background-position:center top}.assign-strategy-drawer .spaced-dot-sep--fc-n:first-child{background:none}.guido-display-condition-create__separator[data-v-929822bc]{height:1px;margin:0 0 24px;background-image:linear-gradient(to right,currentColor 1px,transparent 1px);background-size:5px 1px}.guido-display-condition-create__methods[data-v-929822bc]{gap:16px}.guido-display-condition-select-root[data-v-0d740001] .in-drawer__footer{justify-content:flex-start}.guido-display-condition-select__delete-modal[data-v-0d740001]{position:relative;z-index:145}.guido-display-condition-select__delete-modal[data-v-0d740001] .in-modal-v2-wrapper__header-title{margin-bottom:0}.guido-display-condition-select-root[data-v-0d740001] .in-drawer__content>div{display:flex;flex-direction:column;min-height:100%}.guido-display-condition-select__list[data-v-0d740001]{display:flex;flex-direction:column;gap:24px;margin:0;padding:0;list-style:none}.guido-display-condition-card__header[data-v-0d740001]{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:15px}.guido-display-condition-card__text[data-v-0d740001]{min-width:0}.guido-display-condition-card__name[data-v-0d740001],.guido-display-condition-card__description[data-v-0d740001]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.guido-display-condition-card__actions[data-v-0d740001]{display:flex;flex-shrink:0;align-items:center;gap:16px}.guido-display-condition-card__split[data-v-0d740001]{position:relative;display:flex;gap:1px}.guido-display-condition-card__menu[data-v-0d740001]{z-index:2;min-width:115px}.guido-display-condition-card__divider[data-v-0d740001]{width:1px;height:24px}.guido-display-condition-card__code[data-v-0d740001]{margin:1px 15px 15px;padding:8px;font-family:inherit;white-space:pre-wrap;word-break:break-word}.legacy-strategy-updated-modal[data-v-da2225a1]{position:relative;z-index:145}
|
package/dist/package.json.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
const o = "3.27.
|
|
1
|
+
const o = "3.27.1-beta.842075e", s = { stripo: { version: "2.86.1" } }, e = {
|
|
2
2
|
version: o,
|
|
3
|
-
guido:
|
|
3
|
+
guido: s
|
|
4
4
|
};
|
|
5
5
|
export {
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
e as default,
|
|
7
|
+
s as guido,
|
|
8
8
|
o as version
|
|
9
9
|
};
|
|
@@ -31,13 +31,6 @@ export type DynamicContentNode = {
|
|
|
31
31
|
* flattens the active (first) partner's leaf attributes into a `DynamicContent[]`.
|
|
32
32
|
*/
|
|
33
33
|
export type DynamicContentList = Record<string, DynamicContentNode[]>;
|
|
34
|
-
/** A leaf attribute with both backend labels and its category path (root → parent). */
|
|
35
|
-
export type DynamicContentCandidate = {
|
|
36
|
-
value: string;
|
|
37
|
-
text: string;
|
|
38
|
-
tagText: string;
|
|
39
|
-
path: string[];
|
|
40
|
-
};
|
|
41
34
|
export type MergeTag = BaseDynamicContent & {
|
|
42
35
|
label: string;
|
|
43
36
|
selStart?: number;
|
|
@@ -1,15 +1,9 @@
|
|
|
1
|
-
import type { DynamicContentCandidate } from '@@/Types/generic';
|
|
2
1
|
import type { ModuleAddData, ModuleModifier } from '@@/Types/stripo';
|
|
3
|
-
import { type DynamicContentConversionResult } from '@@/Utils/dynamicContentConverter';
|
|
4
2
|
export declare const UNRESOLVED_DYNAMIC_CONTENT_ON_DROP_KEY = "dynamic-content.unresolved-attributes-on-drop";
|
|
5
|
-
export declare const registerUsedAttributes: (html: string, candidates: DynamicContentCandidate[]) => void;
|
|
6
3
|
/**
|
|
7
4
|
* Repairs dropped/copied saved modules (items currency, linkless legacy unsubscribe → text block,
|
|
8
5
|
* dynamic-content labels → tokens) in one write-back; wired via Stripo's `onModuleAdd` (see `useStripo`).
|
|
9
6
|
*/
|
|
10
7
|
export declare const useModuleRepair: () => {
|
|
11
8
|
handleModuleAdd: (data: ModuleAddData, modifier: ModuleModifier) => void;
|
|
12
|
-
convertDynamicContent: (html: string) => DynamicContentConversionResult & {
|
|
13
|
-
candidates: DynamicContentCandidate[];
|
|
14
|
-
};
|
|
15
9
|
};
|
|
@@ -8,10 +8,6 @@ type CardWidthParams = {
|
|
|
8
8
|
interface CampaignData extends CardWidthParams {
|
|
9
9
|
textTrimming: boolean;
|
|
10
10
|
orientation: string;
|
|
11
|
-
priceBeforeTextValue: string;
|
|
12
|
-
priceAfterTextValue: string;
|
|
13
|
-
discountBeforeTextValue: string;
|
|
14
|
-
discountAfterTextValue: string;
|
|
15
11
|
}
|
|
16
12
|
export declare const useRecommendation: () => {
|
|
17
13
|
calculateCardWidth: ({ mobileLeftPadding, mobileRightPadding, cardsInRow, unresponsive, }: CardWidthParams) => number;
|
|
@@ -25,7 +25,9 @@ declare const SizeControl_base: {
|
|
|
25
25
|
};
|
|
26
26
|
};
|
|
27
27
|
declare class SizeControl extends SizeControl_base {
|
|
28
|
+
getTargetNodes(root: ImmutableHtmlNode): ImmutableHtmlNode[];
|
|
28
29
|
getAdditionalModifications(root: ImmutableHtmlNode): TemplateModifier<HtmlNodeModifier, CssNodeModifier> | undefined;
|
|
30
|
+
private isMobilePreview;
|
|
29
31
|
private getFitStyles;
|
|
30
32
|
}
|
|
31
33
|
/**
|