@useinsider/guido 3.6.0-beta.596b70e → 3.6.0-beta.5cbaa8f

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/dist/extensions/Blocks/Recommendation/controls/main/index.js +12 -10
  2. package/dist/extensions/Blocks/Recommendation/controls/main/layoutOrientation.js +32 -24
  3. package/dist/extensions/Blocks/Recommendation/controls/main/productLayout.js +40 -34
  4. package/dist/extensions/Blocks/Recommendation/controls/main/utils.js +338 -310
  5. package/dist/extensions/Blocks/Recommendation/extension.js +5 -6
  6. package/dist/extensions/Blocks/Recommendation/settingsPanel.js +2 -3
  7. package/dist/extensions/Blocks/Recommendation/templates/grid/elementRenderer.js +146 -117
  8. package/dist/extensions/Blocks/Recommendation/templates/grid/template.js +30 -49
  9. package/dist/extensions/Blocks/Recommendation/templates/index.js +8 -9
  10. package/dist/extensions/Blocks/Recommendation/templates/list/elementRenderer.js +83 -110
  11. package/dist/extensions/Blocks/Recommendation/templates/list/template.js +21 -31
  12. package/dist/extensions/Blocks/Recommendation/templates/utils.js +54 -90
  13. package/dist/extensions/Blocks/Recommendation/utils/preserveTextStyles.js +19 -24
  14. package/dist/extensions/Blocks/Recommendation/utils/tagName.js +16 -20
  15. package/dist/extensions/Blocks/Unsubscribe/block.js +122 -72
  16. package/dist/extensions/Blocks/controlFactories.js +133 -159
  17. package/dist/src/extensions/Blocks/Items/controls/index.d.ts +1 -1
  18. package/dist/src/extensions/Blocks/Recommendation/controls/button/index.d.ts +1 -1
  19. package/dist/src/extensions/Blocks/Recommendation/controls/main/utils.d.ts +47 -20
  20. package/dist/src/extensions/Blocks/Recommendation/templates/grid/template.d.ts +4 -4
  21. package/dist/src/extensions/Blocks/Recommendation/templates/index.d.ts +1 -1
  22. package/dist/src/extensions/Blocks/Recommendation/templates/list/template.d.ts +2 -3
  23. package/dist/src/extensions/Blocks/Recommendation/templates/utils.d.ts +11 -127
  24. package/dist/src/extensions/Blocks/Recommendation/utils/preserveTextStyles.d.ts +0 -15
  25. package/dist/src/extensions/Blocks/Recommendation/utils/stylePreserver.d.ts +113 -0
  26. package/dist/src/extensions/Blocks/Recommendation/utils/tagName.d.ts +9 -20
  27. package/dist/src/extensions/Blocks/Unsubscribe/block.d.ts +9 -0
  28. package/dist/src/extensions/Blocks/controlFactories.d.ts +1 -11
  29. package/package.json +1 -1
  30. package/dist/extensions/Blocks/Recommendation/utils/captureStyleTemplates.js +0 -139
  31. package/dist/src/extensions/Blocks/Recommendation/templates/grid/elementRenderer.test.d.ts +0 -1
  32. package/dist/src/extensions/Blocks/Recommendation/templates/list/elementRenderer.test.d.ts +0 -1
  33. package/dist/src/extensions/Blocks/Recommendation/templates/utils.test.d.ts +0 -1
  34. package/dist/src/extensions/Blocks/Recommendation/utils/captureStyleTemplates.d.ts +0 -44
  35. package/dist/src/extensions/Blocks/Recommendation/utils/captureStyleTemplates.test.d.ts +0 -1
  36. package/dist/src/extensions/Blocks/Recommendation/utils/preserveTextStyles.test.d.ts +0 -1
@@ -1,276 +1,250 @@
1
- import { TextAlignBuiltInControl as a, TextColorBuiltInControl as g, TextSizeBuiltInControl as x, TextStyleBuiltInControl as f, TextFontFamilyBuiltInControl as C, ButtonBackgroundColorBuiltInControl as T, TextPaddingsBuiltInControl as B, ImageSizeBuiltInControl as I, ImageMarginsBuiltInControl as y, ButtonAlignBuiltInControl as m, ButtonBorderBuiltInControl as S, ButtonBorderRadiusBuiltInControl as A, ButtonColorBuiltInControl as b, ButtonFontFamilyBuiltInControl as N, ButtonMarginsBuiltInControl as q, ButtonPaddingsBuiltInControl as $, ButtonTextBuiltInControl as k, ButtonTextSizeBuiltInControl as p, ButtonTextStyleAndFontColorBuiltInControl as F, ButtonFitToContainerBuiltInControl as h, TextLineSpacingBuiltInControl as M } from "../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
2
- const z = "buttonTextStyleForm";
3
- function P(o, n, r) {
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(e) {
7
+ getTargetNodes(t) {
9
8
  if (!n || !r)
10
- return [e];
11
- const t = e.closest(r);
12
- return t ? t.querySelectorAll(`[esd-extension-block-id="${n}"]`) : [];
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 _(o, n, r) {
17
- return class extends g {
15
+ function p(o, n, r) {
16
+ return class extends l {
18
17
  getId() {
19
18
  return o;
20
19
  }
21
- getTargetNodes(e) {
20
+ getTargetNodes(t) {
22
21
  if (!n || !r)
23
- return [e];
24
- const t = e.closest(r);
25
- return t ? t.querySelectorAll(`[esd-extension-block-id="${n}"]`) : [];
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 v(o, n, r) {
30
- return class extends x {
28
+ function F(o, n, r) {
29
+ return class extends u {
31
30
  getId() {
32
31
  return o;
33
32
  }
34
- getTargetNodes(e) {
33
+ getTargetNodes(t) {
35
34
  if (!n || !r)
36
- return [e];
37
- const t = e.closest(r);
38
- return t ? t.querySelectorAll(`[esd-extension-block-id="${n}"]`) : [];
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 L(o, n, r) {
43
- return class extends f {
41
+ function z(o, n, r) {
42
+ return class extends i {
44
43
  getId() {
45
44
  return o;
46
45
  }
47
- getTargetNodes(e) {
46
+ getTargetNodes(t) {
48
47
  if (!n || !r)
49
- return [e];
50
- const t = e.closest(r);
51
- return t ? t.querySelectorAll(`[esd-extension-block-id="${n}"]`) : [];
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 R(o, n, r) {
56
- return class extends C {
54
+ function M(o, n, r) {
55
+ return class extends c {
57
56
  getId() {
58
57
  return o;
59
58
  }
60
- getTargetNodes(e) {
59
+ getTargetNodes(t) {
61
60
  if (!n || !r)
62
- return [e];
63
- const t = e.closest(r);
64
- return t ? t.querySelectorAll(`[esd-extension-block-id="${n}"]`) : [];
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 O(o, n, r) {
69
- return class extends T {
67
+ function P(o, n, r) {
68
+ return class extends d {
70
69
  getId() {
71
70
  return o;
72
71
  }
73
- getTargetNodes(e) {
72
+ getTargetNodes(t) {
74
73
  if (!n || !r)
75
- return [e];
76
- const t = e.closest(r);
77
- return t ? t.querySelectorAll(`[esd-extension-block-id="${n}"]`) : [];
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 Y(o, n, r) {
82
- return class extends B {
80
+ function h(o, n, r) {
81
+ return class extends a {
83
82
  getId() {
84
83
  return o;
85
84
  }
86
- getTargetNodes(e) {
85
+ getTargetNodes(t) {
87
86
  if (!n || !r)
88
- return [e];
89
- const t = e.closest(r);
90
- return t ? t.querySelectorAll(`[esd-extension-block-id="${n}"]`) : [];
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 w(o, n, r) {
95
- return class extends M {
93
+ function L(o, n, r) {
94
+ return class extends q {
96
95
  getId() {
97
96
  return o;
98
97
  }
99
- getTargetNodes(e) {
100
- return [e];
98
+ getTargetNodes(t) {
99
+ return [t];
101
100
  }
102
101
  };
103
102
  }
104
- function D(o, n, r = ".ins-recommendation-product-container") {
105
- return class extends m {
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(e) {
110
- const t = e.closest(r);
111
- return t ? t.querySelectorAll(`[esd-extension-block-id="${n}"]`) : [];
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 H(o, n, r = ".ins-recommendation-product-container") {
116
- return class extends b {
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(e) {
121
- const t = e.closest(r);
122
- return t ? t.querySelectorAll(`[esd-extension-block-id="${n}"]`) : [];
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 K(o, n, r = ".ins-recommendation-product-container") {
127
- return class extends S {
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(e) {
132
- const t = e.closest(r);
133
- return t ? t.querySelectorAll(`[esd-extension-block-id="${n}"]`) : [];
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 U(o, n, r = ".ins-recommendation-product-container") {
138
- return class extends A {
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(e) {
143
- const t = e.closest(r);
144
- return t ? t.querySelectorAll(`[esd-extension-block-id="${n}"]`) : [];
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 V(o, n, r = ".ins-recommendation-product-container") {
149
- return class extends N {
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(e) {
154
- const t = e.closest(r);
155
- return t ? t.querySelectorAll(`[esd-extension-block-id="${n}"]`) : [];
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 W(o, n, r = ".ins-recommendation-product-container") {
160
- return class extends q {
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(e) {
165
- const t = e.closest(r);
166
- return t ? t.querySelectorAll(`[esd-extension-block-id="${n}"]`) : [];
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 X(o, n, r = ".ins-recommendation-product-container") {
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(e) {
176
- const t = e.closest(r);
177
- return t ? t.querySelectorAll(`[esd-extension-block-id="${n}"]`) : [];
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 j(o, n, r = ".ins-recommendation-product-container") {
182
- return class extends k {
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(e) {
187
- const t = e.closest(r);
188
- return t ? t.querySelectorAll(`[esd-extension-block-id="${n}"]`) : [];
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 G(o, n, r = ".ins-recommendation-product-container") {
193
- return class extends p {
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(e) {
198
- const t = e.closest(r);
199
- return t ? t.querySelectorAll(`[esd-extension-block-id="${n}"]`) : [];
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 J(o, n, r) {
204
- return class extends F {
202
+ function K(o, n, r) {
203
+ return class extends N {
205
204
  getId() {
206
205
  return o;
207
206
  }
208
- getTargetNodes(e) {
209
- const t = e.closest(r);
210
- return t ? t.querySelectorAll(`[esd-extension-block-id="${n}"]`) : [];
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 Q(o, n, r) {
240
- return class extends h {
213
+ function O(o, n, r) {
214
+ return class extends b {
241
215
  getId() {
242
216
  return o;
243
217
  }
244
- getTargetNodes(e) {
245
- const t = e.closest(r);
246
- return t ? t.querySelectorAll(`[esd-extension-block-id="${n}"]`) : [];
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 Z(o, n, r) {
251
- return class extends I {
224
+ function Q(o, n, r) {
225
+ return class extends g {
252
226
  getId() {
253
227
  return o;
254
228
  }
255
- getTargetNodes(e) {
229
+ getTargetNodes(t) {
256
230
  try {
257
- const t = e.closest(r);
258
- return t ? t.querySelectorAll(`[esd-extension-block-id="${n}"]`) : [];
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 tt(o, n, r) {
266
- return class extends y {
239
+ function U(o, n, r) {
240
+ return class extends x {
267
241
  getId() {
268
242
  return o;
269
243
  }
270
- getTargetNodes(e) {
244
+ getTargetNodes(t) {
271
245
  try {
272
- const t = e.closest(r);
273
- return t ? t.querySelectorAll(`[esd-extension-block-id="${n}"]`) : [];
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
- D as createButtonAlignControl,
282
- K as createButtonBorderControl,
283
- U as createButtonBorderRadiusControl,
284
- H as createButtonColorControl,
285
- Q as createButtonFitToContainerControl,
286
- V as createButtonFontFamilyControl,
287
- W as createButtonMarginsControl,
288
- X as createButtonPaddingsControl,
289
- j as createButtonTextControl,
290
- G as createButtonTextSizeControl,
291
- J as createButtonTextStyleAndFontColorControl,
292
- tt as createImageMarginsControl,
293
- Z as createImageSizeControl,
294
- Y as createPaddingsControl,
295
- P as createTextAlignControl,
296
- O as createTextBackgroundColorControl,
297
- _ as createTextColorControl,
298
- R as createTextFontFamilyControl,
299
- w as createTextLineSpacingControl,
300
- v as createTextSizeControl,
301
- L as createTextStyleControl
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
  };
@@ -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
  };
@@ -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
  };
@@ -60,17 +60,39 @@ export interface RegenerateProductRowsOptions {
60
60
  composition?: string[];
61
61
  }
62
62
  /**
63
- * Regenerates only the mobile product container rows and commits in a single apply().
64
- * Standalone entry point for callers that change mobile-only settings
65
- * (block.ts, productLayout.ts). The combined desktop+mobile regeneration uses the
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 / disabled mobile layout: clears the mobile row content.
69
- * For grid layout with mobileLayoutEnabled ON: rebuilds the full mobile row.
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, in a SINGLE commit.
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
- * Flow:
84
- * 1. Capture the current per-attribute style templates (tag wrappers + p-style) and
85
- * spacing read from the live DOM BEFORE it is replaced.
86
- * 2. Accumulate the desktop + mobile rebuilds, with spacing and the captured styles
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
- * Why one apply(): each apply() is a Stripo commit boundary that re-resolves the
91
- * editor's selection against node references. A setInnerHtml rebuild destroys the old
92
- * text nodes, so a second (or deferred) commit left the inline-format tracker pointing
93
- * at gone nodes — the "Cannot read properties of undefined (reading 'textContent')"
94
- * crash when toggling bold/italic/strike afterwards. Baking spacing + styles into the
95
- * HTML removes the need for any post-rebuild reapply pass.
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;
@@ -1,5 +1,5 @@
1
1
  import type { FiltersResponse, RecommendationProduct } from '@@/Types/recommendation';
2
- import { type ElementRenderer, type RenderOptions } from '../utils';
2
+ import { type ElementRenderer } from '../utils';
3
3
  /**
4
4
  * Generates attribute-aligned product rows for grid layout.
5
5
  * Creates rows where each row contains one attribute type from all products.
@@ -9,7 +9,7 @@ import { type ElementRenderer, type RenderOptions } from '../utils';
9
9
  * @param composition - Array defining order of card elements
10
10
  * @returns HTML string for attribute-aligned rows
11
11
  */
12
- export declare function prepareGridAttributeRows(products: RecommendationProduct[], productsPerRow: number, elementRenderer: ElementRenderer, composition?: string[], filterList?: FiltersResponse, renderOptions?: RenderOptions): string;
12
+ export declare function prepareGridAttributeRows(products: RecommendationProduct[], productsPerRow: number, elementRenderer: ElementRenderer, composition?: string[], filterList?: FiltersResponse): string;
13
13
  /**
14
14
  * Prepares grid product rows with attribute-aligned structure
15
15
  * Groups products into rows, then generates attribute-aligned HTML for each group
@@ -19,7 +19,7 @@ export declare function prepareGridAttributeRows(products: RecommendationProduct
19
19
  * @param composition - Array defining order of card elements
20
20
  * @returns HTML string for all product rows
21
21
  */
22
- export declare function prepareGridProductRows(products: RecommendationProduct[], productsPerRow: number, elementRenderer: ElementRenderer, composition?: string[], filterList?: FiltersResponse, renderOptions?: RenderOptions): string;
22
+ export declare function prepareGridProductRows(products: RecommendationProduct[], productsPerRow: number, elementRenderer: ElementRenderer, composition?: string[], filterList?: FiltersResponse): string;
23
23
  /**
24
24
  * Prepares grid product rows with attribute-aligned structure.
25
25
  * Uses row-based rendering where each attribute type forms a single row across all products.
@@ -28,6 +28,6 @@ export declare function prepareGridProductRows(products: RecommendationProduct[]
28
28
  * @param composition - Array defining element order
29
29
  * @returns HTML string for product rows
30
30
  */
31
- export declare function prepareProductRows(products: RecommendationProduct[], productsPerRow: number, composition?: string[], filterList?: FiltersResponse, renderOptions?: RenderOptions): string;
31
+ export declare function prepareProductRows(products: RecommendationProduct[], productsPerRow: number, composition?: string[], filterList?: FiltersResponse): string;
32
32
  export declare function getDefaultTemplate(recommendationId?: number): string;
33
33
  export declare function generateBlockTemplate(products: RecommendationProduct[], productsPerRow: number, title?: string, composition?: string[], mobileProductsPerRow?: number): string;
@@ -6,7 +6,7 @@
6
6
  */
7
7
  import type { RecommendationProduct } from '@@/Types/recommendation';
8
8
  import { type Orientation, type PrepareProductRowsOptions } from './utils';
9
- export { DEFAULTS, DEFAULT_CARD_COMPOSITION, DEFAULT_CARD_VISIBILITY, getDefaultProducts, spacer, sanitizeImageUrl, createBlockTemplate, type Orientation, type PrepareProductRowsOptions, type ElementRenderer, type ProductCardGetter, type AttributeStyleTemplate, type AttributeStyleTemplates, type CellBackgroundColors, } from './utils';
9
+ export { DEFAULTS, DEFAULT_CARD_COMPOSITION, DEFAULT_CARD_VISIBILITY, getDefaultProducts, spacer, sanitizeImageUrl, createBlockTemplate, type Orientation, type PrepareProductRowsOptions, type ElementRenderer, type ProductCardGetter, } from './utils';
10
10
  /**
11
11
  * Unified function to prepare product rows for any layout.
12
12
  * Delegates to the appropriate layout-specific implementation.
@@ -1,5 +1,4 @@
1
1
  import type { FiltersResponse, RecommendationProduct } from '@@/Types/recommendation';
2
- import { type RenderOptions } from '../utils';
3
2
  /**
4
3
  * Generates a list product card with 3-column layout
5
4
  * Uses buildElementRenderer to render Image, Info content, and Button
@@ -12,7 +11,7 @@ import { type RenderOptions } from '../utils';
12
11
  * @param composition - Array defining order of card elements
13
12
  * @returns HTML string for a single product card row
14
13
  */
15
- export declare function getListProductCard(product: RecommendationProduct, composition?: string[], filterList?: FiltersResponse, renderOptions?: RenderOptions): string;
14
+ export declare function getListProductCard(product: RecommendationProduct, composition?: string[], filterList?: FiltersResponse): string;
16
15
  /**
17
16
  * Prepares list product rows
18
17
  * Each product is a full-width row with 3-column layout
@@ -20,6 +19,6 @@ export declare function getListProductCard(product: RecommendationProduct, compo
20
19
  * @param composition - Array defining order of card elements
21
20
  * @returns HTML string for product rows
22
21
  */
23
- export declare function prepareProductRows(products: RecommendationProduct[], composition?: string[], filterList?: FiltersResponse, renderOptions?: RenderOptions): string;
22
+ export declare function prepareProductRows(products: RecommendationProduct[], composition?: string[], filterList?: FiltersResponse): string;
24
23
  export declare function getDefaultTemplate(): string;
25
24
  export declare function generateBlockTemplate(products: RecommendationProduct[], title?: string, composition?: string[]): string;