@useinsider/guido 3.8.0-beta.84f6c0a → 3.8.0-beta.910d4af
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/components/organisms/email-preview/desktop-preview/DesktopPreview.vue.js +8 -8
- package/dist/components/organisms/email-preview/desktop-preview/DesktopPreview.vue2.js +15 -12
- package/dist/components/organisms/email-preview/mobile-preview/ContentView.vue.js +5 -5
- package/dist/components/organisms/email-preview/mobile-preview/ContentView.vue2.js +16 -15
- package/dist/components/organisms/unsubscribe/UnsubscribePageSelection.vue.js +5 -5
- package/dist/components/organisms/unsubscribe/UnsubscribePageSelection.vue2.js +42 -37
- package/dist/components/organisms/unsubscribe/UnsubscribeTypeSelection.vue.js +3 -3
- package/dist/components/organisms/unsubscribe/UnsubscribeTypeSelection.vue2.js +40 -37
- package/dist/composables/usePreviewInteractionGuard.js +17 -0
- package/dist/composables/useSave.js +14 -14
- package/dist/composables/validators/useUnsubscribeBlockValidator.js +26 -17
- package/dist/config/compiler/utils/recommendationCompilerUtils.js +25 -19
- package/dist/extensions/Blocks/Recommendation/constants/selectors.js +10 -11
- package/dist/extensions/Blocks/Recommendation/controls/main/index.js +26 -24
- package/dist/extensions/Blocks/Recommendation/controls/main/layoutOrientation.js +39 -30
- package/dist/extensions/Blocks/Recommendation/controls/main/productLayout.js +34 -28
- package/dist/extensions/Blocks/Recommendation/controls/main/utils.js +333 -285
- package/dist/extensions/Blocks/Recommendation/extension.js +5 -6
- package/dist/extensions/Blocks/Recommendation/settingsPanel.js +2 -3
- package/dist/extensions/Blocks/Recommendation/templates/grid/elementRenderer.js +173 -142
- package/dist/extensions/Blocks/Recommendation/templates/grid/template.js +30 -56
- package/dist/extensions/Blocks/Recommendation/templates/index.js +8 -29
- package/dist/extensions/Blocks/Recommendation/templates/list/elementRenderer.js +105 -132
- package/dist/extensions/Blocks/Recommendation/templates/list/template.js +23 -44
- package/dist/extensions/Blocks/Recommendation/templates/utils.js +64 -112
- package/dist/extensions/Blocks/Recommendation/utils/preserveTextStyles.js +19 -24
- package/dist/extensions/Blocks/Recommendation/utils/tagName.js +22 -30
- package/dist/extensions/Blocks/Unsubscribe/block.js +40 -37
- package/dist/extensions/Blocks/Unsubscribe/control.js +19 -16
- package/dist/extensions/Blocks/controlFactories.js +133 -159
- package/dist/guido.css +1 -1
- package/dist/src/composables/usePreviewInteractionGuard.d.ts +3 -0
- package/dist/src/composables/validators/useUnsubscribeBlockValidator.d.ts +1 -0
- package/dist/src/extensions/Blocks/Items/controls/index.d.ts +1 -1
- package/dist/src/extensions/Blocks/Recommendation/constants/index.d.ts +1 -1
- package/dist/src/extensions/Blocks/Recommendation/constants/selectors.d.ts +0 -2
- package/dist/src/extensions/Blocks/Recommendation/controls/button/index.d.ts +1 -1
- package/dist/src/extensions/Blocks/Recommendation/controls/main/layoutOrientation.d.ts +1 -2
- package/dist/src/extensions/Blocks/Recommendation/controls/main/utils.d.ts +47 -20
- package/dist/src/extensions/Blocks/Recommendation/templates/grid/template.d.ts +4 -4
- package/dist/src/extensions/Blocks/Recommendation/templates/index.d.ts +1 -1
- package/dist/src/extensions/Blocks/Recommendation/templates/list/template.d.ts +2 -3
- package/dist/src/extensions/Blocks/Recommendation/templates/utils.d.ts +11 -165
- package/dist/src/extensions/Blocks/Recommendation/utils/preserveTextStyles.d.ts +0 -15
- package/dist/src/extensions/Blocks/Recommendation/utils/stylePreserver.d.ts +113 -0
- package/dist/src/extensions/Blocks/Recommendation/utils/tagName.d.ts +9 -29
- package/dist/src/extensions/Blocks/controlFactories.d.ts +1 -11
- package/dist/src/stores/unsubscribe.d.ts +11 -1
- package/dist/stores/unsubscribe.js +8 -7
- package/package.json +1 -1
- package/dist/extensions/Blocks/Recommendation/utils/captureStyleTemplates.js +0 -219
- package/dist/src/extensions/Blocks/Recommendation/utils/captureStyleTemplates.d.ts +0 -78
|
@@ -1,276 +1,250 @@
|
|
|
1
|
-
import { TextAlignBuiltInControl as
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
return class extends a {
|
|
1
|
+
import { TextAlignBuiltInControl as s, TextColorBuiltInControl as l, TextSizeBuiltInControl as u, TextStyleBuiltInControl as i, TextFontFamilyBuiltInControl as c, ButtonBackgroundColorBuiltInControl as d, TextPaddingsBuiltInControl as a, ImageSizeBuiltInControl as g, ImageMarginsBuiltInControl as x, ButtonAlignBuiltInControl as C, ButtonBorderBuiltInControl as f, ButtonBorderRadiusBuiltInControl as B, ButtonColorBuiltInControl as T, ButtonFontFamilyBuiltInControl as I, ButtonMarginsBuiltInControl as y, ButtonPaddingsBuiltInControl as m, ButtonTextBuiltInControl as A, ButtonTextSizeBuiltInControl as S, ButtonTextStyleAndFontColorBuiltInControl as N, ButtonFitToContainerBuiltInControl as b, TextLineSpacingBuiltInControl as q } from "../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
|
|
2
|
+
function k(o, n, r) {
|
|
3
|
+
return class extends s {
|
|
5
4
|
getId() {
|
|
6
5
|
return o;
|
|
7
6
|
}
|
|
8
|
-
getTargetNodes(
|
|
7
|
+
getTargetNodes(t) {
|
|
9
8
|
if (!n || !r)
|
|
10
|
-
return [
|
|
11
|
-
const
|
|
12
|
-
return
|
|
9
|
+
return [t];
|
|
10
|
+
const e = t.closest(r);
|
|
11
|
+
return e ? e.querySelectorAll(`[esd-extension-block-id="${n}"]`) : [];
|
|
13
12
|
}
|
|
14
13
|
};
|
|
15
14
|
}
|
|
16
|
-
function
|
|
17
|
-
return class extends
|
|
15
|
+
function p(o, n, r) {
|
|
16
|
+
return class extends l {
|
|
18
17
|
getId() {
|
|
19
18
|
return o;
|
|
20
19
|
}
|
|
21
|
-
getTargetNodes(
|
|
20
|
+
getTargetNodes(t) {
|
|
22
21
|
if (!n || !r)
|
|
23
|
-
return [
|
|
24
|
-
const
|
|
25
|
-
return
|
|
22
|
+
return [t];
|
|
23
|
+
const e = t.closest(r);
|
|
24
|
+
return e ? e.querySelectorAll(`[esd-extension-block-id="${n}"]`) : [];
|
|
26
25
|
}
|
|
27
26
|
};
|
|
28
27
|
}
|
|
29
|
-
function
|
|
30
|
-
return class extends
|
|
28
|
+
function F(o, n, r) {
|
|
29
|
+
return class extends u {
|
|
31
30
|
getId() {
|
|
32
31
|
return o;
|
|
33
32
|
}
|
|
34
|
-
getTargetNodes(
|
|
33
|
+
getTargetNodes(t) {
|
|
35
34
|
if (!n || !r)
|
|
36
|
-
return [
|
|
37
|
-
const
|
|
38
|
-
return
|
|
35
|
+
return [t];
|
|
36
|
+
const e = t.closest(r);
|
|
37
|
+
return e ? e.querySelectorAll(`[esd-extension-block-id="${n}"]`) : [];
|
|
39
38
|
}
|
|
40
39
|
};
|
|
41
40
|
}
|
|
42
|
-
function
|
|
43
|
-
return class extends
|
|
41
|
+
function z(o, n, r) {
|
|
42
|
+
return class extends i {
|
|
44
43
|
getId() {
|
|
45
44
|
return o;
|
|
46
45
|
}
|
|
47
|
-
getTargetNodes(
|
|
46
|
+
getTargetNodes(t) {
|
|
48
47
|
if (!n || !r)
|
|
49
|
-
return [
|
|
50
|
-
const
|
|
51
|
-
return
|
|
48
|
+
return [t];
|
|
49
|
+
const e = t.closest(r);
|
|
50
|
+
return e ? e.querySelectorAll(`[esd-extension-block-id="${n}"]`) : [];
|
|
52
51
|
}
|
|
53
52
|
};
|
|
54
53
|
}
|
|
55
|
-
function
|
|
56
|
-
return class extends
|
|
54
|
+
function M(o, n, r) {
|
|
55
|
+
return class extends c {
|
|
57
56
|
getId() {
|
|
58
57
|
return o;
|
|
59
58
|
}
|
|
60
|
-
getTargetNodes(
|
|
59
|
+
getTargetNodes(t) {
|
|
61
60
|
if (!n || !r)
|
|
62
|
-
return [
|
|
63
|
-
const
|
|
64
|
-
return
|
|
61
|
+
return [t];
|
|
62
|
+
const e = t.closest(r);
|
|
63
|
+
return e ? e.querySelectorAll(`[esd-extension-block-id="${n}"]`) : [];
|
|
65
64
|
}
|
|
66
65
|
};
|
|
67
66
|
}
|
|
68
|
-
function
|
|
69
|
-
return class extends
|
|
67
|
+
function P(o, n, r) {
|
|
68
|
+
return class extends d {
|
|
70
69
|
getId() {
|
|
71
70
|
return o;
|
|
72
71
|
}
|
|
73
|
-
getTargetNodes(
|
|
72
|
+
getTargetNodes(t) {
|
|
74
73
|
if (!n || !r)
|
|
75
|
-
return [
|
|
76
|
-
const
|
|
77
|
-
return
|
|
74
|
+
return [t];
|
|
75
|
+
const e = t.closest(r);
|
|
76
|
+
return e ? e.querySelectorAll(`[esd-extension-block-id="${n}"]`) : [];
|
|
78
77
|
}
|
|
79
78
|
};
|
|
80
79
|
}
|
|
81
|
-
function
|
|
82
|
-
return class extends
|
|
80
|
+
function h(o, n, r) {
|
|
81
|
+
return class extends a {
|
|
83
82
|
getId() {
|
|
84
83
|
return o;
|
|
85
84
|
}
|
|
86
|
-
getTargetNodes(
|
|
85
|
+
getTargetNodes(t) {
|
|
87
86
|
if (!n || !r)
|
|
88
|
-
return [
|
|
89
|
-
const
|
|
90
|
-
return
|
|
87
|
+
return [t];
|
|
88
|
+
const e = t.closest(r);
|
|
89
|
+
return e ? e.querySelectorAll(`[esd-extension-block-id="${n}"]`) : [];
|
|
91
90
|
}
|
|
92
91
|
};
|
|
93
92
|
}
|
|
94
|
-
function
|
|
95
|
-
return class extends
|
|
93
|
+
function L(o, n, r) {
|
|
94
|
+
return class extends q {
|
|
96
95
|
getId() {
|
|
97
96
|
return o;
|
|
98
97
|
}
|
|
99
|
-
getTargetNodes(
|
|
100
|
-
return [
|
|
98
|
+
getTargetNodes(t) {
|
|
99
|
+
return [t];
|
|
101
100
|
}
|
|
102
101
|
};
|
|
103
102
|
}
|
|
104
|
-
function
|
|
105
|
-
return class extends
|
|
103
|
+
function R(o, n, r = ".ins-recommendation-product-container") {
|
|
104
|
+
return class extends C {
|
|
106
105
|
getId() {
|
|
107
106
|
return o;
|
|
108
107
|
}
|
|
109
|
-
getTargetNodes(
|
|
110
|
-
const
|
|
111
|
-
return
|
|
108
|
+
getTargetNodes(t) {
|
|
109
|
+
const e = t.closest(r);
|
|
110
|
+
return e ? e.querySelectorAll(`[esd-extension-block-id="${n}"]`) : [];
|
|
112
111
|
}
|
|
113
112
|
};
|
|
114
113
|
}
|
|
115
|
-
function
|
|
116
|
-
return class extends
|
|
114
|
+
function j(o, n, r = ".ins-recommendation-product-container") {
|
|
115
|
+
return class extends T {
|
|
117
116
|
getId() {
|
|
118
117
|
return o;
|
|
119
118
|
}
|
|
120
|
-
getTargetNodes(
|
|
121
|
-
const
|
|
122
|
-
return
|
|
119
|
+
getTargetNodes(t) {
|
|
120
|
+
const e = t.closest(r);
|
|
121
|
+
return e ? e.querySelectorAll(`[esd-extension-block-id="${n}"]`) : [];
|
|
123
122
|
}
|
|
124
123
|
};
|
|
125
124
|
}
|
|
126
|
-
function
|
|
127
|
-
return class extends
|
|
125
|
+
function v(o, n, r = ".ins-recommendation-product-container") {
|
|
126
|
+
return class extends f {
|
|
128
127
|
getId() {
|
|
129
128
|
return o;
|
|
130
129
|
}
|
|
131
|
-
getTargetNodes(
|
|
132
|
-
const
|
|
133
|
-
return
|
|
130
|
+
getTargetNodes(t) {
|
|
131
|
+
const e = t.closest(r);
|
|
132
|
+
return e ? e.querySelectorAll(`[esd-extension-block-id="${n}"]`) : [];
|
|
134
133
|
}
|
|
135
134
|
};
|
|
136
135
|
}
|
|
137
|
-
function
|
|
138
|
-
return class extends
|
|
136
|
+
function w(o, n, r = ".ins-recommendation-product-container") {
|
|
137
|
+
return class extends B {
|
|
139
138
|
getId() {
|
|
140
139
|
return o;
|
|
141
140
|
}
|
|
142
|
-
getTargetNodes(
|
|
143
|
-
const
|
|
144
|
-
return
|
|
141
|
+
getTargetNodes(t) {
|
|
142
|
+
const e = t.closest(r);
|
|
143
|
+
return e ? e.querySelectorAll(`[esd-extension-block-id="${n}"]`) : [];
|
|
145
144
|
}
|
|
146
145
|
};
|
|
147
146
|
}
|
|
148
|
-
function
|
|
149
|
-
return class extends
|
|
147
|
+
function D(o, n, r = ".ins-recommendation-product-container") {
|
|
148
|
+
return class extends I {
|
|
150
149
|
getId() {
|
|
151
150
|
return o;
|
|
152
151
|
}
|
|
153
|
-
getTargetNodes(
|
|
154
|
-
const
|
|
155
|
-
return
|
|
152
|
+
getTargetNodes(t) {
|
|
153
|
+
const e = t.closest(r);
|
|
154
|
+
return e ? e.querySelectorAll(`[esd-extension-block-id="${n}"]`) : [];
|
|
156
155
|
}
|
|
157
156
|
};
|
|
158
157
|
}
|
|
159
|
-
function
|
|
160
|
-
return class extends
|
|
158
|
+
function E(o, n, r = ".ins-recommendation-product-container") {
|
|
159
|
+
return class extends y {
|
|
161
160
|
getId() {
|
|
162
161
|
return o;
|
|
163
162
|
}
|
|
164
|
-
getTargetNodes(
|
|
165
|
-
const
|
|
166
|
-
return
|
|
163
|
+
getTargetNodes(t) {
|
|
164
|
+
const e = t.closest(r);
|
|
165
|
+
return e ? e.querySelectorAll(`[esd-extension-block-id="${n}"]`) : [];
|
|
167
166
|
}
|
|
168
167
|
};
|
|
169
168
|
}
|
|
170
|
-
function
|
|
171
|
-
return class extends
|
|
169
|
+
function G(o, n, r = ".ins-recommendation-product-container") {
|
|
170
|
+
return class extends m {
|
|
172
171
|
getId() {
|
|
173
172
|
return o;
|
|
174
173
|
}
|
|
175
|
-
getTargetNodes(
|
|
176
|
-
const
|
|
177
|
-
return
|
|
174
|
+
getTargetNodes(t) {
|
|
175
|
+
const e = t.closest(r);
|
|
176
|
+
return e ? e.querySelectorAll(`[esd-extension-block-id="${n}"]`) : [];
|
|
178
177
|
}
|
|
179
178
|
};
|
|
180
179
|
}
|
|
181
|
-
function
|
|
182
|
-
return class extends
|
|
180
|
+
function H(o, n, r = ".ins-recommendation-product-container") {
|
|
181
|
+
return class extends A {
|
|
183
182
|
getId() {
|
|
184
183
|
return o;
|
|
185
184
|
}
|
|
186
|
-
getTargetNodes(
|
|
187
|
-
const
|
|
188
|
-
return
|
|
185
|
+
getTargetNodes(t) {
|
|
186
|
+
const e = t.closest(r);
|
|
187
|
+
return e ? e.querySelectorAll(`[esd-extension-block-id="${n}"]`) : [];
|
|
189
188
|
}
|
|
190
189
|
};
|
|
191
190
|
}
|
|
192
|
-
function
|
|
193
|
-
return class extends
|
|
191
|
+
function J(o, n, r = ".ins-recommendation-product-container") {
|
|
192
|
+
return class extends S {
|
|
194
193
|
getId() {
|
|
195
194
|
return o;
|
|
196
195
|
}
|
|
197
|
-
getTargetNodes(
|
|
198
|
-
const
|
|
199
|
-
return
|
|
196
|
+
getTargetNodes(t) {
|
|
197
|
+
const e = t.closest(r);
|
|
198
|
+
return e ? e.querySelectorAll(`[esd-extension-block-id="${n}"]`) : [];
|
|
200
199
|
}
|
|
201
200
|
};
|
|
202
201
|
}
|
|
203
|
-
function
|
|
204
|
-
return class extends
|
|
202
|
+
function K(o, n, r) {
|
|
203
|
+
return class extends N {
|
|
205
204
|
getId() {
|
|
206
205
|
return o;
|
|
207
206
|
}
|
|
208
|
-
getTargetNodes(
|
|
209
|
-
const
|
|
210
|
-
return
|
|
211
|
-
}
|
|
212
|
-
/**
|
|
213
|
-
* Propagates Bold/Italic to ALL product buttons, not just the focused one.
|
|
214
|
-
*
|
|
215
|
-
* Stripo's built-in applies font-color/size to every target node but writes
|
|
216
|
-
* the text-style (font-weight/font-style) only to the selected button. Bold/italic
|
|
217
|
-
* are plain inline CSS on the `<a class="es-button">` (no tags), so we mirror them
|
|
218
|
-
* onto every button's anchor. The toggle state comes from the control's form
|
|
219
|
-
* (`buttonTextStyleForm.{bold,italic}`) because the patched node isn't updated yet
|
|
220
|
-
* when this runs. Returned modifications are merged into the parent control's patch.
|
|
221
|
-
*/
|
|
222
|
-
getAdditionalModifications(e) {
|
|
223
|
-
const t = e.closest(r);
|
|
224
|
-
if (!t)
|
|
225
|
-
return;
|
|
226
|
-
const i = t.querySelectorAll(`[esd-extension-block-id="${n}"] a.es-button`);
|
|
227
|
-
if (!i.length)
|
|
228
|
-
return;
|
|
229
|
-
const s = this.api.getValues()[z];
|
|
230
|
-
if (!s)
|
|
231
|
-
return;
|
|
232
|
-
const u = s.bold ? "bold" : "normal", c = s.italic ? "italic" : "normal", l = this.api.getDocumentModifier();
|
|
233
|
-
return i.forEach((d) => {
|
|
234
|
-
l.modifyHtml(d).setStyle("font-weight", u).setStyle("font-style", c);
|
|
235
|
-
}), l;
|
|
207
|
+
getTargetNodes(t) {
|
|
208
|
+
const e = t.closest(r);
|
|
209
|
+
return e ? e.querySelectorAll(`[esd-extension-block-id="${n}"]`) : [];
|
|
236
210
|
}
|
|
237
211
|
};
|
|
238
212
|
}
|
|
239
|
-
function
|
|
240
|
-
return class extends
|
|
213
|
+
function O(o, n, r) {
|
|
214
|
+
return class extends b {
|
|
241
215
|
getId() {
|
|
242
216
|
return o;
|
|
243
217
|
}
|
|
244
|
-
getTargetNodes(
|
|
245
|
-
const
|
|
246
|
-
return
|
|
218
|
+
getTargetNodes(t) {
|
|
219
|
+
const e = t.closest(r);
|
|
220
|
+
return e ? e.querySelectorAll(`[esd-extension-block-id="${n}"]`) : [];
|
|
247
221
|
}
|
|
248
222
|
};
|
|
249
223
|
}
|
|
250
|
-
function
|
|
251
|
-
return class extends
|
|
224
|
+
function Q(o, n, r) {
|
|
225
|
+
return class extends g {
|
|
252
226
|
getId() {
|
|
253
227
|
return o;
|
|
254
228
|
}
|
|
255
|
-
getTargetNodes(
|
|
229
|
+
getTargetNodes(t) {
|
|
256
230
|
try {
|
|
257
|
-
const
|
|
258
|
-
return
|
|
231
|
+
const e = t.closest(r);
|
|
232
|
+
return e ? e.querySelectorAll(`[esd-extension-block-id="${n}"]`) : [];
|
|
259
233
|
} catch {
|
|
260
234
|
return [];
|
|
261
235
|
}
|
|
262
236
|
}
|
|
263
237
|
};
|
|
264
238
|
}
|
|
265
|
-
function
|
|
266
|
-
return class extends
|
|
239
|
+
function U(o, n, r) {
|
|
240
|
+
return class extends x {
|
|
267
241
|
getId() {
|
|
268
242
|
return o;
|
|
269
243
|
}
|
|
270
|
-
getTargetNodes(
|
|
244
|
+
getTargetNodes(t) {
|
|
271
245
|
try {
|
|
272
|
-
const
|
|
273
|
-
return
|
|
246
|
+
const e = t.closest(r);
|
|
247
|
+
return e ? e.querySelectorAll(`[esd-extension-block-id="${n}"]`) : [];
|
|
274
248
|
} catch {
|
|
275
249
|
return [];
|
|
276
250
|
}
|
|
@@ -278,25 +252,25 @@ function tt(o, n, r) {
|
|
|
278
252
|
};
|
|
279
253
|
}
|
|
280
254
|
export {
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
255
|
+
R as createButtonAlignControl,
|
|
256
|
+
v as createButtonBorderControl,
|
|
257
|
+
w as createButtonBorderRadiusControl,
|
|
258
|
+
j as createButtonColorControl,
|
|
259
|
+
O as createButtonFitToContainerControl,
|
|
260
|
+
D as createButtonFontFamilyControl,
|
|
261
|
+
E as createButtonMarginsControl,
|
|
262
|
+
G as createButtonPaddingsControl,
|
|
263
|
+
H as createButtonTextControl,
|
|
264
|
+
J as createButtonTextSizeControl,
|
|
265
|
+
K as createButtonTextStyleAndFontColorControl,
|
|
266
|
+
U as createImageMarginsControl,
|
|
267
|
+
Q as createImageSizeControl,
|
|
268
|
+
h as createPaddingsControl,
|
|
269
|
+
k as createTextAlignControl,
|
|
270
|
+
P as createTextBackgroundColorControl,
|
|
271
|
+
p as createTextColorControl,
|
|
272
|
+
M as createTextFontFamilyControl,
|
|
273
|
+
L as createTextLineSpacingControl,
|
|
274
|
+
F as createTextSizeControl,
|
|
275
|
+
z as createTextStyleControl
|
|
302
276
|
};
|
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-64c52560]{gap:8px}.version-history__toolbar[data-v-64c52560]{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-82128f7d]{gap:4px}.header-wrapper[data-v-5c02dcc7]{min-width:1000px}.guido-loading__wrapper[data-v-07c4b2d8]{height:100%;top:75px!important;bottom:0!important}.guido-editor__wrapper[data-v-50dac6de]{--ribbon-offset: 0px;position:relative;width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__container[data-v-50dac6de]{width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__no-header[data-v-50dac6de]{height:calc(100vh - 75px - var(--ribbon-offset))}[data-v-293f1c47] .in-breadcrumb-wrapper__links{cursor:pointer}.templates-wrapper[data-v-
|
|
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-64c52560]{gap:8px}.version-history__toolbar[data-v-64c52560]{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-82128f7d]{gap:4px}.header-wrapper[data-v-5c02dcc7]{min-width:1000px}.guido-loading__wrapper[data-v-07c4b2d8]{height:100%;top:75px!important;bottom:0!important}.guido-editor__wrapper[data-v-50dac6de]{--ribbon-offset: 0px;position:relative;width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__container[data-v-50dac6de]{width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__no-header[data-v-50dac6de]{height:calc(100vh - 75px - var(--ribbon-offset))}[data-v-293f1c47] .in-breadcrumb-wrapper__links{cursor:pointer}.templates-wrapper[data-v-669fe7cf]{gap:16px;grid-template-columns:repeat(3,1fr)}.templates-wrapper .template-wrapper[data-v-669fe7cf]{cursor:pointer}.templates-wrapper .template-wrapper .template-container[data-v-669fe7cf]{height:274px;padding:2px;transition:none}.templates-wrapper .template-wrapper .template-container.selected[data-v-669fe7cf]{padding:1px}.templates-wrapper .template-wrapper .template-container .thumbnail[data-v-669fe7cf]{object-fit:cover;transform:scale(1)}[data-v-7a305bb2] .guido__verion-history-view-option-selection-desktop svg,[data-v-7a305bb2] .guido__verion-history-view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-7a305bb2] .in-segments-wrapper__button_selected,[data-v-7a305bb2] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}.error-list[data-v-c3fd5d4b]{gap:16px}.desktop-browser-header[data-v-d86c5af5]{height:79px;min-height:79px}.desktop-browser-header__left[data-v-d86c5af5]{-webkit-user-drag:none;height:79px;width:378px}.desktop-browser-header__center[data-v-d86c5af5]{height:79px;background-repeat:repeat-x;background-size:auto 100%;background-position:left top}.desktop-browser-header__right[data-v-d86c5af5]{-webkit-user-drag:none;height:79px;width:112px}.desktop-preview[data-v-06afaecb]{min-width:602px;height:70vh;min-height:583px;border-radius:10px}.desktop-preview iframe[data-v-06afaecb]{min-height:504px}.iframe-wrapper[data-v-cbafc185]{width:258px}.iframe-scaled[data-v-cbafc185]{width:320px;height:124.0310077519%;transform:scale(.80625);transform-origin:top left}.cropped-text[data-v-eb3d05d7]{width:220px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mobile-preview-wrapper__phone[data-v-3f472f96]{width:282px}.mobile-preview-wrapper__phone img[data-v-3f472f96]{object-fit:cover;border-radius:44px}.mobile-preview-wrapper__content[data-v-3f472f96]{width:258px;height:450px;left:12px}[data-v-7419ae06] .vueperslides__bullets,[data-v-796d193b] .vueperslides__bullets{pointer-events:none!important}[data-v-796d193b] .vueperslides__parallax-wrapper{height:110px!important}[data-v-cadfc82d] .vueperslides__bullets{pointer-events:none!important}[data-v-cadfc82d] .vueperslides__parallax-wrapper{height:110px!important}
|
|
@@ -120,11 +120,11 @@ export declare const ButtonControls: {
|
|
|
120
120
|
new (): {
|
|
121
121
|
getId(): string;
|
|
122
122
|
getTargetNodes(root: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode[];
|
|
123
|
-
getAdditionalModifications(root: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): import("@stripoinc/ui-editor-extensions").TemplateModifier<import("@stripoinc/ui-editor-extensions").HtmlNodeModifier, import("@stripoinc/ui-editor-extensions").CssNodeModifier> | undefined;
|
|
124
123
|
getParentControlId(): string;
|
|
125
124
|
getLabels(): import("@stripoinc/ui-editor-extensions").ButtonTextStyleAndFontColorControlLabels | undefined;
|
|
126
125
|
api: import("@stripoinc/ui-editor-extensions").ControlApi;
|
|
127
126
|
getModificationDescription(): import("@stripoinc/ui-editor-extensions").ModificationDescription | undefined;
|
|
127
|
+
getAdditionalModifications(_root: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): import("@stripoinc/ui-editor-extensions").TemplateModifier<import("@stripoinc/ui-editor-extensions").HtmlNodeModifier, import("@stripoinc/ui-editor-extensions").CssNodeModifier> | undefined;
|
|
128
128
|
isVisible(_node: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): boolean;
|
|
129
129
|
};
|
|
130
130
|
};
|
|
@@ -8,6 +8,6 @@
|
|
|
8
8
|
*/
|
|
9
9
|
export { RecommendationBlockId } from './blockIds';
|
|
10
10
|
export { RecommendationControlId } from './controlIds';
|
|
11
|
-
export { BLOCK_ROOT_SELECTOR, CONTAINER_SELECTOR, DESKTOP_CONTAINER_SELECTOR, MOBILE_CONTAINER_SELECTOR, MOBILE_ROW_SELECTOR, CSS_CLASS_RECO_BUTTON, CURRENCY_ATTR, ATTR_PRODUCT_IMAGE, ATTR_PRODUCT_NAME, ATTR_PRODUCT_PRICE, ATTR_PRODUCT_OLD_PRICE, ATTR_PRODUCT_OMNIBUS_PRICE, ATTR_PRODUCT_OMNIBUS_DISCOUNT, ATTR_PRODUCT_BUTTON, ATTR_CUSTOM_PREFIX, ATTR_DATA_CUSTOM_ATTRIBUTES, ATTR_PRODUCT_ATTR,
|
|
11
|
+
export { BLOCK_ROOT_SELECTOR, CONTAINER_SELECTOR, DESKTOP_CONTAINER_SELECTOR, MOBILE_CONTAINER_SELECTOR, MOBILE_ROW_SELECTOR, CSS_CLASS_RECO_BUTTON, CURRENCY_ATTR, ATTR_PRODUCT_IMAGE, ATTR_PRODUCT_NAME, ATTR_PRODUCT_PRICE, ATTR_PRODUCT_OLD_PRICE, ATTR_PRODUCT_OMNIBUS_PRICE, ATTR_PRODUCT_OMNIBUS_DISCOUNT, ATTR_PRODUCT_BUTTON, ATTR_CUSTOM_PREFIX, ATTR_DATA_CUSTOM_ATTRIBUTES, ATTR_PRODUCT_ATTR, BUILT_IN_DEFAULT_ATTRIBUTES, } from './selectors';
|
|
12
12
|
export { LAYOUT_VALUES, LAYOUT_OPTIONS, DEFAULT_PRODUCTS_PER_ROW, DEFAULT_CARDS_IN_ROW, DEFAULT_MOBILE_CARDS_IN_ROW, MAX_PRODUCT_COUNT, MIN_PRODUCT_COUNT, MAX_PRODUCTS_PER_ROW, MIN_PRODUCTS_PER_ROW, MAX_MOBILE_PRODUCTS_PER_ROW, MIN_MOBILE_PRODUCTS_PER_ROW, DEFAULT_COLUMN_SPACING, DEFAULT_ROW_SPACING, DEFAULT_MOBILE_COLUMN_SPACING, DEFAULT_MOBILE_ROW_SPACING, MIN_SPACING, MAX_SPACING, SPACING_STEP, } from './layout';
|
|
13
13
|
export { DEFAULT_NODE_CONFIG, DEFAULT_CURRENCY, DEFAULT_COMPOSITION, DEFAULT_VISIBILITY, CURRENT_CONFIG_VERSION, EXCLUDED_ALGORITHM_IDS, } from './defaultConfig';
|
|
@@ -56,8 +56,6 @@ export declare const ATTR_CUSTOM_PREFIX = "customAttr:";
|
|
|
56
56
|
export declare const ATTR_DATA_CUSTOM_ATTRIBUTES = "data-custom-attributes";
|
|
57
57
|
/** HTML attribute on <td> elements identifying the product attribute for compiler template variable generation */
|
|
58
58
|
export declare const ATTR_PRODUCT_ATTR = "product-attr";
|
|
59
|
-
/** Prefix `resolveProductAttrValue` puts on custom (non-default) product attributes in `product-attr` values */
|
|
60
|
-
export declare const PRODUCT_ATTRIBUTE_PREFIX = "product_attribute.";
|
|
61
59
|
/**
|
|
62
60
|
* Default attribute names that are already represented by built-in composition toggle items.
|
|
63
61
|
* Used to exclude these from the custom attribute dropdown to prevent duplication with toggles.
|
|
@@ -120,11 +120,11 @@ export declare const ButtonControls: {
|
|
|
120
120
|
new (): {
|
|
121
121
|
getId(): string;
|
|
122
122
|
getTargetNodes(root: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode[];
|
|
123
|
-
getAdditionalModifications(root: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): import("@stripoinc/ui-editor-extensions").TemplateModifier<import("@stripoinc/ui-editor-extensions").HtmlNodeModifier, import("@stripoinc/ui-editor-extensions").CssNodeModifier> | undefined;
|
|
124
123
|
getParentControlId(): string;
|
|
125
124
|
getLabels(): import("@stripoinc/ui-editor-extensions").ButtonTextStyleAndFontColorControlLabels | undefined;
|
|
126
125
|
api: import("@stripoinc/ui-editor-extensions").ControlApi;
|
|
127
126
|
getModificationDescription(): import("@stripoinc/ui-editor-extensions").ModificationDescription | undefined;
|
|
127
|
+
getAdditionalModifications(_root: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): import("@stripoinc/ui-editor-extensions").TemplateModifier<import("@stripoinc/ui-editor-extensions").HtmlNodeModifier, import("@stripoinc/ui-editor-extensions").CssNodeModifier> | undefined;
|
|
128
128
|
isVisible(_node: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): boolean;
|
|
129
129
|
};
|
|
130
130
|
};
|
|
@@ -31,8 +31,7 @@ export declare class LayoutOrientationControl extends CommonControl {
|
|
|
31
31
|
* Regenerates product rows based on the selected layout
|
|
32
32
|
* Uses unified style-preserving regeneration to maintain user customizations
|
|
33
33
|
* @param layout - The layout to use for regeneration (passed explicitly to avoid stale DOM reads)
|
|
34
|
-
* @param composition - The preserved card composition, incl. customAttr:* entries
|
|
35
34
|
*/
|
|
36
|
-
_regenerateProductRows(layout: Orientation
|
|
35
|
+
_regenerateProductRows(layout: Orientation): void;
|
|
37
36
|
_listenToFormUpdates(): void;
|
|
38
37
|
}
|
|
@@ -60,17 +60,39 @@ export interface RegenerateProductRowsOptions {
|
|
|
60
60
|
composition?: string[];
|
|
61
61
|
}
|
|
62
62
|
/**
|
|
63
|
-
* Regenerates only the mobile product container rows
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
* apply-free accumulateMobileProductRows() so the whole rebuild is one commit.
|
|
63
|
+
* Regenerates only the mobile product container rows.
|
|
64
|
+
* Used when mobile-specific settings change (mobileCardsInRow)
|
|
65
|
+
* or when the desktop container is regenerated (to keep both in sync).
|
|
67
66
|
*
|
|
68
|
-
* For list layout
|
|
69
|
-
* For grid layout with mobileLayoutEnabled
|
|
67
|
+
* For list layout: clears the mobile row content (list rows are inherently responsive).
|
|
68
|
+
* For grid layout with mobileLayoutEnabled OFF: clears the mobile row content.
|
|
69
|
+
* For grid layout with mobileLayoutEnabled ON: rebuilds the full mobile row
|
|
70
|
+
* structure (<td><table>...products...</table></td>) in a single operation.
|
|
70
71
|
*/
|
|
71
72
|
export declare function regenerateMobileProductRows(options: Omit<RegenerateProductRowsOptions, 'afterRegenerate'>): void;
|
|
73
|
+
/**
|
|
74
|
+
* Regenerates product rows in the desktop container based on current store configuration.
|
|
75
|
+
* Also regenerates the mobile container to keep both in sync.
|
|
76
|
+
* Reads products, layout, and composition from store/DOM and rebuilds the HTML.
|
|
77
|
+
* @param options - Configuration options for regeneration
|
|
78
|
+
*/
|
|
79
|
+
export declare function regenerateProductRows(options: RegenerateProductRowsOptions): void;
|
|
80
|
+
export interface ReapplySpacingOptions {
|
|
81
|
+
currentNode: ImmutableHtmlNode | null | undefined;
|
|
82
|
+
documentModifier: DocumentModifier;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Reapplies spacing values after product regeneration.
|
|
86
|
+
* Desktop spacing applies only to the desktop container;
|
|
87
|
+
* mobile spacing applies only to the mobile container.
|
|
88
|
+
*
|
|
89
|
+
* Reads values from node config (primary) with data-attribute fallback
|
|
90
|
+
* for backward compatibility with pre-nodeConfig templates.
|
|
91
|
+
* @param options - Configuration options
|
|
92
|
+
*/
|
|
93
|
+
export declare function reapplySpacing(options: ReapplySpacingOptions): void;
|
|
72
94
|
export interface RegenerateWithStylesOptions extends Omit<RegenerateProductRowsOptions, 'products' | 'layout'> {
|
|
73
|
-
/** Skip style capture if styles were already handled externally */
|
|
95
|
+
/** Skip style capture/restore if styles were already handled externally */
|
|
74
96
|
skipStylePreservation?: boolean;
|
|
75
97
|
/** Optional: pass products directly instead of reading from store */
|
|
76
98
|
products?: RecommendationProduct[];
|
|
@@ -78,21 +100,26 @@ export interface RegenerateWithStylesOptions extends Omit<RegenerateProductRowsO
|
|
|
78
100
|
layout?: Orientation;
|
|
79
101
|
}
|
|
80
102
|
/**
|
|
81
|
-
* Regenerates product rows while preserving user-applied styles
|
|
103
|
+
* Regenerates product rows while preserving user-applied styles
|
|
104
|
+
*
|
|
105
|
+
* This unified function handles the complete regeneration flow:
|
|
106
|
+
* 1. Captures existing styles (fonts, colors, button styles, etc.)
|
|
107
|
+
* 2. Regenerates HTML with new products/layout
|
|
108
|
+
* 3. Restores captured styles to new elements
|
|
109
|
+
* 4. Reapplies spacing from data attributes
|
|
82
110
|
*
|
|
83
|
-
*
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
-
* baked straight into the generated HTML.
|
|
88
|
-
* 3. Commit everything with ONE apply().
|
|
111
|
+
* NOTE: Style restoration is temporarily disabled due to Stripo selection bug.
|
|
112
|
+
* Multiple apply() calls (setInnerHtml + restoreStyles + reapplySpacing) cause
|
|
113
|
+
* Stripo's internal cursor/selection tracking to lose node references, resulting in
|
|
114
|
+
* "Cannot read properties of undefined (reading 'textContent')" errors.
|
|
89
115
|
*
|
|
90
|
-
*
|
|
91
|
-
*
|
|
92
|
-
*
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
*
|
|
116
|
+
* Use this instead of `regenerateProductRows` when styles must be preserved.
|
|
117
|
+
* @example
|
|
118
|
+
* // When products change (API response, count change, layout change)
|
|
119
|
+
* regenerateProductRowsWithStyles({
|
|
120
|
+
* currentNode: this.currentNode,
|
|
121
|
+
* documentModifier: this.api.getDocumentModifier(),
|
|
122
|
+
* });
|
|
96
123
|
* @param options - Configuration options for regeneration
|
|
97
124
|
*/
|
|
98
125
|
export declare function regenerateProductRowsWithStyles(options: RegenerateWithStylesOptions): void;
|