@useinsider/guido 3.8.1-beta.6c0ee3f → 3.8.1-beta.7e47cd7

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.
@@ -1,29 +1,29 @@
1
- var Q = Object.defineProperty;
2
- var Z = (p, g, t) => g in p ? Q(p, g, { enumerable: !0, configurable: !0, writable: !0, value: t }) : p[g] = t;
3
- var T = (p, g, t) => Z(p, typeof g != "symbol" ? g + "" : g, t);
4
- import { UIElementType as f, UEAttr as v, ModificationDescription as C } from "../../../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
5
- import { CommonControl as tt } from "../../../common-control.js";
6
- import { ATTR_PRODUCT_IMAGE as B, ATTR_PRODUCT_NAME as et, ATTR_PRODUCT_PRICE as rt, ATTR_PRODUCT_OLD_PRICE as ot, ATTR_PRODUCT_OMNIBUS_PRICE as st, ATTR_PRODUCT_OMNIBUS_DISCOUNT as it, ATTR_PRODUCT_BUTTON as H, ATTR_DATA_CUSTOM_ATTRIBUTES as F, ATTR_CUSTOM_PREFIX as d, BUILT_IN_DEFAULT_ATTRIBUTES as nt } from "../../constants/selectors.js";
7
- import { DEFAULT_COMPOSITION as P, DEFAULT_VISIBILITY as w } from "../../constants/defaultConfig.js";
8
- import { RecommendationConfigService as $ } from "../../services/configService.js";
1
+ var J = Object.defineProperty;
2
+ var Q = (p, _, t) => _ in p ? J(p, _, { enumerable: !0, configurable: !0, writable: !0, value: t }) : p[_] = t;
3
+ var T = (p, _, t) => Q(p, typeof _ != "symbol" ? _ + "" : _, t);
4
+ import { UIElementType as f, UEAttr as I, ModificationDescription as A } from "../../../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
5
+ import { CommonControl as Z } from "../../../common-control.js";
6
+ import { ATTR_PRODUCT_IMAGE as L, ATTR_PRODUCT_NAME as tt, ATTR_PRODUCT_PRICE as et, ATTR_PRODUCT_OLD_PRICE as rt, ATTR_PRODUCT_OMNIBUS_PRICE as ot, ATTR_PRODUCT_OMNIBUS_DISCOUNT as st, ATTR_PRODUCT_BUTTON as B, ATTR_DATA_CUSTOM_ATTRIBUTES as q, ATTR_CUSTOM_PREFIX as m, BUILT_IN_DEFAULT_ATTRIBUTES as it } from "../../constants/selectors.js";
7
+ import { DEFAULT_COMPOSITION as P, DEFAULT_VISIBILITY as F } from "../../constants/defaultConfig.js";
8
+ import { RecommendationConfigService as nt } from "../../services/configService.js";
9
9
  import { useRecommendationExtensionStore as lt } from "../../store/recommendation.js";
10
10
  import { ATTRIBUTE_CELL_CLASS as at, gridElementRenderer as ct, DEFAULT_CELL_PADDING as ut, buildFillerCell as dt } from "../../templates/grid/elementRenderer.js";
11
11
  import { listElementRenderer as mt } from "../../templates/list/elementRenderer.js";
12
- import { toDisplayName as ht, isDefaultAttribute as pt, toDisplayableAttributeValue as gt, buildElementRenderer as M } from "../../templates/utils.js";
12
+ import { toDisplayName as ht, isDefaultAttribute as pt, toDisplayableAttributeValue as _t, buildElementRenderer as w } from "../../templates/utils.js";
13
13
  import { getTableDisplayValue as ft } from "../../utils/tagName.js";
14
- import { isPartnerManagedBlock as _t, getCurrentLayout as bt } from "../main/utils.js";
15
- const yt = "ui-elements-recommendation-card-composition", A = ".recommendation-attribute-row", L = ".product-card-wrapper > tbody", V = ".product-info-cell > table > tbody", x = "data-card-composition", y = "data-attribute-type", N = "data-visibility", j = {
14
+ import { isPartnerManagedBlock as gt, getCurrentLayout as bt } from "../main/utils.js";
15
+ const yt = "ui-elements-recommendation-card-composition", S = ".recommendation-attribute-row", N = ".product-card-wrapper > tbody", M = ".product-info-cell > table > tbody", V = "data-card-composition", y = "data-attribute-type", v = "data-visibility", x = {
16
16
  ADD_ATTRIBUTE: "addAttribute"
17
- }, _ = 5, E = "reorderIcon_", h = [
18
- { key: B, label: "Product Image" },
19
- { key: et, label: "Product Name" },
20
- { key: rt, label: "Product Price" },
21
- { key: ot, label: "Product Original Price" },
22
- { key: st, label: "Omnibus Price" },
23
- { key: it, label: "Omnibus Discount" },
24
- { key: H, label: "Product Button" }
25
- ], Ct = new Set(h.map((p) => p.key)), S = "customAttr_", R = "deleteAttr_";
26
- class Ht extends tt {
17
+ }, g = 5, E = "reorderIcon_", h = [
18
+ { key: L, label: "Product Image" },
19
+ { key: tt, label: "Product Name" },
20
+ { key: et, label: "Product Price" },
21
+ { key: rt, label: "Product Original Price" },
22
+ { key: ot, label: "Omnibus Price" },
23
+ { key: st, label: "Omnibus Discount" },
24
+ { key: B, label: "Product Button" }
25
+ ], At = new Set(h.map((p) => p.key)), C = "customAttr_", R = "deleteAttr_";
26
+ class Ut extends Z {
27
27
  constructor() {
28
28
  super(...arguments);
29
29
  T(this, "store", lt());
@@ -47,23 +47,23 @@ class Ht extends tt {
47
47
  ${this._GuToggle(`visibility_${l.key}`)}
48
48
  </div>
49
49
  `).join(""), r = Array.from(
50
- { length: _ },
50
+ { length: g },
51
51
  (l, u) => `
52
- <div data-custom-select-key="${S}${u}" style="display: none;">
52
+ <div data-custom-select-key="${C}${u}" style="display: none;">
53
53
  ${this._GuSelect({
54
- name: `${S}${u}`,
54
+ name: `${C}${u}`,
55
55
  placeholder: this.api.translate("Select Attribute"),
56
56
  options: []
57
57
  })}
58
58
  </div>
59
59
  `
60
- ).join(""), e = h.length + _, o = Array.from(
60
+ ).join(""), e = h.length + g, o = Array.from(
61
61
  { length: e },
62
62
  (l, u) => `
63
63
  <div data-reorder-icon-key="${E}${u}" style="display: none;">
64
64
  <${f.BUTTON}
65
65
  class="drag-handle-btn flat-inline flat-white"
66
- ${v.BUTTON.name}="${E}${u}"
66
+ ${I.BUTTON.name}="${E}${u}"
67
67
  >
68
68
  <${f.ICON}
69
69
  src="reorder"
@@ -73,12 +73,12 @@ class Ht extends tt {
73
73
  </div>
74
74
  `
75
75
  ).join(""), s = Array.from(
76
- { length: _ },
76
+ { length: g },
77
77
  (l, u) => `
78
78
  <div data-custom-delete-key="${R}${u}" style="display: none;">
79
79
  <${f.BUTTON}
80
80
  class="custom-attr-delete flat-inline flat-white"
81
- ${v.BUTTON.name}="${R}${u}"
81
+ ${I.BUTTON.name}="${R}${u}"
82
82
  >
83
83
  <${f.ICON}
84
84
  src="delete"
@@ -89,15 +89,15 @@ class Ht extends tt {
89
89
  `
90
90
  ).join(""), i = "https://academy.insiderone.com/docs/new-editor-email-recommendation-block", n = this.api.translate(
91
91
  "Drag and drop the card elements to reorder them, adjust their visibility or add new attributes up to 5."
92
- ), c = this.api.translate("For more information, you can"), a = this.api.translate("visit Academy");
92
+ ), a = this.api.translate("For more information, you can"), c = this.api.translate("visit Academy");
93
93
  return `
94
94
  <div class="recommendation-controls-container" data-card-composition-control>
95
95
  <div class="container">
96
96
  <p class="card-composition-description">
97
97
  ${n}
98
- ${c}
98
+ ${a}
99
99
  <!-- cspell:disable-next-line -->
100
- <a href="${i}" target="_blank" rel="noopener noreferrer">${a}</a>.
100
+ <a href="${i}" target="_blank" rel="noopener noreferrer">${c}</a>.
101
101
  </p>
102
102
  </div>
103
103
 
@@ -120,7 +120,7 @@ class Ht extends tt {
120
120
  <div class="orderable-list" data-composition-list></div>
121
121
 
122
122
  ${this._GuButton({
123
- name: j.ADD_ATTRIBUTE,
123
+ name: x.ADD_ATTRIBUTE,
124
124
  label: this.api.translate("Add Attribute"),
125
125
  id: "guido__btn-add-attribute"
126
126
  })}
@@ -141,7 +141,7 @@ class Ht extends tt {
141
141
  const t = (e = this.getContainer()) == null ? void 0 : e.querySelector("[data-card-composition-control]");
142
142
  if (!t)
143
143
  return;
144
- const r = _t(this.currentNode);
144
+ const r = gt(this.currentNode);
145
145
  t.style.pointerEvents = r ? "none" : "", t.style.opacity = r ? "0.5" : "";
146
146
  }
147
147
  onTemplateNodeUpdated(t) {
@@ -163,8 +163,8 @@ class Ht extends tt {
163
163
  this._applyVisibilityToBlock(t.key, r);
164
164
  });
165
165
  });
166
- for (let t = 0; t < _; t++) {
167
- const r = `${S}${t}`, e = t;
166
+ for (let t = 0; t < g; t++) {
167
+ const r = `${C}${t}`, e = t;
168
168
  this.api.onValueChanged(r, (o) => {
169
169
  this._onCustomAttributeChanged(e, o);
170
170
  });
@@ -176,42 +176,36 @@ class Ht extends tt {
176
176
  _readCompositionFromNode() {
177
177
  if (!this.currentNode || !("getAttribute" in this.currentNode))
178
178
  return [...P];
179
- const t = this.currentNode.getAttribute(x);
180
- if (t)
181
- return t.split(",").filter(Boolean);
182
- const { composition: r } = $.getConfig(this.currentNode);
183
- return r != null && r.length ? [...r] : [...P];
179
+ const t = this.currentNode.getAttribute(V);
180
+ return t ? t.split(",").filter(Boolean) : [...P];
184
181
  }
185
182
  _readCustomAttributesFromNode() {
186
183
  if (!this.currentNode || !("getAttribute" in this.currentNode))
187
184
  return [];
188
- const t = this.currentNode.getAttribute(F);
189
- if (t)
190
- try {
191
- return JSON.parse(t);
192
- } catch {
193
- return [];
194
- }
195
- return this._readCompositionFromNode().filter((r) => r.startsWith(d)).map((r) => r.substring(d.length));
185
+ const t = this.currentNode.getAttribute(q);
186
+ if (!t)
187
+ return [];
188
+ try {
189
+ return JSON.parse(t);
190
+ } catch {
191
+ return [];
192
+ }
196
193
  }
197
194
  _readVisibilityFromRows() {
198
195
  if (!this.currentNode)
199
196
  return this._getDefaultVisibilities();
200
- const t = Array.from(this.currentNode.querySelectorAll(A)), r = this._extractVisibilityFromRows(t);
201
- if (Object.keys(r).length > 0)
202
- return this._mergeWithDefaults(r);
203
- const e = $.getConfig(this.currentNode).visibility;
204
- return this._mergeWithDefaults({ ...e });
197
+ const t = Array.from(this.currentNode.querySelectorAll(S)), r = this._extractVisibilityFromRows(t);
198
+ return this._mergeWithDefaults(r);
205
199
  }
206
200
  _getDefaultVisibilities() {
207
- return { ...w };
201
+ return { ...F };
208
202
  }
209
203
  _extractVisibilityFromRows(t) {
210
204
  const r = {};
211
205
  return t.forEach((e) => {
212
206
  if (!("getAttribute" in e))
213
207
  return;
214
- const o = e.getAttribute(y), s = e.getAttribute(N);
208
+ const o = e.getAttribute(y), s = e.getAttribute(v);
215
209
  o && s !== null && (r[o] = this._parseVisibilityValue(s));
216
210
  }), r;
217
211
  }
@@ -219,7 +213,7 @@ class Ht extends tt {
219
213
  return t === "1" || t === "true";
220
214
  }
221
215
  _mergeWithDefaults(t) {
222
- return Object.entries(w).forEach(([r, e]) => {
216
+ return Object.entries(F).forEach(([r, e]) => {
223
217
  r in t || (t[r] = e);
224
218
  }), t;
225
219
  }
@@ -243,19 +237,19 @@ class Ht extends tt {
243
237
  return !1;
244
238
  const s = new Set(r);
245
239
  let i = 0, n = 0;
246
- const c = t.map((a) => {
247
- if (Ct.has(a)) {
248
- const l = h.find((u) => u.key === a);
240
+ const a = t.map((c) => {
241
+ if (At.has(c)) {
242
+ const l = h.find((u) => u.key === c);
249
243
  return this._createBuiltInItemHtml(l, n++);
250
244
  }
251
- if (a.startsWith(d)) {
252
- const l = a.substring(d.length);
245
+ if (c.startsWith(m)) {
246
+ const l = c.substring(m.length);
253
247
  if (s.has(l))
254
- return this._createCustomItemHtml(a, i++, n++);
248
+ return this._createCustomItemHtml(c, i++, n++);
255
249
  }
256
250
  return "";
257
251
  }).join("");
258
- return this._rescueTogglesToStore(e), this._rescueSelectsToStore(e), this._rescueDeleteButtonsToStore(e), this._rescueReorderIconsToStore(e), o.innerHTML = c, this._moveTogglesIntoItems(e), this._moveSelectsIntoItems(e, r.length), this._moveDeleteButtonsIntoItems(e, r.length), this._moveReorderIconsIntoItems(e, n), !0;
252
+ return this._rescueTogglesToStore(e), this._rescueSelectsToStore(e), this._rescueDeleteButtonsToStore(e), this._rescueReorderIconsToStore(e), o.innerHTML = a, this._moveTogglesIntoItems(e), this._moveSelectsIntoItems(e, r.length), this._moveDeleteButtonsIntoItems(e, r.length), this._moveReorderIconsIntoItems(e, n), !0;
259
253
  }
260
254
  /**
261
255
  * Attempts to reorder existing orderable-item elements to match the composition order.
@@ -267,27 +261,27 @@ class Ht extends tt {
267
261
  const e = Array.from(t.querySelectorAll(".orderable-item"));
268
262
  if (e.length !== r.length)
269
263
  return !1;
270
- const o = e.map((a) => a.dataset.key).filter(Boolean);
264
+ const o = e.map((c) => c.dataset.key).filter(Boolean);
271
265
  if (o.length !== r.length)
272
266
  return !1;
273
267
  const s = [...o].sort().join(","), i = [...r].sort().join(",");
274
- if (s !== i || r.some((a) => a.startsWith(d)))
268
+ if (s !== i || r.some((c) => c.startsWith(m)))
275
269
  return !1;
276
270
  const n = /* @__PURE__ */ new Map();
277
- e.forEach((a) => {
278
- const { key: l } = a.dataset;
271
+ e.forEach((c) => {
272
+ const { key: l } = c.dataset;
279
273
  if (l) {
280
274
  const u = n.get(l) || [];
281
- u.push(a), n.set(l, u);
275
+ u.push(c), n.set(l, u);
282
276
  }
283
277
  });
284
- const c = /* @__PURE__ */ new Map();
285
- return r.forEach((a) => {
286
- const l = n.get(a);
278
+ const a = /* @__PURE__ */ new Map();
279
+ return r.forEach((c) => {
280
+ const l = n.get(c);
287
281
  if (!l)
288
282
  return;
289
- const u = c.get(a) || 0;
290
- c.set(a, u + 1), l[u] && t.appendChild(l[u]);
283
+ const u = a.get(c) || 0;
284
+ a.set(c, u + 1), l[u] && t.appendChild(l[u]);
291
285
  }), !0;
292
286
  }
293
287
  _createBuiltInItemHtml(t, r) {
@@ -335,8 +329,8 @@ class Ht extends tt {
335
329
  _initializeCustomSelects(t) {
336
330
  t.length !== 0 && setTimeout(() => {
337
331
  t.forEach((r, e) => {
338
- const o = `${S}${e}`, s = this._getSelectOptions(r, t);
339
- this.api.setUIEAttribute(o, v.SELECTPICKER.items, s), this.api.updateValues({ [o]: r });
332
+ const o = `${C}${e}`, s = this._getSelectOptions(r, t);
333
+ this.api.setUIEAttribute(o, I.SELECTPICKER.items, s), this.api.updateValues({ [o]: r });
340
334
  });
341
335
  }, 0);
342
336
  }
@@ -359,7 +353,7 @@ class Ht extends tt {
359
353
  */
360
354
  _moveSelectsIntoItems(t, r) {
361
355
  for (let e = 0; e < r; e++) {
362
- const o = `${S}${e}`, s = t.querySelector(`[data-custom-select-key="${o}"]`), i = t.querySelector(`[data-custom-select-slot="${e}"]`);
356
+ const o = `${C}${e}`, s = t.querySelector(`[data-custom-select-key="${o}"]`), i = t.querySelector(`[data-custom-select-slot="${e}"]`);
363
357
  if (s && i) {
364
358
  const n = s.querySelector("ue-select");
365
359
  n && i.appendChild(n);
@@ -386,8 +380,8 @@ class Ht extends tt {
386
380
  * Same rescue pattern as _rescueTogglesToStore — prevents innerHTML from destroying them.
387
381
  */
388
382
  _rescueSelectsToStore(t) {
389
- for (let r = 0; r < _; r++) {
390
- const e = `${S}${r}`, o = t.querySelector(`[data-custom-select-key="${e}"]`), s = t.querySelector(`[data-custom-select-slot="${r}"]`);
383
+ for (let r = 0; r < g; r++) {
384
+ const e = `${C}${r}`, o = t.querySelector(`[data-custom-select-key="${e}"]`), s = t.querySelector(`[data-custom-select-slot="${r}"]`);
391
385
  if (s) {
392
386
  const i = s.querySelector("ue-select");
393
387
  i && o && o.appendChild(i);
@@ -412,7 +406,7 @@ class Ht extends tt {
412
406
  * Same rescue pattern as _rescueSelectsToStore — prevents innerHTML from destroying them.
413
407
  */
414
408
  _rescueDeleteButtonsToStore(t) {
415
- for (let r = 0; r < _; r++) {
409
+ for (let r = 0; r < g; r++) {
416
410
  const e = `${R}${r}`, o = t.querySelector(`[data-custom-delete-key="${e}"]`), s = t.querySelector(`[data-custom-delete-slot="${r}"]`);
417
411
  if (s) {
418
412
  const i = s.querySelector("ue-button");
@@ -438,7 +432,7 @@ class Ht extends tt {
438
432
  * Same rescue pattern as _rescueDeleteButtonsToStore — prevents innerHTML from destroying them.
439
433
  */
440
434
  _rescueReorderIconsToStore(t) {
441
- const r = h.length + _;
435
+ const r = h.length + g;
442
436
  for (let e = 0; e < r; e++) {
443
437
  const o = `${E}${e}`, s = t.querySelector(`[data-reorder-icon-key="${o}"]`), i = t.querySelector(`[data-reorder-icon-slot="${e}"]`);
444
438
  if (i) {
@@ -464,24 +458,24 @@ class Ht extends tt {
464
458
  _setupDragAndDrop(t, r) {
465
459
  let e = null, o = null;
466
460
  t.addEventListener("dragstart", (s) => {
467
- var c;
461
+ var a;
468
462
  const n = s.target.closest(".orderable-item");
469
- n && (e = n, n.classList.add("dragging"), (c = s.dataTransfer) == null || c.setData("text/plain", n.dataset.key || ""));
463
+ n && (e = n, n.classList.add("dragging"), (a = s.dataTransfer) == null || a.setData("text/plain", n.dataset.key || ""));
470
464
  }, { signal: r }), t.addEventListener("dragend", () => {
471
465
  e && e.classList.remove("dragging"), e = null, o == null || o.classList.remove("drag-over"), o = null;
472
466
  }, { signal: r }), t.addEventListener("dragover", (s) => {
473
467
  s.preventDefault();
474
- const n = s.target.closest(".orderable-item"), c = n && n !== e ? n : null;
475
- c !== o && (o == null || o.classList.remove("drag-over"), o = c, o == null || o.classList.add("drag-over"));
468
+ const n = s.target.closest(".orderable-item"), a = n && n !== e ? n : null;
469
+ a !== o && (o == null || o.classList.remove("drag-over"), o = a, o == null || o.classList.add("drag-over"));
476
470
  }, { signal: r }), t.addEventListener("drop", (s) => {
477
471
  s.preventDefault();
478
472
  const n = s.target.closest(".orderable-item");
479
473
  if (!n || !e || n === e)
480
474
  return;
481
- const c = n.getBoundingClientRect(), a = c.top + c.height / 2;
482
- s.clientY < a ? t.insertBefore(e, n) : t.insertBefore(e, n.nextSibling), o == null || o.classList.remove("drag-over"), o = null, e.classList.remove("dragging");
483
- const u = t.querySelectorAll(".orderable-item"), m = Array.from(u).map((b) => b.dataset.key).filter(Boolean);
484
- this._onReorder(m), e = null;
475
+ const a = n.getBoundingClientRect(), c = a.top + a.height / 2;
476
+ s.clientY < c ? t.insertBefore(e, n) : t.insertBefore(e, n.nextSibling), o == null || o.classList.remove("drag-over"), o = null, e.classList.remove("dragging");
477
+ const u = t.querySelectorAll(".orderable-item"), d = Array.from(u).map((b) => b.dataset.key).filter(Boolean);
478
+ this._onReorder(d), e = null;
485
479
  }, { signal: r });
486
480
  }
487
481
  _setupDeleteHandler(t, r) {
@@ -497,7 +491,7 @@ class Ht extends tt {
497
491
  // Actions (Add, Delete, Reorder)
498
492
  // ========================================================================
499
493
  _onAddAttribute(t, r) {
500
- const e = `${d}${t}`, o = this._readCompositionFromNode();
494
+ const e = `${m}${t}`, o = this._readCompositionFromNode();
501
495
  o.push(e);
502
496
  const s = [...this._readCustomAttributesFromNode(), t];
503
497
  this._updateBothAttributes(o, s), this._injectCustomAttributeHtml(t, r, e, o), this._renderOrderableItems(o, s), this._initializeCustomSelects(s), this._updateAddButtonState();
@@ -510,7 +504,7 @@ class Ht extends tt {
510
504
  const r = this._readCustomAttributesFromNode();
511
505
  if (r[t] === void 0)
512
506
  return;
513
- const o = this._readCompositionFromNode(), s = this._findNthCustomKeyIndex(o, t), i = o.filter((c, a) => a !== s), n = r.filter((c, a) => a !== t);
507
+ const o = this._readCompositionFromNode(), s = this._findNthCustomKeyIndex(o, t), i = o.filter((a, c) => c !== s), n = r.filter((a, c) => c !== t);
514
508
  this._updateBothAttributes(i, n), this._removeCustomAttributeHtml(i), this._renderOrderableItems(i, n), this._initializeCustomSelects(n), this._updateAddButtonState();
515
509
  }
516
510
  /**
@@ -521,13 +515,13 @@ class Ht extends tt {
521
515
  const e = this._readCustomAttributesFromNode(), o = e[t];
522
516
  if (o === void 0 || o === r)
523
517
  return;
524
- const s = `${d}${r}`, i = this._readCompositionFromNode(), n = this._findNthCustomKeyIndex(i, t);
518
+ const s = `${m}${r}`, i = this._readCompositionFromNode(), n = this._findNthCustomKeyIndex(i, t);
525
519
  n !== -1 && (i[n] = s), e[t] = r;
526
- const c = this._getDisplayNameForAttribute(r);
527
- this._updateBothAttributes(i, e), this._injectCustomAttributeHtml(r, c, s, i), this._renderOrderableItems(i, e), this._initializeCustomSelects(e);
520
+ const a = this._getDisplayNameForAttribute(r);
521
+ this._updateBothAttributes(i, e), this._injectCustomAttributeHtml(r, a, s, i), this._renderOrderableItems(i, e), this._initializeCustomSelects(e);
528
522
  }
529
523
  _onReorder(t) {
530
- const r = t.filter((e) => e.startsWith(d)).map((e) => e.substring(d.length));
524
+ const r = t.filter((e) => e.startsWith(m)).map((e) => e.substring(m.length));
531
525
  this.reorderInProgress = !0;
532
526
  try {
533
527
  this._updateBothAttributes(t, r), this._getCurrentLayout() === "grid" && this._reorderProductAttributes(t);
@@ -545,61 +539,61 @@ class Ht extends tt {
545
539
  this._getCurrentLayout() === "grid" ? this._injectGridAttributeRow(t, r, e, o) : this._injectListAttributeRow(t, r, e, o);
546
540
  }
547
541
  _injectGridAttributeRow(t, r, e, o) {
548
- const s = this.currentNode.querySelectorAll(L);
542
+ const s = this.currentNode.querySelectorAll(N);
549
543
  if (!(s != null && s.length))
550
544
  return;
551
- const i = $.getConfig(this.currentNode), c = `0 ${Math.floor(i.columnSpacing / 2)}px`, a = this.api.getDocumentModifier(), l = this.store.recommendationProducts.length;
545
+ const i = nt.getConfig(this.currentNode), a = `0 ${Math.floor(i.columnSpacing / 2)}px`, c = this.api.getDocumentModifier(), l = this.store.recommendationProducts.length;
552
546
  let u = 0;
553
- s.forEach((m) => {
547
+ s.forEach((d) => {
554
548
  var k;
555
- const b = m.querySelector(A), I = ((k = b == null ? void 0 : b.querySelectorAll(`.${at}`)) == null ? void 0 : k.length) || 1, U = (100 / I).toFixed(2), { bgStyle: W, bgAttr: K } = this._extractSegmentBgFromCard(m), O = l > 0 ? Math.min(I, l - u) : I, z = o.map((q) => {
556
- if (q === e) {
557
- const G = Array.from(
549
+ const b = d.querySelector(S), $ = ((k = b == null ? void 0 : b.querySelectorAll(`.${at}`)) == null ? void 0 : k.length) || 1, U = (100 / $).toFixed(2), { bgStyle: j, bgAttr: W } = this._extractSegmentBgFromCard(d), O = l > 0 ? Math.min($, l - u) : $, K = o.map((H) => {
550
+ if (H === e) {
551
+ const z = Array.from(
558
552
  { length: O },
559
- (At, X) => {
560
- const J = this._resolveAttributeContent(
553
+ (St, Y) => {
554
+ const X = this._resolveAttributeContent(
561
555
  t,
562
556
  r,
563
- u + X
557
+ u + Y
564
558
  );
565
559
  return this._getGridCellHtml(
566
560
  t,
567
- J,
561
+ X,
568
562
  U,
563
+ j,
569
564
  W,
570
- K,
571
- c
565
+ a
572
566
  );
573
567
  }
574
- ).join(""), Y = dt(U, c).repeat(I - O);
575
- return `<tr class="recommendation-attribute-row" ${y}="${e}" ${N}="1">${G}${Y}</tr>`;
568
+ ).join(""), G = dt(U, a).repeat($ - O);
569
+ return `<tr class="recommendation-attribute-row" ${y}="${e}" ${v}="1">${z}${G}</tr>`;
576
570
  }
577
- const D = m.querySelector(
578
- `${A}[${y}="${q}"]`
571
+ const D = d.querySelector(
572
+ `${S}[${y}="${H}"]`
579
573
  );
580
574
  return D && "getOuterHTML" in D ? D.getOuterHTML() : "";
581
575
  }).join("");
582
- u += O, l > 0 && u >= l && (u = 0), a.modifyHtml(m).setInnerHtml(z);
583
- }), a.apply(new C(`${this.api.translate("Add custom attribute")}: ${r}`));
576
+ u += O, l > 0 && u >= l && (u = 0), c.modifyHtml(d).setInnerHtml(K);
577
+ }), c.apply(new A(`${this.api.translate("Add custom attribute")}: ${r}`));
584
578
  }
585
579
  _injectListAttributeRow(t, r, e, o) {
586
- const s = this.currentNode.querySelectorAll(V);
580
+ const s = this.currentNode.querySelectorAll(M);
587
581
  if (!(s != null && s.length))
588
582
  return;
589
- const i = o.filter((c) => c !== B && c !== H), n = this.api.getDocumentModifier();
590
- s.forEach((c, a) => {
583
+ const i = o.filter((a) => a !== L && a !== B), n = this.api.getDocumentModifier();
584
+ s.forEach((a, c) => {
591
585
  const l = i.map((u) => {
592
586
  if (u === e) {
593
- const b = this._resolveAttributeContent(t, r, a);
587
+ const b = this._resolveAttributeContent(t, r, c);
594
588
  return this._getListRowHtml(t, b, e);
595
589
  }
596
- const m = c.querySelector(
597
- `${A}[${y}="${u}"]`
590
+ const d = a.querySelector(
591
+ `${S}[${y}="${u}"]`
598
592
  );
599
- return m && "getOuterHTML" in m ? m.getOuterHTML() : "";
593
+ return d && "getOuterHTML" in d ? d.getOuterHTML() : "";
600
594
  }).join("");
601
- n.modifyHtml(c).setInnerHtml(l);
602
- }), n.apply(new C(`${this.api.translate("Add custom attribute")}: ${r}`));
595
+ n.modifyHtml(a).setInnerHtml(l);
596
+ }), n.apply(new A(`${this.api.translate("Add custom attribute")}: ${r}`));
603
597
  }
604
598
  /**
605
599
  * Removes a custom attribute by rebuilding product card content without it.
@@ -610,19 +604,19 @@ class Ht extends tt {
610
604
  return;
611
605
  const r = this._getCurrentLayout(), e = this.api.getDocumentModifier();
612
606
  if (r === "grid") {
613
- const o = this.currentNode.querySelectorAll(L);
607
+ const o = this.currentNode.querySelectorAll(N);
614
608
  o == null || o.forEach((s) => {
615
609
  const i = this._buildCompositionHtml(s, t);
616
610
  e.modifyHtml(s).setInnerHtml(i);
617
611
  });
618
612
  } else {
619
- const o = t.filter((i) => i !== B && i !== H), s = this.currentNode.querySelectorAll(V);
613
+ const o = t.filter((i) => i !== L && i !== B), s = this.currentNode.querySelectorAll(M);
620
614
  s == null || s.forEach((i) => {
621
615
  const n = this._buildCompositionHtml(i, o);
622
616
  e.modifyHtml(i).setInnerHtml(n);
623
617
  });
624
618
  }
625
- e.apply(new C(this.api.translate("Remove custom attribute")));
619
+ e.apply(new A(this.api.translate("Remove custom attribute")));
626
620
  }
627
621
  // ========================================================================
628
622
  // DOM Mutation (Block Root Attributes, Reorder)
@@ -635,13 +629,7 @@ class Ht extends tt {
635
629
  * producing a flicker on the custom attribute dropdowns.
636
630
  */
637
631
  _updateBothAttributes(t, r) {
638
- if (!this.currentNode)
639
- return;
640
- const e = {
641
- ...$.getConfig(this.currentNode),
642
- composition: t
643
- };
644
- this.api.getDocumentModifier().modifyHtml(this.currentNode).setAttribute(x, t.join(",")).setAttribute(F, JSON.stringify(r)).setNodeConfig(e).apply(new C(this.api.translate("Update card composition")));
632
+ this.currentNode && this.api.getDocumentModifier().modifyHtml(this.currentNode).setAttribute(V, t.join(",")).setAttribute(q, JSON.stringify(r)).apply(new A(this.api.translate("Update card composition")));
645
633
  }
646
634
  /**
647
635
  * Reorders attribute rows within each product card based on composition order.
@@ -650,14 +638,14 @@ class Ht extends tt {
650
638
  _reorderProductAttributes(t) {
651
639
  if (!this.currentNode)
652
640
  return;
653
- const r = this.currentNode.querySelectorAll(L);
641
+ const r = this.currentNode.querySelectorAll(N);
654
642
  if (!(r != null && r.length))
655
643
  return;
656
644
  const e = this.api.getDocumentModifier();
657
645
  r.forEach((o) => {
658
646
  const s = this._buildCompositionHtml(o, t);
659
647
  e.modifyHtml(o).setInnerHtml(s);
660
- }), e.apply(new C(this.api.translate("Reorder product attributes")));
648
+ }), e.apply(new A(this.api.translate("Reorder product attributes")));
661
649
  }
662
650
  /**
663
651
  * Builds HTML string with attributes ordered according to composition.
@@ -665,7 +653,7 @@ class Ht extends tt {
665
653
  */
666
654
  _buildCompositionHtml(t, r) {
667
655
  return r.reduce((e, o) => {
668
- const s = t.querySelector(`${A}[${y}="${o}"]`);
656
+ const s = t.querySelector(`${S}[${y}="${o}"]`);
669
657
  return s && "getOuterHTML" in s ? e + s.getOuterHTML() : e;
670
658
  }, "");
671
659
  }
@@ -675,19 +663,14 @@ class Ht extends tt {
675
663
  _applyVisibilityToBlock(t, r) {
676
664
  if (!this.currentNode)
677
665
  return;
678
- const e = this.currentNode.querySelectorAll(`${A}[${y}="${t}"]`);
666
+ const e = this.currentNode.querySelectorAll(`${S}[${y}="${t}"]`);
679
667
  if (!(e != null && e.length))
680
668
  return;
681
669
  const o = r ? "1" : "0", s = r ? this.api.translate("visible") : this.api.translate("hidden"), i = `${this.api.translate("Set visibility")}: ${t} → ${s}`, n = this.api.getDocumentModifier();
682
670
  e.forEach((a) => {
683
- const l = ft(a), u = r ? l : "none";
684
- n.modifyHtml(a).setStyle("display", u).setAttribute(N, o);
685
- });
686
- const c = {
687
- ...$.getConfig(this.currentNode),
688
- visibility: { ...this._readVisibilityFromRows(), [t]: r }
689
- };
690
- n.modifyHtml(this.currentNode).setNodeConfig(c), n.apply(new C(i));
671
+ const c = ft(a), l = r ? c : "none";
672
+ n.modifyHtml(a).setStyle("display", l).setAttribute(v, o);
673
+ }), n.apply(new A(i));
691
674
  }
692
675
  // ========================================================================
693
676
  // Utilities
@@ -700,7 +683,7 @@ class Ht extends tt {
700
683
  _findNthCustomKeyIndex(t, r) {
701
684
  let e = 0;
702
685
  for (let o = 0; o < t.length; o++)
703
- if (t[o].startsWith(d)) {
686
+ if (t[o].startsWith(m)) {
704
687
  if (e === r)
705
688
  return o;
706
689
  e++;
@@ -759,10 +742,10 @@ class Ht extends tt {
759
742
  * or when all available filters have already been added (no unused attributes left).
760
743
  */
761
744
  _updateAddButtonState() {
762
- const t = this._readCustomAttributesFromNode(), r = t.length >= _, e = new Set(t), o = this._getAddableFilters(), s = o.length > 0 && o.every((i) => e.has(i.attributeName));
745
+ const t = this._readCustomAttributesFromNode(), r = t.length >= g, e = new Set(t), o = this._getAddableFilters(), s = o.length > 0 && o.every((i) => e.has(i.attributeName));
763
746
  this.api.setUIEAttribute(
764
- j.ADD_ATTRIBUTE,
765
- v.BUTTON.disabled,
747
+ x.ADD_ATTRIBUTE,
748
+ I.BUTTON.disabled,
766
749
  r || s ? "true" : "false"
767
750
  );
768
751
  }
@@ -785,7 +768,7 @@ class Ht extends tt {
785
768
  * excluding default attributes already covered by built-in toggle items.
786
769
  */
787
770
  _getAddableFilters() {
788
- return Object.values(this.store.filterList).filter((t) => !(t.type === "defaultAttribute" && nt.has(t.attributeName)));
771
+ return Object.values(this.store.filterList).filter((t) => !(t.type === "defaultAttribute" && it.has(t.attributeName)));
789
772
  }
790
773
  /**
791
774
  * Looks up the display name for an attribute from the store's filterList.
@@ -802,28 +785,28 @@ class Ht extends tt {
802
785
  _resolveAttributeContent(t, r, e) {
803
786
  var n;
804
787
  const s = this.store.recommendationProducts[e], i = pt(t, this.store.filterList) ? s == null ? void 0 : s[t] : (n = s == null ? void 0 : s.product_attributes) == null ? void 0 : n[t];
805
- return gt(i) ?? r;
788
+ return _t(i) ?? r;
806
789
  }
807
790
  _getGridCellHtml(t, r, e, o = "", s = "", i = "") {
808
- const n = `${d}${t}`, c = M(ct, [n], this.store.filterList), a = {
791
+ const n = `${m}${t}`, a = w(ct, [n], this.store.filterList), c = {
809
792
  [t]: r,
810
793
  product_attributes: { [t]: r }
811
794
  };
812
- let l = c[n](a);
795
+ let l = a[n](c);
813
796
  return l = l.replace("<td", `<td width="${e}%"`), i && (l = l.replace(
814
797
  `padding: ${ut}`,
815
798
  `padding: ${i}`
816
799
  )), o && (l = l.replace(/style="table-layout: fixed;"/, `style="table-layout: fixed; ${o}"`)), s && (l = l.replace(/border="0"/, `border="0" bgcolor="${s}"`)), l;
817
800
  }
818
801
  _getListRowHtml(t, r, e) {
819
- const o = M(mt, [e], this.store.filterList), s = {
802
+ const o = w(mt, [e], this.store.filterList), s = {
820
803
  [t]: r,
821
804
  product_attributes: { [t]: r }
822
805
  }, n = o[e](s).replace(/<tr>/, "").replace(/<\/tr>/, "");
823
- return `<tr class="recommendation-attribute-row" ${y}="${e}" ${N}="1">${n}</tr>`;
806
+ return `<tr class="recommendation-attribute-row" ${y}="${e}" ${v}="1">${n}</tr>`;
824
807
  }
825
808
  }
826
809
  export {
827
810
  yt as COMPOSITION_CONTROL_BLOCK_ID,
828
- Ht as RecommendationCardCompositionControl
811
+ Ut as RecommendationCardCompositionControl
829
812
  };