@useinsider/guido 3.18.1-beta.23c7bd6 → 3.18.1-beta.280b4e1

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 (52) hide show
  1. package/README.md +3 -21
  2. package/dist/@types/config/schemas.js +51 -59
  3. package/dist/components/Guido.vue.js +4 -4
  4. package/dist/components/Guido.vue2.js +53 -55
  5. package/dist/components/organisms/extensions/recommendation/AssignStrategyDrawer.vue.js +7 -7
  6. package/dist/components/organisms/extensions/recommendation/AssignStrategyDrawer.vue2.js +57 -82
  7. package/dist/components/organisms/extensions/recommendation/RemoveStrategyModal.vue2.js +22 -24
  8. package/dist/components/organisms/onboarding/OnboardingWrapper.vue2.js +24 -28
  9. package/dist/composables/useCustomInterfaceAppearance.js +42 -46
  10. package/dist/enums/extensions/recommendationBlock.js +31 -40
  11. package/dist/extensions/Blocks/Recommendation/controls/main/index.js +69 -70
  12. package/dist/extensions/Blocks/Recommendation/controls/main/strategy.js +28 -72
  13. package/dist/extensions/Blocks/Recommendation/controls/main/utils.js +44 -45
  14. package/dist/extensions/Blocks/Recommendation/store/recommendation.js +57 -121
  15. package/dist/extensions/Blocks/Recommendation/utils/nodeConfigWriter.js +7 -7
  16. package/dist/guido.css +1 -1
  17. package/dist/library.js +15 -13
  18. package/dist/public/editorState.js +4 -0
  19. package/dist/services/recommendationApi.js +37 -46
  20. package/dist/src/@types/config/schemas.d.ts +0 -16
  21. package/dist/src/composables/useConfig.d.ts +0 -4
  22. package/dist/src/enums/extensions/recommendationBlock.d.ts +1 -5
  23. package/dist/src/extensions/Blocks/Recommendation/controls/main/strategy.d.ts +0 -2
  24. package/dist/src/extensions/Blocks/Recommendation/controls/main/utils.d.ts +0 -4
  25. package/dist/src/extensions/Blocks/Recommendation/store/recommendation.d.ts +1 -70
  26. package/dist/src/library.d.ts +2 -0
  27. package/dist/src/public/editorState.d.ts +14 -0
  28. package/dist/src/public/trackingIds.d.ts +6 -2
  29. package/dist/src/services/recommendationApi.d.ts +1 -2
  30. package/dist/src/stores/config.d.ts +0 -322
  31. package/dist/src/stores/guido-email-editor.d.ts +27 -27
  32. package/dist/src/stores/onboarding.d.ts +10 -808
  33. package/dist/static/styles/components/recommendation-strategy.css.js +5 -70
  34. package/dist/stores/config.js +60 -74
  35. package/dist/stores/guido-email-editor.js +0 -4
  36. package/dist/stores/onboarding.js +36 -46
  37. package/package.json +5 -1
  38. package/dist/components/organisms/extensions/recommendation/LegacyStrategyUpdatedModal.vue.js +0 -18
  39. package/dist/components/organisms/extensions/recommendation/LegacyStrategyUpdatedModal.vue2.js +0 -25
  40. package/dist/components/organisms/onboarding/RecommendationLegacyStrategyOnboarding.vue.js +0 -21
  41. package/dist/components/organisms/onboarding/RecommendationLegacyStrategyOnboarding.vue2.js +0 -46
  42. package/dist/components/organisms/onboarding/RecommendationStrategyOnboarding.vue.js +0 -21
  43. package/dist/components/organisms/onboarding/RecommendationStrategyOnboarding.vue2.js +0 -46
  44. package/dist/composables/useLegacyStrategyConversion.js +0 -61
  45. package/dist/extensions/Blocks/Recommendation/utils/legacyStrategyMigration.js +0 -42
  46. package/dist/src/components/organisms/extensions/recommendation/LegacyStrategyUpdatedModal.vue.d.ts +0 -2
  47. package/dist/src/components/organisms/onboarding/RecommendationLegacyStrategyOnboarding.vue.d.ts +0 -2
  48. package/dist/src/components/organisms/onboarding/RecommendationStrategyOnboarding.vue.d.ts +0 -2
  49. package/dist/src/composables/useLegacyStrategyConversion.d.ts +0 -3
  50. package/dist/src/extensions/Blocks/Recommendation/utils/legacyStrategyMigration.d.ts +0 -32
  51. package/dist/static/assets/icons/filled-arrow-rising.svg.js +0 -5
  52. package/dist/static/assets/icons/line-info.svg.js +0 -5
@@ -1,6 +1,6 @@
1
1
  var m = Object.defineProperty;
2
- var C = (g, l, t) => l in g ? m(g, l, { enumerable: !0, configurable: !0, writable: !0, value: t }) : g[l] = t;
3
- var r = (g, l, t) => C(g, typeof l != "symbol" ? l + "" : l, t);
2
+ var C = (h, l, t) => l in h ? m(h, l, { enumerable: !0, configurable: !0, writable: !0, value: t }) : h[l] = t;
3
+ var n = (h, l, t) => C(h, typeof l != "symbol" ? l + "" : l, t);
4
4
  import { useConfig as p } from "../../../../../composables/useConfig.js";
5
5
  import { ModificationDescription as y } from "../../../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
6
6
  import { CommonControl as N } from "../../../common-control.js";
@@ -12,9 +12,9 @@ import { registerNodeConfigWriter as b } from "../../utils/nodeConfigWriter.js";
12
12
  import { AlgorithmControl as T } from "./algorithm.js";
13
13
  import { ALGORITHM_CONTROL_ID as ut } from "./algorithm.js";
14
14
  import { CurrencyControl as P } from "./currency.js";
15
- import { CURRENCY_CONTROL_ID as gt } from "./currency.js";
15
+ import { CURRENCY_CONTROL_ID as ht } from "./currency.js";
16
16
  import { FiltersControl as S } from "./filters.js";
17
- import { FILTERS_CONTROL_ID as ht } from "./filters.js";
17
+ import { FILTERS_CONTROL_ID as gt } from "./filters.js";
18
18
  import { LayoutOrientationControl as O } from "./layoutOrientation.js";
19
19
  import { LAYOUT_ORIENTATION_CONTROL_ID as Ct } from "./layoutOrientation.js";
20
20
  import { LocaleControl as L } from "./locale.js";
@@ -29,38 +29,38 @@ import { ShuffleControl as F } from "./shuffle.js";
29
29
  import { SHUFFLE_CONTROL_ID as St } from "./shuffle.js";
30
30
  import { StrategyControl as w } from "./strategy.js";
31
31
  import { STRATEGY_CONTROL_ID as Lt } from "./strategy.js";
32
- import { setCurrencyAttributes as A, getBlockElement as B, isPartnerManagedBlock as v, updateProductContentInPlace as x, regenerateProductRowsWithStyles as U } from "./utils.js";
33
- import { adjustProductsToSize as kt, formatProductPrice as Dt, getCardComposition as Ft, getCurrentLayout as wt, getMainContainerTbody as At, regenerateMobileProductRows as Bt, updatePricesInPlace as vt, updateSingleProductContent as xt } from "./utils.js";
32
+ import { setCurrencyAttributes as A, getBlockElement as v, isPartnerManagedBlock as x, updateProductContentInPlace as B, regenerateProductRowsWithStyles as U } from "./utils.js";
33
+ import { adjustProductsToSize as kt, formatProductPrice as Dt, getCardComposition as Ft, getCurrentLayout as wt, getMainContainerTbody as At, regenerateMobileProductRows as vt, updatePricesInPlace as xt, updateSingleProductContent as Bt } from "./utils.js";
34
34
  import { useDebounceFn as f } from "../../../../../node_modules/@vueuse/shared/index.js";
35
35
  const $ = "ui-elements-recommendation-block";
36
36
  class at extends N {
37
37
  constructor() {
38
38
  super(...arguments);
39
- r(this, "store", R());
40
- r(this, "storeUnsubscription", () => {
39
+ n(this, "store", R());
40
+ n(this, "storeUnsubscription", () => {
41
41
  });
42
42
  // blockId -> fingerprint of the node config as it looked at the last sync.
43
- r(this, "syncedConfigs", /* @__PURE__ */ new Map());
43
+ n(this, "syncedConfigs", /* @__PURE__ */ new Map());
44
44
  // A config change waiting to reach the node config. Deferred so it can ride the
45
45
  // re-render's single apply() — one user action must cost one undo press.
46
- r(this, "pendingNodeConfigWrite", null);
47
- r(this, "pendingConfigFlushTimer", null);
46
+ n(this, "pendingNodeConfigWrite", null);
47
+ n(this, "pendingConfigFlushTimer", null);
48
48
  // Sub-control instances for lifecycle management
49
- r(this, "algorithmControl", null);
50
- r(this, "localeControl", null);
51
- r(this, "currencyControl", null);
52
- r(this, "productCountControl", null);
53
- r(this, "productLayoutControl", null);
54
- r(this, "filtersControl", null);
55
- r(this, "shuffleControl", null);
56
- r(this, "pricePlacementControl", null);
57
- r(this, "layoutOrientationControl", null);
58
- r(this, "strategyControl", null);
59
- r(this, "rrsEnabled", !1);
49
+ n(this, "algorithmControl", null);
50
+ n(this, "localeControl", null);
51
+ n(this, "currencyControl", null);
52
+ n(this, "productCountControl", null);
53
+ n(this, "productLayoutControl", null);
54
+ n(this, "filtersControl", null);
55
+ n(this, "shuffleControl", null);
56
+ n(this, "pricePlacementControl", null);
57
+ n(this, "layoutOrientationControl", null);
58
+ n(this, "strategyControl", null);
59
+ n(this, "rrsEnabled", !1);
60
60
  /**
61
61
  * Debounced product fetch to prevent rapid API calls during config changes
62
62
  */
63
- r(this, "_debouncedFetchProducts", f(async () => {
63
+ n(this, "_debouncedFetchProducts", f(async () => {
64
64
  try {
65
65
  await this.store.fetchRecommendationProducts();
66
66
  } finally {
@@ -78,16 +78,16 @@ class at extends N {
78
78
  * count. The store pads products to the configured size, so in-place only
79
79
  * fails when the size actually changed.
80
80
  */
81
- r(this, "_debouncedRegenerateWithProducts", f(() => {
81
+ n(this, "_debouncedRegenerateWithProducts", f(() => {
82
82
  const t = this.store.recommendationProducts;
83
83
  if (!this.currentNode || !this.api)
84
84
  return;
85
85
  const e = this.api.getDocumentModifier(), o = this._stagePendingNodeConfig(e);
86
- if (v(this.currentNode)) {
86
+ if (x(this.currentNode)) {
87
87
  o && (e.apply(new y("Update recommendation configuration")), this.pendingNodeConfigWrite = null, this._clearConfigFlush());
88
88
  return;
89
89
  }
90
- x({
90
+ B({
91
91
  currentNode: this.currentNode,
92
92
  documentModifier: e,
93
93
  products: t
@@ -142,8 +142,8 @@ class at extends N {
142
142
  const e = (i = this.getContainer()) == null ? void 0 : i.querySelector(".recommendation-controls-container");
143
143
  if (!e)
144
144
  return;
145
- const o = this._getRecommendationIdFromNode(t) === null ? null : c.getConfig(t), n = this.rrsEnabled && !!o && (!!(o != null && o.strategyId) || ((o == null ? void 0 : o.configVersion) ?? 0) >= _), s = this.rrsEnabled && !!o && !n;
146
- e.classList.toggle("strategy-block", n), e.classList.toggle("legacy-strategy-block", s);
145
+ const o = this._getRecommendationIdFromNode(t) === null ? null : c.getConfig(t), r = this.rrsEnabled && !!o && (!!(o != null && o.strategyId) || ((o == null ? void 0 : o.configVersion) ?? 0) >= _);
146
+ e.classList.toggle("strategy-block", r);
147
147
  }
148
148
  async onRender() {
149
149
  var o;
@@ -161,9 +161,9 @@ class at extends N {
161
161
  const e = this._getRecommendationIdFromNode(t);
162
162
  e !== null && e !== this.store.currentRecommendationId && this.store.setCurrentBlock(e), e !== null && this._syncNodeConfigIfChanged(e), this._showControlsForBlock(t), e !== null && !((o = this.store.blockStates[e]) != null && o.isInitialized) && this._fetchBlockData(e).then(() => {
163
163
  this._initializeSubControls();
164
- }), this._subControls.forEach((n) => {
165
- var s;
166
- n != null && n.api && (n.currentNode = t, (s = n.onTemplateNodeUpdated) == null || s.call(n, t));
164
+ }), this._subControls.forEach((r) => {
165
+ var i;
166
+ r != null && r.api && (r.currentNode = t, (i = r.onTemplateNodeUpdated) == null || i.call(r, t));
167
167
  });
168
168
  }
169
169
  onDestroy() {
@@ -210,11 +210,11 @@ class at extends N {
210
210
  const t = this.store.currentRecommendationId;
211
211
  if (!this.currentNode || !this.api || t === null)
212
212
  return;
213
- const { filters: e, strategyId: o, size: n, nodeConfigVersion: s } = this.store.recommendationConfigs;
213
+ const { filters: e, strategyId: o, size: r } = this.store.recommendationConfigs;
214
214
  this.pendingNodeConfigWrite = {
215
215
  blockId: t,
216
216
  node: this.currentNode,
217
- updates: { filters: e, strategyId: o, size: n, configVersion: s }
217
+ updates: { filters: e, strategyId: o, size: r }
218
218
  };
219
219
  }
220
220
  /**
@@ -257,12 +257,11 @@ class at extends N {
257
257
  JSON.stringify(o.filters) === JSON.stringify(t.updates.filters) && o.strategyId === t.updates.strategyId && o.size === t.updates.size || c.updateConfig(this.api, e, t.updates, "Update recommendation filters");
258
258
  }
259
259
  _syncNodeConfigToStore() {
260
- var n;
261
- const t = c.getConfig(this.currentNode), e = this.store.currentRecommendationId, o = e !== null && ((n = this.store.blockStates[e]) == null ? void 0 : n.isInitialized);
260
+ var r;
261
+ const t = c.getConfig(this.currentNode), e = this.store.currentRecommendationId, o = e !== null && ((r = this.store.blockStates[e]) == null ? void 0 : r.isInitialized);
262
262
  this.store.patchCurrentBlockConfig({
263
263
  strategy: t.strategy,
264
264
  strategyId: t.strategyId,
265
- nodeConfigVersion: t.configVersion,
266
265
  language: t.language,
267
266
  size: t.size,
268
267
  productIds: t.productIds,
@@ -301,8 +300,8 @@ class at extends N {
301
300
  t !== null && this.store.markBlockInitialized(t), (await Promise.allSettled([
302
301
  this.store.fetchRecommendationCreateData(),
303
302
  this.store.fetchRecommendationFilters()
304
- ])).forEach((o, n) => {
305
- o.status === "rejected" && console.warn(`Recommendation block: ${["fetchRecommendationCreateData", "fetchRecommendationFilters"][n]} failed`, o.reason);
303
+ ])).forEach((o, r) => {
304
+ o.status === "rejected" && console.warn(`Recommendation block: ${["fetchRecommendationCreateData", "fetchRecommendationFilters"][r]} failed`, o.reason);
306
305
  }), this._applySmartDefaults();
307
306
  try {
308
307
  await this.store.fetchRecommendationProducts();
@@ -324,30 +323,30 @@ class at extends N {
324
323
  if (!this.currentNode || !this.api)
325
324
  return;
326
325
  const t = c.getConfig(this.currentNode), e = {};
327
- let o = null, n = null, s = null;
326
+ let o = null, r = null, i = null;
328
327
  if (t.currency.code === a.currency.code) {
329
- const { currencyList: i } = this.store;
330
- i.length > 0 && (i.some(
328
+ const { currencyList: s } = this.store;
329
+ s.length > 0 && (s.some(
331
330
  (d) => d.value === `price.${a.currency.code}`
332
- ) || (o = i[0].value.replace("price.", ""), e.currency = {
331
+ ) || (o = s[0].value.replace("price.", ""), e.currency = {
333
332
  ...a.currency,
334
333
  code: o,
335
334
  symbol: o
336
335
  }));
337
336
  }
338
337
  if (t.strategy === a.strategy) {
339
- const i = this.store.getActivePredictiveAlgorithms;
340
- i.length > 0 && (i.some(
338
+ const s = this.store.getActivePredictiveAlgorithms;
339
+ s.length > 0 && (s.some(
341
340
  (d) => d.value === a.strategy
342
- ) || (n = i[0].value, e.strategy = n));
341
+ ) || (r = s[0].value, e.strategy = r));
343
342
  }
344
343
  if (t.language === a.language) {
345
- const i = this.store.getLanguages;
346
- i.length > 0 && (i.some(
344
+ const s = this.store.getLanguages;
345
+ s.length > 0 && (s.some(
347
346
  (d) => d.value === a.language
348
- ) || (s = i[0].value, e.language = s));
347
+ ) || (i = s[0].value, e.language = i));
349
348
  }
350
- !o && !n && !s || (c.updateConfig(
349
+ !o && !r && !i || (c.updateConfig(
351
350
  this.api,
352
351
  this.currentNode,
353
352
  e,
@@ -368,22 +367,22 @@ class at extends N {
368
367
  thousandSeparator: a.currency.thousandSeparator
369
368
  }
370
369
  } : {},
371
- ...n ? { strategy: n } : {},
372
- ...s ? { language: s } : {}
370
+ ...r ? { strategy: r } : {},
371
+ ...i ? { language: i } : {}
373
372
  }, { triggerRefetch: !1 }));
374
373
  }
375
374
  /**
376
375
  * Reads the recommendation-id attribute from the block element within the node
377
376
  */
378
377
  _getRecommendationIdFromNode(t) {
379
- const e = B(t);
378
+ const e = v(t);
380
379
  if (!e || !("getAttribute" in e))
381
380
  return null;
382
381
  const o = e.getAttribute(I);
383
382
  if (!o)
384
383
  return null;
385
- const n = parseInt(o);
386
- return Number.isNaN(n) ? null : n;
384
+ const r = parseInt(o);
385
+ return Number.isNaN(r) ? null : r;
387
386
  }
388
387
  /**
389
388
  * Listen to store changes that require product refresh or regeneration.
@@ -400,17 +399,17 @@ class at extends N {
400
399
  */
401
400
  _listenStateUpdates() {
402
401
  const { store: t } = this;
403
- let e = t.recommendationProducts, o = t.$state.configVersion, n = t.currentRecommendationId;
402
+ let e = t.recommendationProducts, o = t.$state.configVersion, r = t.currentRecommendationId;
404
403
  this.storeUnsubscription = t.$subscribe(() => {
405
- const s = t.currentRecommendationId;
406
- if (s !== n) {
407
- n = s, e = t.recommendationProducts, o = t.$state.configVersion;
404
+ const i = t.currentRecommendationId;
405
+ if (i !== r) {
406
+ r = i, e = t.recommendationProducts, o = t.$state.configVersion;
408
407
  return;
409
408
  }
410
- const i = t.$state.configVersion;
411
- i !== o && (o = i, this._capturePendingNodeConfigWrite(), this._debouncedFetchProducts());
412
- const u = t.recommendationProducts, d = u !== e, h = Array.isArray(u) && u.length > 0;
413
- d && h && (e = u, this._debouncedRegenerateWithProducts());
409
+ const s = t.$state.configVersion;
410
+ s !== o && (o = s, this._capturePendingNodeConfigWrite(), this._debouncedFetchProducts());
411
+ const u = t.recommendationProducts, d = u !== e, g = Array.isArray(u) && u.length > 0;
412
+ d && g && (e = u, this._debouncedRegenerateWithProducts());
414
413
  });
415
414
  }
416
415
  }
@@ -418,9 +417,9 @@ export {
418
417
  ut as ALGORITHM_CONTROL_ID,
419
418
  T as AlgorithmControl,
420
419
  $ as CONTROL_BLOCK_ID,
421
- gt as CURRENCY_CONTROL_ID,
420
+ ht as CURRENCY_CONTROL_ID,
422
421
  P as CurrencyControl,
423
- ht as FILTERS_CONTROL_ID,
422
+ gt as FILTERS_CONTROL_ID,
424
423
  S as FiltersControl,
425
424
  Ct as LAYOUT_ORIENTATION_CONTROL_ID,
426
425
  yt as LOCALE_CONTROL_ID,
@@ -439,15 +438,15 @@ export {
439
438
  w as StrategyControl,
440
439
  kt as adjustProductsToSize,
441
440
  Dt as formatProductPrice,
442
- B as getBlockElement,
441
+ v as getBlockElement,
443
442
  Ft as getCardComposition,
444
443
  wt as getCurrentLayout,
445
444
  At as getMainContainerTbody,
446
- v as isPartnerManagedBlock,
447
- Bt as regenerateMobileProductRows,
445
+ x as isPartnerManagedBlock,
446
+ vt as regenerateMobileProductRows,
448
447
  U as regenerateProductRowsWithStyles,
449
448
  A as setCurrencyAttributes,
450
- vt as updatePricesInPlace,
451
- x as updateProductContentInPlace,
452
- xt as updateSingleProductContent
449
+ xt as updatePricesInPlace,
450
+ B as updateProductContentInPlace,
451
+ Bt as updateSingleProductContent
453
452
  };
@@ -1,32 +1,26 @@
1
- var p = Object.defineProperty;
2
- var v = (i, s, t) => s in i ? p(i, s, { enumerable: !0, configurable: !0, writable: !0, value: t }) : i[s] = t;
3
- var r = (i, s, t) => v(i, typeof s != "symbol" ? s + "" : s, t);
4
- import { useLegacyStrategyConversion as _ } from "../../../../../composables/useLegacyStrategyConversion.js";
5
- import { ACADEMY_LINKS as b } from "../../../../../enums/academy.js";
6
- import { useOnboardingStore as S } from "../../../../../stores/onboarding.js";
7
- import { CommonControl as f } from "../../../common-control.js";
8
- import { useRecommendationExtensionStore as $ } from "../../store/recommendation.js";
9
- const C = "recommendation-strategy-control";
10
- class N extends f {
1
+ var d = Object.defineProperty;
2
+ var y = (r, s, t) => s in r ? d(r, s, { enumerable: !0, configurable: !0, writable: !0, value: t }) : r[s] = t;
3
+ var o = (r, s, t) => y(r, typeof s != "symbol" ? s + "" : s, t);
4
+ import { ACADEMY_LINKS as m } from "../../../../../enums/academy.js";
5
+ import { CommonControl as h } from "../../../common-control.js";
6
+ import { useRecommendationExtensionStore as u } from "../../store/recommendation.js";
7
+ const p = "recommendation-strategy-control";
8
+ class f extends h {
11
9
  constructor() {
12
10
  super(...arguments);
13
- r(this, "store", $());
14
- r(this, "onboardingStore", S());
15
- r(this, "legacyConversion", _());
16
- r(this, "storeUnsubscription", () => {
11
+ o(this, "store", u());
12
+ o(this, "storeUnsubscription", () => {
17
13
  });
18
- r(this, "listeners", []);
19
- r(this, "lastPaintedState", null);
14
+ o(this, "listeners", []);
15
+ o(this, "lastPaintedState", null);
20
16
  }
21
17
  getId() {
22
- return C;
18
+ return p;
23
19
  }
24
20
  getTemplate() {
25
21
  const t = this.api.translate(
26
22
  "You can assign a recommendation strategy by selecting an existing one or creating a new one to show specific content."
27
- ), e = this.api.translate("For more information, you can"), a = this.api.translate("visit Academy"), o = this.api.translate("Legacy Strategy"), n = this.api.translate(
28
- "Note that this is an older version of the Recommendation Strategy. We recommend you update it to the new Recommendation Strategy for an improved experience."
29
- );
23
+ ), e = this.api.translate("For more information, you can"), a = this.api.translate("visit Academy");
30
24
  return `
31
25
  <div class="strategy-control-container">
32
26
  <div class="strategy-control-header">
@@ -37,7 +31,7 @@ class N extends f {
37
31
  ${t}
38
32
  ${e}
39
33
  <a
40
- href="${b.EMAIL_RECOMMENDATION_BLOCK}"
34
+ href="${m.EMAIL_RECOMMENDATION_BLOCK}"
41
35
  target="_blank"
42
36
  rel="noopener noreferrer">${a}</a>.
43
37
  </p>
@@ -59,33 +53,6 @@ class N extends f {
59
53
  })
60
54
  ], "strategy-control-cta-row")}
61
55
  </div>
62
- <div data-strategy-legacy-state style="display: none;">
63
- <div class="strategy-control-notice-row">
64
- <div class="strategy-control-notice">
65
- <p class="strategy-control-notice-text">${n}</p>
66
- </div>
67
- </div>
68
- <div class="strategy-control-name-band">
69
- <span class="strategy-control-name">${o}</span>
70
- ${this._strategyAction({
71
- id: "guido__btn-update-legacy-strategy",
72
- label: this.api.translate("Update"),
73
- modifier: "update"
74
- })}
75
- </div>
76
- <div class="strategy-control-actions">
77
- ${this._strategyAction({
78
- id: "guido__btn-change-legacy-strategy",
79
- label: this.api.translate("Change"),
80
- modifier: "change"
81
- })}
82
- ${this._strategyAction({
83
- id: "guido__btn-remove-legacy-strategy",
84
- label: this.api.translate("Remove"),
85
- modifier: "remove"
86
- })}
87
- </div>
88
- </div>
89
56
  <div data-strategy-assigned-state style="display: none;">
90
57
  <div class="strategy-control-name-band">
91
58
  <span class="strategy-control-name" data-strategy-name></span>
@@ -121,8 +88,6 @@ class N extends f {
121
88
  this._renderState();
122
89
  }), this.store.recommendationConfigs.strategyId && !this.store.strategies.length && this.store.fetchStrategies().catch(() => {
123
90
  });
124
- const t = this.store.currentRecommendationId, e = t !== null && !!this.store.blockStates[t], a = this.store.isLegacyStrategyBlock;
125
- e && !this.store.recommendationConfigs.strategyId && !a && this.onboardingStore.startOnboarding("recommendationStrategyOnboarding"), e && a && this.onboardingStore.startOnboarding("recommendationLegacyStrategyOnboarding");
126
91
  }
127
92
  onDestroy() {
128
93
  this._teardown();
@@ -135,34 +100,25 @@ class N extends f {
135
100
  const t = this.getContainer();
136
101
  if (!t)
137
102
  return;
138
- const e = (a, o) => {
139
- const n = t.querySelector(a);
140
- n && (n.addEventListener("click", o), this.listeners.push({ element: n, handler: o }));
103
+ const e = (a, n) => {
104
+ const i = t.querySelector(a);
105
+ i && (i.addEventListener("click", n), this.listeners.push({ element: i, handler: n }));
141
106
  };
142
- e("#guido__btn-assign-strategy", () => this.store.openAssignStrategyDrawer()), e("#guido__btn-change-strategy", () => this.store.openAssignStrategyDrawer()), e("#guido__btn-change-legacy-strategy", () => this.store.openAssignStrategyDrawer()), e("#guido__btn-remove-strategy", () => this.store.openRemoveStrategyModal()), e("#guido__btn-remove-legacy-strategy", () => this.store.openRemoveStrategyModal()), e("#guido__btn-update-legacy-strategy", () => {
143
- this.legacyConversion.convertLegacyStrategy();
144
- });
107
+ e("#guido__btn-assign-strategy", () => this.store.openAssignStrategyDrawer()), e("#guido__btn-change-strategy", () => this.store.openAssignStrategyDrawer()), e("#guido__btn-remove-strategy", () => this.store.openRemoveStrategyModal());
145
108
  }
146
109
  _renderState() {
147
- var h;
148
- const { strategyId: t } = this.store.recommendationConfigs, e = t ? ((h = this.store.assignedStrategy) == null ? void 0 : h.name) ?? "" : "", a = this.store.legacyConversionLoading, o = this.store.isLegacyStrategyBlock, n = `${t}\0${e}\0${a}\0${o}`;
149
- if (n === this.lastPaintedState)
150
- return;
151
- const c = this.getContainer();
152
- if (!c)
110
+ var l;
111
+ const { strategyId: t } = this.store.recommendationConfigs, e = t ? ((l = this.store.assignedStrategy) == null ? void 0 : l.name) ?? "" : "", a = `${t}\0${e}`;
112
+ if (a === this.lastPaintedState)
153
113
  return;
154
- const d = c.querySelector("[data-strategy-empty-state]"), y = c.querySelector("[data-strategy-assigned-state]"), g = c.querySelector("[data-strategy-legacy-state]"), m = c.querySelector("[data-strategy-name]");
155
- if (!d || !y || !g)
114
+ const n = this.getContainer();
115
+ if (!n)
156
116
  return;
157
- const u = t ? y : o ? g : d;
158
- [d, y, g].forEach((l) => {
159
- l.style.display = l === u ? "" : "none";
160
- }), g.querySelectorAll("button").forEach((l) => {
161
- l.disabled = a;
162
- }), g.classList.toggle("is-converting", a), m && t && (m.textContent = e || `#${t}`), this.lastPaintedState = n;
117
+ const i = n.querySelector("[data-strategy-empty-state]"), c = n.querySelector("[data-strategy-assigned-state]"), g = n.querySelector("[data-strategy-name]");
118
+ !i || !c || (i.style.display = t ? "none" : "", c.style.display = t ? "" : "none", g && t && (g.textContent = e || `#${t}`), this.lastPaintedState = a);
163
119
  }
164
120
  }
165
121
  export {
166
- C as STRATEGY_CONTROL_ID,
167
- N as StrategyControl
122
+ p as STRATEGY_CONTROL_ID,
123
+ f as StrategyControl
168
124
  };
@@ -94,9 +94,9 @@ function j(e, t = {}) {
94
94
  const u = s ?? P(n), l = y.getConfig(n);
95
95
  if (u === "list" || !l.mobileLayoutEnabled)
96
96
  return te({ currentNode: n, documentModifier: o });
97
- const c = A(), f = $(r, c.recommendationProducts), a = i ?? U(n, c.filterList), p = `<td><table class="ins-recommendation-product-container ins-recommendation-mobile-container" width="100%" cellpadding="0" cellspacing="0" border="0">${k(f, u, {
97
+ const c = A(), a = $(r, c.recommendationProducts), f = i ?? U(n, c.filterList), p = `<td><table class="ins-recommendation-product-container ins-recommendation-mobile-container" width="100%" cellpadding="0" cellspacing="0" border="0">${k(a, u, {
98
98
  productsPerRow: l.mobileCardsInRow,
99
- composition: a,
99
+ composition: f,
100
100
  filterList: c.filterList,
101
101
  priceInline: !l.priceMovedToNextLine,
102
102
  // Match the initial render's gutter so a regeneration never changes block height (SD-143023, #386).
@@ -122,9 +122,9 @@ function ie(e, t = {}) {
122
122
  const u = n.querySelector(L) ?? n.querySelector(W);
123
123
  if (!u)
124
124
  return !1;
125
- const l = A(), c = $(r, l.recommendationProducts), { cardsInRow: f } = y.getConfig(n), a = i ?? U(n, l.filterList), d = s ?? P(n), p = y.getConfig(n), E = k(c, d, {
126
- productsPerRow: f,
127
- composition: a,
125
+ const l = A(), c = $(r, l.recommendationProducts), { cardsInRow: a } = y.getConfig(n), f = i ?? U(n, l.filterList), d = s ?? P(n), p = y.getConfig(n), E = k(c, d, {
126
+ productsPerRow: a,
127
+ composition: f,
128
128
  filterList: l.filterList,
129
129
  priceInline: !p.priceMovedToNextLine,
130
130
  // Match the initial render's gutter so a regeneration never changes block height (SD-143023, #386).
@@ -153,10 +153,10 @@ function ce(e, t, n) {
153
153
  return !1;
154
154
  const s = A(), i = r.split(",").filter(Boolean), u = D(i, o, s.filterList), l = [], c = u.join(",") !== i.join(",");
155
155
  c && l.push([R, u.join(",")]);
156
- const f = le(
156
+ const a = le(
157
157
  o.getAttribute(q)
158
- ), a = f && z(f, o, s.filterList);
159
- if (f && a && a.join(",") !== f.join(",") && l.push([q, JSON.stringify(a)]), l.length === 0)
158
+ ), f = a && z(a, o, s.filterList);
159
+ if (a && f && f.join(",") !== a.join(",") && l.push([q, JSON.stringify(f)]), l.length === 0)
160
160
  return !1;
161
161
  if (l.forEach(([d, p]) => {
162
162
  t.modifyHtml(o).setAttribute(d, p);
@@ -177,20 +177,19 @@ function Te(e) {
177
177
  products: r,
178
178
  layout: s,
179
179
  composition: i,
180
- skipStylePreservation: u,
181
- forceApply: l = !1
180
+ skipStylePreservation: u
182
181
  } = e;
183
182
  if (!t)
184
183
  return;
185
- const c = u ? {} : x(t), f = {
184
+ const l = u ? {} : x(t), c = {
186
185
  currentNode: t,
187
186
  documentModifier: n,
188
187
  products: r,
189
188
  layout: s,
190
189
  composition: i
191
190
  };
192
- let a = ie(f, c);
193
- a = j(f, c) || a, a && ce(t, n, i), (a || l) && n.apply(new S("Regenerate products with styles")), o == null || o();
191
+ let a = ie(c, l);
192
+ a = j(c, l) || a, a && (ce(t, n, i), n.apply(new S("Regenerate products with styles"))), o == null || o();
194
193
  }
195
194
  function Re(e, t) {
196
195
  return e.length === t ? e : e.length > t ? e.slice(0, t) : [...e, ...H(t - e.length)];
@@ -251,16 +250,16 @@ function se(e) {
251
250
  omnibusDiscountEl: l,
252
251
  buttonEl: c
253
252
  } = e;
254
- let f = !1;
253
+ let a = !1;
255
254
  if (o && "querySelector" in o) {
256
- const a = o.querySelector("img");
257
- a && (t.modifyHtml(a).setAttribute("src", X(n.image_url)).setAttribute("alt", n.name), f = !0);
255
+ const f = o.querySelector("img");
256
+ f && (t.modifyHtml(f).setAttribute("src", X(n.image_url)).setAttribute("alt", n.name), a = !0);
258
257
  const d = o.querySelector("a");
259
- d && (t.modifyHtml(d).setAttribute("href", n.url), f = !0);
258
+ d && (t.modifyHtml(d).setAttribute("href", n.url), a = !0);
260
259
  }
261
260
  if (r && "querySelector" in r) {
262
- const a = r.querySelector("strong") ?? r.querySelector("p");
263
- b(t, a ?? null, n.name) && (f = !0);
261
+ const f = r.querySelector("strong") ?? r.querySelector("p");
262
+ b(t, f ?? null, n.name) && (a = !0);
264
263
  }
265
264
  if (K({
266
265
  documentModifier: t,
@@ -269,11 +268,11 @@ function se(e) {
269
268
  oldPriceEl: i,
270
269
  omnibusPriceEl: u,
271
270
  omnibusDiscountEl: l
272
- }) && (f = !0), c && "querySelector" in c) {
273
- const a = c.querySelector("a.es-button") || c.querySelector("a");
274
- a && (t.modifyHtml(a).setAttribute("href", n.url), f = !0);
271
+ }) && (a = !0), c && "querySelector" in c) {
272
+ const f = c.querySelector("a.es-button") || c.querySelector("a");
273
+ f && (t.modifyHtml(f).setAttribute("href", n.url), a = !0);
275
274
  }
276
- return f;
275
+ return a;
277
276
  }
278
277
  function V(e) {
279
278
  return "querySelector" in e ? e.querySelector(L) ?? e : e;
@@ -309,14 +308,14 @@ function fe(e, t, n) {
309
308
  let s = !1;
310
309
  return r.forEach((i, u) => {
311
310
  const l = Math.min(i.length, n.length);
312
- i.slice(0, l).forEach((c, f) => {
311
+ i.slice(0, l).forEach((c, a) => {
313
312
  if (!("querySelector" in c))
314
313
  return;
315
- const a = ae(u, n[f]);
316
- if (a === null)
314
+ const f = ae(u, n[a]);
315
+ if (f === null)
317
316
  return;
318
317
  const d = c.querySelector("p") ?? null;
319
- b(t, d, a) && (s = !0);
318
+ b(t, d, f) && (s = !0);
320
319
  });
321
320
  }), s;
322
321
  }
@@ -337,9 +336,9 @@ function O(e, t, n) {
337
336
  `[esd-extension-block-id="${m.OMNIBUS_DISCOUNT}"]`
338
337
  ), c = e.querySelectorAll(
339
338
  `[esd-extension-block-id="${m.BUTTON}"]`
340
- ), f = Math.min(o.length, n.length);
341
- let a = !1;
342
- for (let d = 0; d < f; d++) {
339
+ ), a = Math.min(o.length, n.length);
340
+ let f = !1;
341
+ for (let d = 0; d < a; d++) {
343
342
  const p = se({
344
343
  documentModifier: t,
345
344
  product: n[d],
@@ -351,33 +350,33 @@ function O(e, t, n) {
351
350
  omnibusDiscountEl: l[d] ?? null,
352
351
  buttonEl: c[d] ?? null
353
352
  });
354
- a = a || p;
353
+ f = f || p;
355
354
  }
356
- return fe(e, t, n) && (a = !0), a;
355
+ return fe(e, t, n) && (f = !0), f;
357
356
  }
358
357
  function qe(e) {
359
- const { currentNode: t, documentModifier: n, products: o, forceApply: r = !1 } = e;
358
+ const { currentNode: t, documentModifier: n, products: o } = e;
360
359
  if (!t || !("querySelectorAll" in t))
361
360
  return !1;
362
- const s = V(t);
363
- if (!("querySelectorAll" in s) || s.querySelectorAll(
361
+ const r = V(t);
362
+ if (!("querySelectorAll" in r) || r.querySelectorAll(
364
363
  `[esd-extension-block-id="${m.IMAGE}"]`
365
364
  ).length !== o.length)
366
365
  return !1;
367
- let u = O(s, n, o);
368
- const l = P(t), c = y.getConfig(t);
369
- if (l !== "list" && c.mobileLayoutEnabled && "querySelector" in t) {
370
- const f = t.querySelector(N);
371
- if (f) {
366
+ let i = O(r, n, o);
367
+ const u = P(t), l = y.getConfig(t);
368
+ if (u !== "list" && l.mobileLayoutEnabled && "querySelector" in t) {
369
+ const c = t.querySelector(N);
370
+ if (c) {
372
371
  const a = O(
373
- f,
372
+ c,
374
373
  n,
375
374
  o
376
375
  );
377
- u = u || a;
376
+ i = i || a;
378
377
  }
379
378
  }
380
- return (u || r) && n.apply(new S("Updated product content in-place")), !0;
379
+ return i && n.apply(new S("Updated product content in-place")), !0;
381
380
  }
382
381
  function _(e, t, n) {
383
382
  if (!("querySelectorAll" in e))
@@ -418,8 +417,8 @@ function Me(e) {
418
417
  if (u !== "list" && l.mobileLayoutEnabled && "querySelector" in t) {
419
418
  const c = t.querySelector(N);
420
419
  if (c) {
421
- const f = _(c, n, r);
422
- i = i || f;
420
+ const a = _(c, n, r);
421
+ i = i || a;
423
422
  }
424
423
  }
425
424
  return i && n.apply(new S("Updated price formatting in-place")), i;