@useinsider/guido 3.22.0 → 3.23.0

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 (70) hide show
  1. package/README.md +35 -4
  2. package/dist/components/Guido.vue.js +1 -1
  3. package/dist/components/Guido.vue2.js +118 -108
  4. package/dist/components/organisms/unsubscribe/UnsubscribePageSelection.vue.js +11 -11
  5. package/dist/components/organisms/unsubscribe/UnsubscribePageSelection.vue2.js +9 -9
  6. package/dist/composables/useEditorOpenMetrics.js +167 -0
  7. package/dist/composables/useStripo.js +93 -82
  8. package/dist/config/compiler/utils/recommendationCompilerUtils.js +22 -22
  9. package/dist/config/migrator/recommendation/compositionMapper.js +56 -49
  10. package/dist/config/migrator/recommendation/extractors.js +100 -40
  11. package/dist/config/migrator/recommendation/htmlBuilder.js +285 -207
  12. package/dist/config/migrator/recommendation/settingsMapper.js +37 -36
  13. package/dist/config/migrator/recommendation/themeMapper.js +53 -41
  14. package/dist/config/migrator/recommendationMigrator.js +68 -61
  15. package/dist/extensions/Blocks/Items/controls/button/link.js +14 -17
  16. package/dist/extensions/Blocks/Items/controls/cardComposition.js +14 -17
  17. package/dist/extensions/Blocks/Items/controls/image/link.js +14 -17
  18. package/dist/extensions/Blocks/Items/controls/name/trimming.js +9 -10
  19. package/dist/extensions/Blocks/Items/controls/price/currencyLocation.js +24 -25
  20. package/dist/extensions/Blocks/Items/controls/price/currencySymbol.js +12 -13
  21. package/dist/extensions/Blocks/Items/controls/price/formattedPrice.js +29 -30
  22. package/dist/extensions/Blocks/Items/controls/price/hideDiscount.js +15 -16
  23. package/dist/extensions/Blocks/Items/controls/price/priceOrientation.js +25 -26
  24. package/dist/extensions/Blocks/Items/controls/price/singlePrice.js +27 -28
  25. package/dist/extensions/Blocks/Items/controls/settingsControl.js +75 -80
  26. package/dist/extensions/Blocks/Recommendation/block.js +33 -24
  27. package/dist/extensions/Blocks/Recommendation/controls/cardBackground/index.js +3 -3
  28. package/dist/extensions/Blocks/Recommendation/controls/cardComposition/index.js +27 -26
  29. package/dist/extensions/Blocks/Recommendation/controls/customAttribute/textTrim.js +13 -13
  30. package/dist/extensions/Blocks/Recommendation/controls/main/index.js +165 -175
  31. package/dist/extensions/Blocks/Recommendation/controls/name/textTrim.js +5 -5
  32. package/dist/extensions/Blocks/Recommendation/controls/omnibusDiscount/textAfter.js +8 -8
  33. package/dist/extensions/Blocks/Recommendation/controls/omnibusDiscount/textBefore.js +15 -15
  34. package/dist/extensions/Blocks/Recommendation/controls/omnibusPrice/textAfter.js +12 -12
  35. package/dist/extensions/Blocks/Recommendation/controls/omnibusPrice/textBefore.js +10 -10
  36. package/dist/extensions/Blocks/Recommendation/controls/spacing/index.js +1 -1
  37. package/dist/extensions/Blocks/Recommendation/templates/grid/template.js +23 -22
  38. package/dist/extensions/Blocks/Recommendation/templates/list/template.js +19 -18
  39. package/dist/extensions/Blocks/Recommendation/templates/utils.js +82 -91
  40. package/dist/extensions/Blocks/Recommendation/utils/inlinePriceOrder.js +12 -0
  41. package/dist/extensions/Blocks/Recommendation/utils/legacyStrategyMap.js +3 -2
  42. package/dist/extensions/Blocks/common-control.js +62 -55
  43. package/dist/guido.css +1 -1
  44. package/dist/library.js +12 -10
  45. package/dist/package.json.js +6 -4
  46. package/dist/public/prefetchRuntime.js +4 -0
  47. package/dist/src/composables/useEditorOpenMetrics.d.ts +27 -0
  48. package/dist/src/composables/useStripo.d.ts +2 -1
  49. package/dist/src/config/migrator/recommendation/compositionMapper.d.ts +3 -1
  50. package/dist/src/config/migrator/recommendation/extractors.d.ts +35 -6
  51. package/dist/src/config/migrator/recommendation/htmlBuilder.d.ts +3 -1
  52. package/dist/src/config/migrator/recommendation/themeMapper.d.ts +3 -1
  53. package/dist/src/config/migrator/recommendation/types.d.ts +11 -1
  54. package/dist/src/extensions/Blocks/Items/controls/cardComposition.d.ts +0 -1
  55. package/dist/src/extensions/Blocks/Recommendation/block.d.ts +1 -0
  56. package/dist/src/extensions/Blocks/Recommendation/controls/main/index.d.ts +5 -10
  57. package/dist/src/extensions/Blocks/Recommendation/templates/utils.d.ts +1 -13
  58. package/dist/src/extensions/Blocks/Recommendation/utils/inlinePriceOrder.d.ts +9 -0
  59. package/dist/src/extensions/Blocks/Recommendation/utils/legacyStrategyMap.d.ts +2 -19
  60. package/dist/src/extensions/Blocks/common-control.d.ts +2 -0
  61. package/dist/src/library.d.ts +1 -0
  62. package/dist/src/public/prefetchRuntime.d.ts +1 -0
  63. package/dist/src/stores/unsubscribe.d.ts +10 -0
  64. package/dist/src/utils/runtimePrefetch.d.ts +4 -0
  65. package/dist/src/utils/stripoRuntime.d.ts +3 -0
  66. package/dist/static/stripo-runtime-manifest.json.js +9 -0
  67. package/dist/stores/unsubscribe.js +33 -29
  68. package/dist/utils/runtimePrefetch.js +26 -0
  69. package/dist/utils/stripoRuntime.js +13 -0
  70. package/package.json +7 -2
@@ -1,20 +1,20 @@
1
1
  import { ModificationDescription as N, UEAttr as L } from "../../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
2
- import { CommonControl as $ } from "../../common-control.js";
3
- import { reorientBlockCellPadding as D, nameMaxWidthFor as f } from "../constants/cardLayout.js";
4
- import { ItemsBlockId as I } from "../enums/controlEnums.js";
5
- import { productPairs as y, templateFirstLine as x } from "../enums/productEnums.js";
6
- import { SETTINGS_ENUMS as T, ItemTypeOptions as H, OrientationOptions as w, ItemInCartOptions as g, DefaultConfigValues as U } from "../enums/settingsEnums.js";
2
+ import { CommonControl as F } from "../../common-control.js";
3
+ import { reorientBlockCellPadding as D, nameMaxWidthFor as $ } from "../constants/cardLayout.js";
4
+ import { ItemsBlockId as T } from "../enums/controlEnums.js";
5
+ import { productPairs as S, templateFirstLine as x } from "../enums/productEnums.js";
6
+ import { SETTINGS_ENUMS as I, ItemTypeOptions as H, OrientationOptions as w, ItemInCartOptions as O, DefaultConfigValues as U } from "../enums/settingsEnums.js";
7
7
  import q from "../layouts/horizontal.html.js";
8
- import V from "../layouts/vertical.html.js";
9
- import { getDefaultTemplate as B, wrapInTableRow as C, applyPriceOrientationStyles as G } from "../template.js";
8
+ import B from "../layouts/vertical.html.js";
9
+ import { getDefaultTemplate as V, wrapInTableRow as C, applyPriceOrientationStyles as G } from "../template.js";
10
10
  import { findNameTextNode as Y } from "../utils/nameNode.js";
11
- import { getItemsBlockConfig as _, setItemsBlockConfig as M, escapeReplacement as A, deriveItemNumber as v } from "../utils/nodeConfigUtils.js";
11
+ import { getItemsBlockConfig as _, setItemsBlockConfig as b, escapeReplacement as g, deriveItemNumber as v } from "../utils/nodeConfigUtils.js";
12
12
  const Q = "ui-elements-items-block", p = {
13
13
  ITEMS_TYPE: "itemsType",
14
14
  ORIENTATION: "orientation",
15
15
  ITEM_IDS: "itemIds"
16
16
  };
17
- class se extends $ {
17
+ class oe extends F {
18
18
  getId() {
19
19
  return Q;
20
20
  }
@@ -28,19 +28,14 @@ class se extends $ {
28
28
  `;
29
29
  }
30
30
  onRender() {
31
- const e = _(this.currentNode);
32
- this.api.updateValues({
33
- [p.ORIENTATION]: (e == null ? void 0 : e.orientation) ?? T.ORIENTATION.VERTICAL,
34
- [p.ITEMS_TYPE]: (e == null ? void 0 : e.type) ?? T.ITEMS_TYPE.CART_ITEMS,
35
- [p.ITEM_IDS]: (e == null ? void 0 : e.itemsSelectValue) ?? ""
36
- }), this._listenToFormUpdates();
31
+ this.forgetLastPanelNode(), this._listenToFormUpdates();
37
32
  }
38
33
  onTemplateNodeUpdated(e) {
39
34
  super.onTemplateNodeUpdated(e), console.debug("Items Block Config", e.getNodeConfig()), this.handleBlockInstanceChange(() => {
40
35
  const r = _(this.currentNode);
41
36
  this.api.updateValues({
42
- [p.ORIENTATION]: (r == null ? void 0 : r.orientation) ?? T.ORIENTATION.VERTICAL,
43
- [p.ITEMS_TYPE]: (r == null ? void 0 : r.type) ?? T.ITEMS_TYPE.CART_ITEMS,
37
+ [p.ORIENTATION]: (r == null ? void 0 : r.orientation) ?? I.ORIENTATION.VERTICAL,
38
+ [p.ITEMS_TYPE]: (r == null ? void 0 : r.type) ?? I.ITEMS_TYPE.CART_ITEMS,
44
39
  [p.ITEM_IDS]: (r == null ? void 0 : r.itemsSelectValue) ?? ""
45
40
  }), this._initializeSelectItems();
46
41
  });
@@ -85,7 +80,7 @@ class se extends $ {
85
80
  _onOrientationChange(e) {
86
81
  this.api.updateValues({ [p.ORIENTATION]: e });
87
82
  const r = this.api.getDocumentModifier();
88
- M(this.currentNode, this.api, {
83
+ b(this.currentNode, this.api, {
89
84
  orientation: e,
90
85
  priceOrientation: "horizontal"
91
86
  }, r), r.apply(new N("Changed orientation")), this._reOrderTemplate(), setTimeout(() => {
@@ -93,15 +88,15 @@ class se extends $ {
93
88
  }, 50);
94
89
  }
95
90
  _onItemsTypeChange(e) {
96
- const r = T.ITEMS_TYPE[e], t = g[e], i = t == null ? void 0 : t[0];
91
+ const r = I.ITEMS_TYPE[e], t = O[e], i = t == null ? void 0 : t[0];
97
92
  if (!r || !i)
98
93
  return;
99
- const n = i.value, s = i.value.replace("Url}}", "Image}}"), a = this.api.getDocumentModifier();
100
- M(this.currentNode, this.api, {
94
+ const n = i.value, o = i.value.replace("Url}}", "Image}}"), a = this.api.getDocumentModifier();
95
+ b(this.currentNode, this.api, {
101
96
  source: r,
102
97
  type: r,
103
98
  itemsSelectValue: i.value,
104
- imageLink: s,
99
+ imageLink: o,
105
100
  buttonLink: n
106
101
  }, a), this._updateDataTypeAttributes(r, a), this._initializeSelectItems();
107
102
  const l = this._getTemplateData(r, i.value);
@@ -110,7 +105,7 @@ class se extends $ {
110
105
  _onItemIdsChange(e) {
111
106
  this.api.updateValues({ [p.ITEM_IDS]: e });
112
107
  const r = e, t = e.replace("Url}}", "Image}}"), i = this.api.getDocumentModifier();
113
- M(this.currentNode, this.api, {
108
+ b(this.currentNode, this.api, {
114
109
  itemsSelectValue: e,
115
110
  imageLink: t,
116
111
  buttonLink: r
@@ -124,11 +119,11 @@ class se extends $ {
124
119
  L.SELECTPICKER.items,
125
120
  H
126
121
  );
127
- const e = _(this.currentNode), r = (e == null ? void 0 : e.type) ?? T.ITEMS_TYPE.CART_ITEMS, t = (e == null ? void 0 : e.itemsSelectValue) ?? "";
122
+ const e = _(this.currentNode), r = (e == null ? void 0 : e.type) ?? I.ITEMS_TYPE.CART_ITEMS, t = (e == null ? void 0 : e.itemsSelectValue) ?? "";
128
123
  this.api.updateValues({
129
124
  [p.ITEMS_TYPE]: r
130
125
  });
131
- const i = g[r];
126
+ const i = O[r];
132
127
  this.api.setUIEAttribute(
133
128
  p.ITEM_IDS,
134
129
  L.SELECTPICKER.items,
@@ -150,113 +145,113 @@ class se extends $ {
150
145
  );
151
146
  }
152
147
  _renderTemplate() {
153
- const e = _(this.currentNode), r = (e == null ? void 0 : e.orientation) ?? T.ORIENTATION.VERTICAL, t = (e == null ? void 0 : e.type) ?? T.ITEMS_TYPE.CART_ITEMS, i = (e == null ? void 0 : e.itemsSelectValue) ?? "", n = (e == null ? void 0 : e.priceCurrencySymbol) ?? "", s = (e == null ? void 0 : e.priceCurrencyLocation) ?? "0", a = (e == null ? void 0 : e.priceFormatted) ?? !1;
154
- this.api.getDocumentModifier().modifyHtml(this.currentNode).setInnerHtml(B({
148
+ const e = _(this.currentNode), r = (e == null ? void 0 : e.orientation) ?? I.ORIENTATION.VERTICAL, t = (e == null ? void 0 : e.type) ?? I.ITEMS_TYPE.CART_ITEMS, i = (e == null ? void 0 : e.itemsSelectValue) ?? "", n = (e == null ? void 0 : e.priceCurrencySymbol) ?? "", o = (e == null ? void 0 : e.priceCurrencyLocation) ?? "0", a = (e == null ? void 0 : e.priceFormatted) ?? !1;
149
+ this.api.getDocumentModifier().modifyHtml(this.currentNode).setInnerHtml(V({
155
150
  orientation: r,
156
151
  itemsType: t,
157
152
  itemId: i,
158
153
  currencySymbol: n,
159
- currencyLocation: s,
154
+ currencyLocation: o,
160
155
  formattedPrice: a
161
156
  })).apply(new N("Updated template"));
162
157
  }
163
158
  _getTemplateData(e, r) {
164
- const t = _(this.currentNode), i = e ?? (t == null ? void 0 : t.type) ?? T.ITEMS_TYPE.CART_ITEMS, n = r ?? (t == null ? void 0 : t.itemsSelectValue) ?? "", s = (t == null ? void 0 : t.priceFormatted) ?? !1, a = (t == null ? void 0 : t.priceSinglePrice) ?? !1, l = g[i].findIndex((h) => h.value === n), c = l > -1 ? l : 0, o = y.PAIRS_FOR_EXTENSION.price[i], d = y.PAIRS_FOR_EXTENSION.originalPrice[i];
159
+ const t = _(this.currentNode), i = e ?? (t == null ? void 0 : t.type) ?? I.ITEMS_TYPE.CART_ITEMS, n = r ?? (t == null ? void 0 : t.itemsSelectValue) ?? "", o = (t == null ? void 0 : t.priceFormatted) ?? !1, a = (t == null ? void 0 : t.priceSinglePrice) ?? !1, l = O[i].findIndex((h) => h.value === n), c = l > -1 ? l : 0, s = S.PAIRS_FOR_EXTENSION.price[i], d = S.PAIRS_FOR_EXTENSION.originalPrice[i];
165
160
  let m, u;
166
- return a ? (m = s ? o.DEFAULT_SINGLE_PRICE_FORMATTED : o.DEFAULT_SINGLE_PRICE, u = s ? d.DEFAULT_SINGLE_PRICE_FORMATTED : d.DEFAULT_SINGLE_PRICE) : (m = s ? o.DEFAULT_PRICE_FORMATTED : o.DEFAULT_PRICE, u = s ? d.DEFAULT_PRICE_FORMATTED : d.DEFAULT_PRICE), {
167
- imageSrc: y.PAIRS_FOR_EXTENSION.imageSrc[i].DEFAULT[c],
168
- name: y.PAIRS_FOR_EXTENSION.name[i].DEFAULT[c],
161
+ return a ? (m = o ? s.DEFAULT_SINGLE_PRICE_FORMATTED : s.DEFAULT_SINGLE_PRICE, u = o ? d.DEFAULT_SINGLE_PRICE_FORMATTED : d.DEFAULT_SINGLE_PRICE) : (m = o ? s.DEFAULT_PRICE_FORMATTED : s.DEFAULT_PRICE, u = o ? d.DEFAULT_PRICE_FORMATTED : d.DEFAULT_PRICE), {
162
+ imageSrc: S.PAIRS_FOR_EXTENSION.imageSrc[i].DEFAULT[c],
163
+ name: S.PAIRS_FOR_EXTENSION.name[i].DEFAULT[c],
169
164
  price: m,
170
165
  originalPrice: u,
171
- quantity: y.PAIRS_FOR_EXTENSION.quantity[i].DEFAULT,
172
- button: y.PAIRS_FOR_EXTENSION.button[i].DEFAULT_LABEL
166
+ quantity: S.PAIRS_FOR_EXTENSION.quantity[i].DEFAULT,
167
+ button: S.PAIRS_FOR_EXTENSION.button[i].DEFAULT_LABEL
173
168
  };
174
169
  }
175
170
  _updateImageSrc(e, r) {
176
171
  var i;
177
- const t = (i = this.currentNode) == null ? void 0 : i.querySelector(`[esd-extension-block-id="${I.IMAGE}"] img`);
172
+ const t = (i = this.currentNode) == null ? void 0 : i.querySelector(`[esd-extension-block-id="${T.IMAGE}"] img`);
178
173
  t && r.modifyHtml(t).setAttribute("src", e);
179
174
  }
180
175
  _updateName(e, r) {
181
- var s;
182
- const t = (s = this.currentNode) == null ? void 0 : s.querySelector(`[esd-extension-block-id="${I.NAME}"]`);
176
+ var o;
177
+ const t = (o = this.currentNode) == null ? void 0 : o.querySelector(`[esd-extension-block-id="${T.NAME}"]`);
183
178
  if (!t)
184
179
  return;
185
180
  const i = t.getInnerText().trim();
186
181
  let n = t.getInnerHTML().trim();
187
- n = n.replace(i, A(e)), r.modifyHtml(t).setInnerHtml(n);
182
+ n = n.replace(i, g(e)), r.modifyHtml(t).setInnerHtml(n);
188
183
  }
189
184
  _updatePrice(e, r) {
190
185
  var a;
191
186
  const t = ((a = this.currentNode) == null ? void 0 : a.querySelectorAll(
192
- `[esd-extension-block-id="${I.PRICE}"]`
193
- )) || [], i = _(this.currentNode), n = (i == null ? void 0 : i.priceCurrencySymbol) ?? "", s = (i == null ? void 0 : i.priceCurrencyLocation) ?? "0";
187
+ `[esd-extension-block-id="${T.PRICE}"]`
188
+ )) || [], i = _(this.currentNode), n = (i == null ? void 0 : i.priceCurrencySymbol) ?? "", o = (i == null ? void 0 : i.priceCurrencyLocation) ?? "0";
194
189
  t.forEach((l) => {
195
190
  const c = this._getParagraphFromBlock(l);
196
191
  if (!c)
197
192
  return;
198
- const o = c.getInnerHTML().trim() || "", d = c.getInnerText().trim() || "", m = (n == null ? void 0 : n.trim()) || "", u = this._removeCurrencySymbol(d, m), h = this._replacePriceNumber(u, e), E = this._buildPriceContent(h, m, s), S = o.replace(d, A(E));
199
- r.modifyHtml(c).setInnerHtml(S);
193
+ const s = c.getInnerHTML().trim() || "", d = c.getInnerText().trim() || "", m = (n == null ? void 0 : n.trim()) || "", u = this._removeCurrencySymbol(d, m), h = this._replacePriceNumber(u, e), E = this._buildPriceContent(h, m, o), y = s.replace(d, g(E));
194
+ r.modifyHtml(c).setInnerHtml(y);
200
195
  });
201
196
  }
202
197
  _updateOriginalPrice(e, r) {
203
198
  var a;
204
199
  const t = ((a = this.currentNode) == null ? void 0 : a.querySelectorAll(
205
- `[esd-extension-block-id="${I.ORIGINAL_PRICE}"]`
206
- )) || [], i = _(this.currentNode), n = (i == null ? void 0 : i.priceCurrencySymbol) ?? "", s = (i == null ? void 0 : i.priceCurrencyLocation) ?? "0";
200
+ `[esd-extension-block-id="${T.ORIGINAL_PRICE}"]`
201
+ )) || [], i = _(this.currentNode), n = (i == null ? void 0 : i.priceCurrencySymbol) ?? "", o = (i == null ? void 0 : i.priceCurrencyLocation) ?? "0";
207
202
  t.forEach((l) => {
208
203
  const c = this._getParagraphFromBlock(l);
209
204
  if (!c)
210
205
  return;
211
- const o = c.querySelector("s");
212
- if (!o)
206
+ const s = c.querySelector("s");
207
+ if (!s)
213
208
  return;
214
- const d = o.getInnerHTML().trim() || "", m = o.getInnerText().trim() || "", u = (n == null ? void 0 : n.trim()) || "", h = this._removeCurrencySymbol(m, u), E = this._replacePriceNumber(h, e), S = this._buildPriceContent(E, u, s), R = `<s>${d.replace(m, A(S))}</s>`;
215
- r.modifyHtml(c).setInnerHtml(R);
209
+ const d = s.getInnerHTML().trim() || "", m = s.getInnerText().trim() || "", u = (n == null ? void 0 : n.trim()) || "", h = this._removeCurrencySymbol(m, u), E = this._replacePriceNumber(h, e), y = this._buildPriceContent(E, u, o), A = `<s>${d.replace(m, g(y))}</s>`;
210
+ r.modifyHtml(c).setInnerHtml(A);
216
211
  });
217
212
  }
218
213
  _updateQuantity(e, r, t) {
219
214
  var h;
220
- const i = _(this.currentNode), s = (r ?? (i == null ? void 0 : i.type) ?? T.ITEMS_TYPE.CART_ITEMS) !== T.ITEMS_TYPE.BROWSED_ITEMS, a = (i == null ? void 0 : i.quantityControlEnabled) !== !1, l = s && a, c = (h = this.currentNode) == null ? void 0 : h.querySelector(`[esd-extension-block-id="${I.QUANTITY}"]`);
215
+ const i = _(this.currentNode), o = (r ?? (i == null ? void 0 : i.type) ?? I.ITEMS_TYPE.CART_ITEMS) !== I.ITEMS_TYPE.BROWSED_ITEMS, a = (i == null ? void 0 : i.quantityControlEnabled) !== !1, l = o && a, c = (h = this.currentNode) == null ? void 0 : h.querySelector(`[esd-extension-block-id="${T.QUANTITY}"]`);
221
216
  if (!c)
222
217
  return;
223
- const o = this._getParagraphFromBlock(c);
224
- if (!o)
218
+ const s = this._getParagraphFromBlock(c);
219
+ if (!s)
225
220
  return;
226
- const d = o.getInnerText().trim();
227
- let m = o.getInnerHTML().trim();
228
- function u(E, S, P) {
221
+ const d = s.getInnerText().trim();
222
+ let m = s.getInnerHTML().trim();
223
+ function u(E, y, P) {
229
224
  return E.replace(
230
- new RegExp(`(>\\s*)?${S}(\\s*<)?`, "g"),
225
+ new RegExp(`(>\\s*)?${y}(\\s*<)?`, "g"),
231
226
  `$1${P}$2`
232
227
  );
233
228
  }
234
- m = u(m, d, e), t.modifyHtml(o).setInnerHtml(m), t.modifyHtml(c).setStyle("display", l ? "table-cell" : "none");
229
+ m = u(m, d, e), t.modifyHtml(s).setInnerHtml(m), t.modifyHtml(c).setStyle("display", l ? "table-cell" : "none");
235
230
  }
236
231
  _reOrderTemplate(e) {
237
- var h, E, S, P, R, b;
238
- const r = (h = this.currentNode) == null ? void 0 : h.querySelector(`[esd-extension-block-id="${I.IMAGE}"]`), t = (E = this.currentNode) == null ? void 0 : E.querySelector(`[esd-extension-block-id="${I.NAME}"]`), i = ((S = this.currentNode) == null ? void 0 : S.querySelectorAll(
239
- `[esd-extension-block-id="${I.PRICE}"]`
232
+ var h, E, y, P, A, M;
233
+ const r = (h = this.currentNode) == null ? void 0 : h.querySelector(`[esd-extension-block-id="${T.IMAGE}"]`), t = (E = this.currentNode) == null ? void 0 : E.querySelector(`[esd-extension-block-id="${T.NAME}"]`), i = ((y = this.currentNode) == null ? void 0 : y.querySelectorAll(
234
+ `[esd-extension-block-id="${T.PRICE}"]`
240
235
  )) || [], n = ((P = this.currentNode) == null ? void 0 : P.querySelectorAll(
241
- `[esd-extension-block-id="${I.ORIGINAL_PRICE}"]`
242
- )) || [], [s] = i, [a] = n, l = (R = this.currentNode) == null ? void 0 : R.querySelector(`[esd-extension-block-id="${I.QUANTITY}"]`), c = (b = this.currentNode) == null ? void 0 : b.querySelector(`[esd-extension-block-id="${I.BUTTON}"]`);
243
- if (!r || !t || !s || !a || !l || !c)
236
+ `[esd-extension-block-id="${T.ORIGINAL_PRICE}"]`
237
+ )) || [], [o] = i, [a] = n, l = (A = this.currentNode) == null ? void 0 : A.querySelector(`[esd-extension-block-id="${T.QUANTITY}"]`), c = (M = this.currentNode) == null ? void 0 : M.querySelector(`[esd-extension-block-id="${T.BUTTON}"]`);
238
+ if (!r || !t || !o || !a || !l || !c)
244
239
  return;
245
- const o = _(this.currentNode), d = (o == null ? void 0 : o.orientation) ?? T.ORIENTATION.VERTICAL, m = d === T.ORIENTATION.VERTICAL;
246
- let u = m ? V : q;
240
+ const s = _(this.currentNode), d = (s == null ? void 0 : s.orientation) ?? I.ORIENTATION.VERTICAL, m = d === I.ORIENTATION.VERTICAL;
241
+ let u = m ? B : q;
247
242
  setTimeout(() => {
248
- const k = A(D(s.getOuterHTML(), m)), F = A(
243
+ const f = g(D(o.getOuterHTML(), m)), k = g(
249
244
  D(a.getOuterHTML(), m)
250
245
  );
251
- u = u.replace("{-{-TEMPLATE_FIRST_LINE-}-}", m ? x : "").replace("{-{-PRODUCT_IMAGE-}-}", C(r.getOuterHTML())).replace("{-{-PRODUCT_NAME-}-}", C(t.getOuterHTML())).replaceAll("{-{-PRODUCT_PRICE-}-}", C(k)).replaceAll("{-{-PRODUCT_ORIGINAL_PRICE-}-}", C(F)).replace("{-{-PRODUCT_QUANTITY-}-}", C(l.getOuterHTML())).replace("{-{-PRODUCT_BUTTON-}-}", C(c.getOuterHTML())), u = G(
246
+ u = u.replace("{-{-TEMPLATE_FIRST_LINE-}-}", m ? x : "").replace("{-{-PRODUCT_IMAGE-}-}", C(r.getOuterHTML())).replace("{-{-PRODUCT_NAME-}-}", C(t.getOuterHTML())).replaceAll("{-{-PRODUCT_PRICE-}-}", C(f)).replaceAll("{-{-PRODUCT_ORIGINAL_PRICE-}-}", C(k)).replace("{-{-PRODUCT_QUANTITY-}-}", C(l.getOuterHTML())).replace("{-{-PRODUCT_BUTTON-}-}", C(c.getOuterHTML())), u = G(
252
247
  u,
253
248
  d,
254
- (o == null ? void 0 : o.priceOrientation) ?? "horizontal",
255
- (o == null ? void 0 : o.priceVisible) ?? !0,
256
- (o == null ? void 0 : o.originalPriceVisible) ?? !0
249
+ (s == null ? void 0 : s.priceOrientation) ?? "horizontal",
250
+ (s == null ? void 0 : s.priceVisible) ?? !0,
251
+ (s == null ? void 0 : s.originalPriceVisible) ?? !0
257
252
  ), u = u.trim().replace(x, "").slice(0, -5);
258
- const O = e ?? this.api.getDocumentModifier();
259
- O.modifyHtml(r.querySelector("img")).setAttribute("width", U.productImageWidth).setAttribute("height", U.productImageWidth), O.modifyHtml(this.currentNode).setInnerHtml(u), e || O.apply(new N("Reordered template"));
253
+ const R = e ?? this.api.getDocumentModifier();
254
+ R.modifyHtml(r.querySelector("img")).setAttribute("width", U.productImageWidth).setAttribute("height", U.productImageWidth), R.modifyHtml(this.currentNode).setInnerHtml(u), e || R.apply(new N("Reordered template"));
260
255
  }, 50);
261
256
  }
262
257
  _updateDataTypeAttributes(e, r) {
@@ -264,15 +259,15 @@ class se extends $ {
264
259
  return;
265
260
  const t = this.currentNode.closest(".ins-product-td");
266
261
  t && r.modifyHtml(t).setAttribute("data-type", e), this.currentNode.querySelectorAll("[data-type]").forEach((n) => {
267
- const s = n;
268
- r.modifyHtml(s).setAttribute("data-type", e);
262
+ const o = n;
263
+ r.modifyHtml(o).setAttribute("data-type", e);
269
264
  });
270
265
  }
271
266
  _updateDataNumberAttributes(e, r) {
272
267
  if (!this.currentNode)
273
268
  return;
274
- const t = _(this.currentNode), i = (t == null ? void 0 : t.type) ?? T.ITEMS_TYPE.CART_ITEMS, n = v(e, i), s = this.currentNode.closest(".ins-product-td");
275
- s && r.modifyHtml(s).setAttribute("data-number", n), this.currentNode.querySelectorAll("[data-number]").forEach((l) => {
269
+ const t = _(this.currentNode), i = (t == null ? void 0 : t.type) ?? I.ITEMS_TYPE.CART_ITEMS, n = v(e, i), o = this.currentNode.closest(".ins-product-td");
270
+ o && r.modifyHtml(o).setAttribute("data-number", n), this.currentNode.querySelectorAll("[data-number]").forEach((l) => {
276
271
  const c = l;
277
272
  r.modifyHtml(c).setAttribute("data-number", n);
278
273
  });
@@ -282,16 +277,16 @@ class se extends $ {
282
277
  this._updateImageSrc(r.imageSrc, t), this._updateName(r.name, t), this._updatePrice(r.price, t), this._updateOriginalPrice(r.originalPrice, t), this._updateQuantity(r.quantity, e, t), t.apply(new N("Refilled template"));
283
278
  }
284
279
  _recalculateTrimming() {
285
- var s;
280
+ var o;
286
281
  if (!this.currentNode)
287
282
  return;
288
- const e = (s = this.currentNode) == null ? void 0 : s.querySelector(`[esd-extension-block-id="${I.NAME}"]`);
283
+ const e = (o = this.currentNode) == null ? void 0 : o.querySelector(`[esd-extension-block-id="${T.NAME}"]`);
289
284
  if (!e)
290
285
  return;
291
286
  const r = Y(e);
292
287
  if (!r)
293
288
  return;
294
- const t = _(this.currentNode), i = (t == null ? void 0 : t.nameTrimming) ?? !0, n = f(t == null ? void 0 : t.orientation);
289
+ const t = _(this.currentNode), i = (t == null ? void 0 : t.nameTrimming) ?? !0, n = $(t == null ? void 0 : t.orientation);
295
290
  this.api.getDocumentModifier().modifyHtml(r).setStyle("overflow", "hidden").setStyle("white-space", i ? "nowrap" : "normal").setStyle("text-overflow", i ? "ellipsis" : "unset").setStyle("max-width", n).removeStyle("width").apply(new N("Recalculated trimming after orientation change"));
296
291
  }
297
292
  _getParagraphFromBlock(e) {
@@ -309,7 +304,7 @@ class se extends $ {
309
304
  } else {
310
305
  const n = t.match(/([^0-9.,\s]+)/);
311
306
  if (n && n[1]) {
312
- const s = n[1].trim(), a = new RegExp(`\\s*${this._escapeRegex(s)}\\s*`);
307
+ const o = n[1].trim(), a = new RegExp(`\\s*${this._escapeRegex(o)}\\s*`);
313
308
  i = t.replace(a, "").trim();
314
309
  }
315
310
  }
@@ -325,5 +320,5 @@ class se extends $ {
325
320
  }
326
321
  export {
327
322
  Q as CONTROL_BLOCK_ID,
328
- se as ItemsBlockControl
323
+ oe as ItemsBlockControl
329
324
  };
@@ -2,23 +2,24 @@ var b = Object.defineProperty;
2
2
  var A = (m, c, e) => c in m ? b(m, c, { enumerable: !0, configurable: !0, writable: !0, value: e }) : m[c] = e;
3
3
  var u = (m, c, e) => A(m, typeof c != "symbol" ? c + "" : c, e);
4
4
  import { useConfig as g } from "../../../composables/useConfig.js";
5
- import { BlockId as D } from "../../../enums/block.js";
6
- import { getMigrationBannerHtml as E } from "../../../utils/migrationBannerHtml.js";
5
+ import { BlockId as E } from "../../../enums/block.js";
6
+ import { getMigrationBannerHtml as D } from "../../../utils/migrationBannerHtml.js";
7
7
  import { Block as S, BlockCompositionType as v, ModificationDescription as _ } from "../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
8
- import { CURRENT_CONFIG_VERSION as N, PRE_RRS_CONFIG_VERSION as M } from "./constants/defaultConfig.js";
8
+ import { CURRENT_CONFIG_VERSION as M, PRE_RRS_CONFIG_VERSION as N } from "./constants/defaultConfig.js";
9
9
  import { RECOMMENDATION_ID_ATTR as f } from "./constants/selectors.js";
10
- import { ensureMobileFitRule as w, syncHeightBound as O } from "./controls/image/index.js";
11
- import { regenerateMobileProductRows as H } from "./controls/main/utils.js";
12
- import { ensureMobileCssRulesExist as I, setMobileLayoutOptOut as R, hasMobileLayoutOptOut as T } from "./controls/mobileLayout/cssRules.js";
10
+ import { ensureMobileFitRule as T, syncHeightBound as w } from "./controls/image/index.js";
11
+ import { regenerateMobileProductRows as O } from "./controls/main/utils.js";
12
+ import { ensureMobileCssRulesExist as I, setMobileLayoutOptOut as R, hasMobileLayoutOptOut as x } from "./controls/mobileLayout/cssRules.js";
13
+ import { CSS_CLASS_TEXT_TRIM as H, ensureTextTrimCssRulesExist as $ } from "./controls/shared/textTrimCssRules.js";
13
14
  import { RecommendationConfigService as a } from "./services/configService.js";
14
15
  import { useRecommendationExtensionStore as p } from "./store/recommendation.js";
15
- import { getDefaultTemplate as x } from "./templates/grid/template.js";
16
+ import { getDefaultTemplate as q } from "./templates/grid/template.js";
16
17
  import { useRecommendationBlockWarning as F } from "./useRecommendationBlockWarning.js";
17
- import { registerNodeConfigWriter as y, readBlockNodeConfigs as $ } from "./utils/nodeConfigWriter.js";
18
- import { refreshArrivedStrategyBlocks as q, resolveSourceConfig as L, refreshDuplicatedStrategyBlocks as P } from "./utils/strategyCommit.js";
19
- const k = D.Recommendation, h = "recommendation-block-v2", C = "hide-price";
18
+ import { registerNodeConfigWriter as y, readBlockNodeConfigs as L } from "./utils/nodeConfigWriter.js";
19
+ import { refreshArrivedStrategyBlocks as P, resolveSourceConfig as V, refreshDuplicatedStrategyBlocks as W } from "./utils/strategyCommit.js";
20
+ const k = E.Recommendation, h = "recommendation-block-v2", C = "hide-price";
20
21
  let B = !1;
21
- class se extends S {
22
+ class ae extends S {
22
23
  constructor() {
23
24
  super();
24
25
  /**
@@ -52,7 +53,7 @@ class se extends S {
52
53
  );
53
54
  }
54
55
  getSettingsPanelTitleHtml() {
55
- return E(
56
+ return D(
56
57
  k,
57
58
  this.api.translate("Recommendation Block"),
58
59
  this.api.translate("This block is switched from the Old Version to the New Version. We recommend you check the Recommendation block and test your message to ensure it works properly.")
@@ -76,7 +77,7 @@ class se extends S {
76
77
  */
77
78
  getTemplate() {
78
79
  const e = this._generateNextId();
79
- return this._pendingBlockId = e, x(e);
80
+ return this._pendingBlockId = e, q(e);
80
81
  }
81
82
  /**
82
83
  * Called when a new block is dropped into the template
@@ -110,7 +111,7 @@ class se extends S {
110
111
  e,
111
112
  {
112
113
  recommendationId: i,
113
- configVersion: r ? N : M,
114
+ configVersion: r ? M : N,
114
115
  ...s ? { partnerName: g().partnerName.value } : {},
115
116
  // An RRS block picks a strategy, not an algorithm, and its algorithm control is
116
117
  // hidden. Keeping the `mostPopular` default would bake a most-popular feed URL
@@ -121,7 +122,7 @@ class se extends S {
121
122
  if (l.setCurrentBlock(i), this._stampHidePrice(e, n.priceHideIfSameAsDiscounted), o) {
122
123
  I(this.api);
123
124
  const d = this._getBlockElement(e);
124
- d && (R(this.api, d, !0), H({
125
+ d && (R(this.api, d, !0), O({
125
126
  currentNode: e,
126
127
  documentModifier: this.api.getDocumentModifier()
127
128
  }));
@@ -155,13 +156,13 @@ class se extends S {
155
156
  "Assign recommendation ID to legacy block"
156
157
  );
157
158
  }
158
- this._healLingeringDuplicate(e), a.needsMigration(e) && this._migrateFromLegacy(e), this._healHidePriceAttr(e), this._ensureMobileFitRule(e), this._syncHeightBound(e);
159
+ this._healLingeringDuplicate(e), a.needsMigration(e) && this._migrateFromLegacy(e), this._healHidePriceAttr(e), this._ensureMobileFitRule(e), this._syncHeightBound(e), this._ensureTextTrimCss(e);
159
160
  try {
160
161
  B || (I(this.api), B = !0);
161
162
  const t = a.getConfig(e), i = this._getBlockElement(e);
162
163
  if (i) {
163
164
  const r = !t.mobileLayoutEnabled;
164
- T(i) !== r && R(this.api, i, r);
165
+ x(i) !== r && R(this.api, i, r);
165
166
  }
166
167
  } catch {
167
168
  }
@@ -179,7 +180,15 @@ class se extends S {
179
180
  }
180
181
  _ensureMobileFitRule(e) {
181
182
  try {
182
- w(this.api, e);
183
+ T(this.api, e);
184
+ } catch {
185
+ }
186
+ }
187
+ // A migrated block arrives with trimmed cells but without the stylesheet rules the toggle would have added.
188
+ _ensureTextTrimCss(e) {
189
+ var t;
190
+ try {
191
+ (t = this._getBlockElement(e)) != null && t.querySelector(`.${H}`) && $(this.api);
183
192
  } catch {
184
193
  }
185
194
  }
@@ -187,7 +196,7 @@ class se extends S {
187
196
  const t = this._getBlockElement(e);
188
197
  if (t)
189
198
  try {
190
- O(this.api, t);
199
+ w(this.api, t);
191
200
  } catch {
192
201
  }
193
202
  }
@@ -270,7 +279,7 @@ class se extends S {
270
279
  const d = { strategyId: l.strategyId };
271
280
  return t.add(n), this._refreshClaims.set(n, d), [{ id: n, config: l, claim: d }];
272
281
  });
273
- i.length && q(i.map(({ id: r, config: s }) => ({ id: r, config: s }))).catch((r) => console.error("[recommendation] refreshing an arrived strategy failed", r)).finally(() => i.forEach(({ id: r, claim: s }) => this._releaseRefreshClaim(r, s)));
282
+ i.length && P(i.map(({ id: r, config: s }) => ({ id: r, config: s }))).catch((r) => console.error("[recommendation] refreshing an arrived strategy failed", r)).finally(() => i.forEach(({ id: r, claim: s }) => this._releaseRefreshClaim(r, s)));
274
283
  }
275
284
  /**
276
285
  * A new document reports each block to onCreated and onDocumentInit, not always in one batch, so a
@@ -282,7 +291,7 @@ class se extends S {
282
291
  return !0;
283
292
  if (i.strategyId === t)
284
293
  return !1;
285
- const r = $(e);
294
+ const r = L(e);
286
295
  return r.length > 0 && r.every((s) => s.strategyId === t);
287
296
  }
288
297
  _releaseRefreshClaim(e, t) {
@@ -344,10 +353,10 @@ class se extends S {
344
353
  if (r.cloneBlockState(t, i), r.setCurrentBlock(i), g().isFeatureEnabled("reusableRecommendationStrategy")) {
345
354
  this._resetSourceIds.add(t), y(this.api);
346
355
  const s = a.getConfig(e), n = [
347
- { id: t, claim: { strategyId: L(t, s).strategyId } },
356
+ { id: t, claim: { strategyId: V(t, s).strategyId } },
348
357
  { id: i, claim: { strategyId: s.strategyId } }
349
358
  ].filter(({ id: o }) => !this._refreshClaims.has(o));
350
- n.forEach(({ id: o, claim: l }) => this._refreshClaims.set(o, l)), P(t, i, s).catch((o) => console.error("[recommendation] refreshing a duplicated strategy failed", o)).finally(() => n.forEach(({ id: o, claim: l }) => this._releaseRefreshClaim(o, l)));
359
+ n.forEach(({ id: o, claim: l }) => this._refreshClaims.set(o, l)), W(t, i, s).catch((o) => console.error("[recommendation] refreshing a duplicated strategy failed", o)).finally(() => n.forEach(({ id: o, claim: l }) => this._releaseRefreshClaim(o, l)));
351
360
  }
352
361
  this._warnIfMultipleBlocks();
353
362
  }
@@ -451,5 +460,5 @@ class se extends S {
451
460
  }
452
461
  export {
453
462
  k as BLOCK_ID,
454
- se as RecommendationBlock
463
+ ae as RecommendationBlock
455
464
  };
@@ -7,7 +7,7 @@ const u = "recommendation-card-background-color-control", e = {
7
7
  GRID: ".product-card-segment",
8
8
  LIST: ".product-card-wrapper"
9
9
  };
10
- class _ extends s {
10
+ class h extends s {
11
11
  getId() {
12
12
  return u;
13
13
  }
@@ -18,7 +18,7 @@ class _ extends s {
18
18
  ]);
19
19
  }
20
20
  onRender() {
21
- this._setFormValues(), this._listenToFormUpdates();
21
+ this.forgetLastPanelNode(), this._listenToFormUpdates();
22
22
  }
23
23
  onTemplateNodeUpdated(r) {
24
24
  super.onTemplateNodeUpdated(r), this._setFormValues();
@@ -72,5 +72,5 @@ class _ extends s {
72
72
  }
73
73
  export {
74
74
  u as CARD_BACKGROUND_COLOR_CONTROL_ID,
75
- _ as CardBackgroundColorControl
75
+ h as CardBackgroundColorControl
76
76
  };