@useinsider/guido 2.1.0-beta.febc521 → 2.2.0-beta.d819452

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 (106) hide show
  1. package/dist/@types/config/schemas.js +17 -17
  2. package/dist/extensions/Blocks/Items/controls/cardComposition.js +13 -4
  3. package/dist/extensions/Blocks/Recommendation/cardCompositionControl.js +153 -69
  4. package/dist/extensions/Blocks/Recommendation/constants.js +9 -1
  5. package/dist/extensions/Blocks/Recommendation/control.js +91 -61
  6. package/dist/extensions/Blocks/Recommendation/controls/cardBackgroundColorControl.js +68 -0
  7. package/dist/extensions/Blocks/Recommendation/controls/index.js +245 -0
  8. package/dist/extensions/Blocks/Recommendation/controls/nameTextTrimControl.js +74 -0
  9. package/dist/extensions/Blocks/Recommendation/controls/omnibusDiscountTextAfterControl.js +71 -0
  10. package/dist/extensions/Blocks/Recommendation/controls/omnibusDiscountTextBeforeControl.js +71 -0
  11. package/dist/extensions/Blocks/Recommendation/controls/omnibusPriceTextAfterControl.js +71 -0
  12. package/dist/extensions/Blocks/Recommendation/controls/omnibusPriceTextBeforeControl.js +71 -0
  13. package/dist/extensions/Blocks/Recommendation/controls/spacingControl.js +188 -0
  14. package/dist/extensions/Blocks/Recommendation/extension.js +16 -42
  15. package/dist/extensions/Blocks/Recommendation/settingsPanel.js +117 -72
  16. package/dist/extensions/Blocks/Recommendation/templates/blockTemplate.js +85 -64
  17. package/dist/extensions/Blocks/Recommendation/templates/migrationTemplate.js +54 -17
  18. package/dist/extensions/Blocks/Recommendation/templates/templateUtils.js +74 -45
  19. package/dist/extensions/Blocks/Recommendation/utils/preserveTextStyles.js +25 -0
  20. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js +39 -44
  21. package/dist/src/@types/config/schemas.d.ts +2 -2
  22. package/dist/src/extensions/Blocks/Recommendation/cardCompositionControl.d.ts +50 -3
  23. package/dist/src/extensions/Blocks/Recommendation/constants.d.ts +32 -0
  24. package/dist/src/extensions/Blocks/Recommendation/control.d.ts +5 -2
  25. package/dist/src/extensions/Blocks/Recommendation/controls/cardBackgroundColorControl.d.ts +25 -0
  26. package/dist/src/extensions/Blocks/Recommendation/controls/index.d.ts +592 -0
  27. package/dist/src/extensions/Blocks/Recommendation/controls/nameTextTrimControl.d.ts +16 -0
  28. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscountTextAfterControl.d.ts +15 -0
  29. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscountTextBeforeControl.d.ts +15 -0
  30. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPriceTextAfterControl.d.ts +15 -0
  31. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPriceTextBeforeControl.d.ts +15 -0
  32. package/dist/src/extensions/Blocks/Recommendation/controls/spacingControl.d.ts +60 -0
  33. package/dist/src/extensions/Blocks/Recommendation/templates/blockTemplate.d.ts +3 -3
  34. package/dist/src/extensions/Blocks/Recommendation/templates/templateUtils.d.ts +15 -7
  35. package/dist/src/extensions/Blocks/Recommendation/utils/preserveTextStyles.d.ts +19 -0
  36. package/dist/static/styles/components/wide-panel.css.js +0 -4
  37. package/dist/static/styles/customEditorStyle.css.js +13 -0
  38. package/package.json +1 -1
  39. package/dist/extensions/Blocks/Recommendation/controls/button/align.js +0 -13
  40. package/dist/extensions/Blocks/Recommendation/controls/button/border.js +0 -13
  41. package/dist/extensions/Blocks/Recommendation/controls/button/borderRadius.js +0 -13
  42. package/dist/extensions/Blocks/Recommendation/controls/button/color.js +0 -13
  43. package/dist/extensions/Blocks/Recommendation/controls/button/fitToContent.js +0 -13
  44. package/dist/extensions/Blocks/Recommendation/controls/button/fontFamily.js +0 -13
  45. package/dist/extensions/Blocks/Recommendation/controls/button/margins.js +0 -13
  46. package/dist/extensions/Blocks/Recommendation/controls/button/paddings.js +0 -13
  47. package/dist/extensions/Blocks/Recommendation/controls/button/text.js +0 -13
  48. package/dist/extensions/Blocks/Recommendation/controls/button/textSize.js +0 -13
  49. package/dist/extensions/Blocks/Recommendation/controls/button/textStyleAndFontColor.js +0 -13
  50. package/dist/extensions/Blocks/Recommendation/controls/image/margins.js +0 -13
  51. package/dist/extensions/Blocks/Recommendation/controls/image/size.js +0 -13
  52. package/dist/extensions/Blocks/Recommendation/controls/name/align.js +0 -13
  53. package/dist/extensions/Blocks/Recommendation/controls/name/background.js +0 -13
  54. package/dist/extensions/Blocks/Recommendation/controls/name/color.js +0 -13
  55. package/dist/extensions/Blocks/Recommendation/controls/name/fontFamily.js +0 -13
  56. package/dist/extensions/Blocks/Recommendation/controls/name/paddings.js +0 -13
  57. package/dist/extensions/Blocks/Recommendation/controls/name/size.js +0 -13
  58. package/dist/extensions/Blocks/Recommendation/controls/name/style.js +0 -13
  59. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/align.js +0 -13
  60. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/background.js +0 -13
  61. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/color.js +0 -13
  62. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/fontFamily.js +0 -13
  63. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/paddings.js +0 -13
  64. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/size.js +0 -13
  65. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/style.js +0 -13
  66. package/dist/extensions/Blocks/Recommendation/controls/price/align.js +0 -13
  67. package/dist/extensions/Blocks/Recommendation/controls/price/background.js +0 -13
  68. package/dist/extensions/Blocks/Recommendation/controls/price/color.js +0 -13
  69. package/dist/extensions/Blocks/Recommendation/controls/price/fontFamily.js +0 -13
  70. package/dist/extensions/Blocks/Recommendation/controls/price/paddings.js +0 -13
  71. package/dist/extensions/Blocks/Recommendation/controls/price/size.js +0 -13
  72. package/dist/extensions/Blocks/Recommendation/controls/price/style.js +0 -13
  73. package/dist/src/extensions/Blocks/Recommendation/controls/button/align.d.ts +0 -5
  74. package/dist/src/extensions/Blocks/Recommendation/controls/button/border.d.ts +0 -5
  75. package/dist/src/extensions/Blocks/Recommendation/controls/button/borderRadius.d.ts +0 -5
  76. package/dist/src/extensions/Blocks/Recommendation/controls/button/color.d.ts +0 -5
  77. package/dist/src/extensions/Blocks/Recommendation/controls/button/fitToContent.d.ts +0 -5
  78. package/dist/src/extensions/Blocks/Recommendation/controls/button/fontFamily.d.ts +0 -5
  79. package/dist/src/extensions/Blocks/Recommendation/controls/button/margins.d.ts +0 -5
  80. package/dist/src/extensions/Blocks/Recommendation/controls/button/paddings.d.ts +0 -5
  81. package/dist/src/extensions/Blocks/Recommendation/controls/button/text.d.ts +0 -5
  82. package/dist/src/extensions/Blocks/Recommendation/controls/button/textSize.d.ts +0 -5
  83. package/dist/src/extensions/Blocks/Recommendation/controls/button/textStyleAndFontColor.d.ts +0 -5
  84. package/dist/src/extensions/Blocks/Recommendation/controls/image/margins.d.ts +0 -5
  85. package/dist/src/extensions/Blocks/Recommendation/controls/image/size.d.ts +0 -5
  86. package/dist/src/extensions/Blocks/Recommendation/controls/name/align.d.ts +0 -5
  87. package/dist/src/extensions/Blocks/Recommendation/controls/name/background.d.ts +0 -5
  88. package/dist/src/extensions/Blocks/Recommendation/controls/name/color.d.ts +0 -5
  89. package/dist/src/extensions/Blocks/Recommendation/controls/name/fontFamily.d.ts +0 -5
  90. package/dist/src/extensions/Blocks/Recommendation/controls/name/paddings.d.ts +0 -5
  91. package/dist/src/extensions/Blocks/Recommendation/controls/name/size.d.ts +0 -5
  92. package/dist/src/extensions/Blocks/Recommendation/controls/name/style.d.ts +0 -5
  93. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/align.d.ts +0 -5
  94. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/background.d.ts +0 -5
  95. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/color.d.ts +0 -5
  96. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/fontFamily.d.ts +0 -5
  97. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/paddings.d.ts +0 -5
  98. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/size.d.ts +0 -5
  99. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/style.d.ts +0 -5
  100. package/dist/src/extensions/Blocks/Recommendation/controls/price/align.d.ts +0 -5
  101. package/dist/src/extensions/Blocks/Recommendation/controls/price/background.d.ts +0 -5
  102. package/dist/src/extensions/Blocks/Recommendation/controls/price/color.d.ts +0 -5
  103. package/dist/src/extensions/Blocks/Recommendation/controls/price/fontFamily.d.ts +0 -5
  104. package/dist/src/extensions/Blocks/Recommendation/controls/price/paddings.d.ts +0 -5
  105. package/dist/src/extensions/Blocks/Recommendation/controls/price/size.d.ts +0 -5
  106. package/dist/src/extensions/Blocks/Recommendation/controls/price/style.d.ts +0 -5
@@ -1,4 +1,4 @@
1
- import { object as o, number as b, optional as e, string as t, pipe as u, picklist as n, custom as d, boolean as c, array as a, minLength as p, literal as r, variant as S } from "../../node_modules/valibot/dist/index.js";
1
+ import { object as o, number as b, optional as e, string as t, pipe as u, picklist as n, custom as d, boolean as c, array as a, minLength as p, literal as r, variant as k } from "../../node_modules/valibot/dist/index.js";
2
2
  const m = {
3
3
  /** Promotional/marketing emails */
4
4
  PROMOTIONAL: 1,
@@ -11,7 +11,7 @@ const m = {
11
11
  ARCHITECT: 49,
12
12
  /** Unsubscribe page builder */
13
13
  UNSUBSCRIBE_PAGES: 97
14
- }, h = o({
14
+ }, S = o({
15
15
  /** Unique identifier for the template being edited */
16
16
  templateId: u(
17
17
  t(),
@@ -24,7 +24,7 @@ const m = {
24
24
  ),
25
25
  /** Optional variation ID for A/B testing */
26
26
  variationId: e(t())
27
- }), k = o({
27
+ }), h = o({
28
28
  /** Partner/organization name (required) */
29
29
  name: u(
30
30
  t(),
@@ -83,7 +83,7 @@ const m = {
83
83
  /** Locale for the editor UI */
84
84
  locale: e(t(), "en"),
85
85
  /** Path to translations object */
86
- translationsPath: e(t(), "window.trans.en"),
86
+ translationsPath: e(t(), "window.trans[Object.keys(window.trans)[0]]"),
87
87
  /** Migration date for template compatibility */
88
88
  migrationDate: e(b(), 1759696858),
89
89
  /** Email header settings */
@@ -130,7 +130,7 @@ const m = {
130
130
  "unsubscribe-block",
131
131
  "coupon-block",
132
132
  "items-block"
133
- ]), E = o({
133
+ ]), O = o({
134
134
  /** Default blocks to exclude from the editor */
135
135
  excludeDefaults: e(
136
136
  a(A),
@@ -148,7 +148,7 @@ const m = {
148
148
  description: e(t()),
149
149
  /** Priority for rule ordering (lower = earlier) */
150
150
  priority: b()
151
- }), N = o({
151
+ }), E = o({
152
152
  ...l.entries,
153
153
  type: r("replace"),
154
154
  /** String to search for */
@@ -157,7 +157,7 @@ const m = {
157
157
  replacement: t(),
158
158
  /** Replace all occurrences (default: false) */
159
159
  replaceAll: e(c())
160
- }), O = o({
160
+ }), N = o({
161
161
  ...l.entries,
162
162
  type: r("regex"),
163
163
  /** Regex pattern string */
@@ -179,9 +179,9 @@ const m = {
179
179
  (i) => typeof i == "function",
180
180
  "processor must be a function"
181
181
  )
182
- }), x = S("type", [
182
+ }), x = k("type", [
183
+ E,
183
184
  N,
184
- O,
185
185
  L,
186
186
  v
187
187
  ]), B = o({
@@ -203,9 +203,9 @@ const m = {
203
203
  }), D = o({
204
204
  // Required sections
205
205
  /** Identity configuration (required) */
206
- identity: h,
206
+ identity: S,
207
207
  /** Partner configuration (required) */
208
- partner: k,
208
+ partner: h,
209
209
  // Optional sections (with defaults)
210
210
  /** Template content and presets */
211
211
  template: e(R, {}),
@@ -216,14 +216,14 @@ const m = {
216
216
  /** Feature toggles */
217
217
  features: e(T, {}),
218
218
  /** Block configuration */
219
- blocks: e(E, {}),
219
+ blocks: e(O, {}),
220
220
  /** Compiler configuration */
221
221
  compiler: e(B, {}),
222
222
  /** Callbacks and event handlers */
223
223
  callbacks: e(P, {})
224
224
  });
225
225
  export {
226
- E as BlocksSchema,
226
+ O as BlocksSchema,
227
227
  P as CallbacksSchema,
228
228
  x as CompilerRuleSchema,
229
229
  B as CompilerSchema,
@@ -235,13 +235,13 @@ export {
235
235
  f as EmailHeaderSchema,
236
236
  T as FeaturesSchema,
237
237
  D as GuidoConfigSchema,
238
- h as IdentitySchema,
238
+ S as IdentitySchema,
239
239
  m as MessageType,
240
- k as PartnerSchema,
240
+ h as PartnerSchema,
241
241
  s as ProductType,
242
- O as RegexRuleSchema,
242
+ N as RegexRuleSchema,
243
243
  L as RemoveRuleSchema,
244
- N as ReplaceRuleSchema,
244
+ E as ReplaceRuleSchema,
245
245
  R as TemplateSchema,
246
246
  I as UISchema
247
247
  };
@@ -142,10 +142,19 @@ class S extends I {
142
142
  });
143
143
  }
144
144
  _listenToFormUpdates() {
145
- this.api.onValueChanged(i.PRODUCT_IMAGE, (t) => this._onProductImageChange(t)), this.api.onValueChanged(i.PRODUCT_NAME, (t) => this._onProductNameChange(t)), this.api.onValueChanged(i.PRODUCT_QUANTITY, (t) => this._onProductQuantityChange(t)), this.api.onValueChanged(i.PRODUCT_PRICE, (t) => this._onProductPriceChange(t)), this.api.onValueChanged(
146
- i.PRODUCT_ORIGINAL_PRICE,
147
- (t) => this._onProductOriginalPriceChange(t)
148
- ), this.api.onValueChanged(i.PRODUCT_BUTTON, (t) => this._onProductButtonChange(t));
145
+ this.api.onValueChanged(i.PRODUCT_IMAGE, (t) => {
146
+ this._onProductImageChange(t);
147
+ }), this.api.onValueChanged(i.PRODUCT_NAME, (t) => {
148
+ this._onProductNameChange(t);
149
+ }), this.api.onValueChanged(i.PRODUCT_QUANTITY, (t) => {
150
+ this._onProductQuantityChange(t);
151
+ }), this.api.onValueChanged(i.PRODUCT_PRICE, (t) => {
152
+ this._onProductPriceChange(t);
153
+ }), this.api.onValueChanged(i.PRODUCT_ORIGINAL_PRICE, (t) => {
154
+ this._onProductOriginalPriceChange(t);
155
+ }), this.api.onValueChanged(i.PRODUCT_BUTTON, (t) => {
156
+ this._onProductButtonChange(t);
157
+ });
149
158
  }
150
159
  _onProductImageChange(t) {
151
160
  var o;
@@ -1,103 +1,187 @@
1
- var m = Object.defineProperty;
2
- var y = (n, o, i) => o in n ? m(n, o, { enumerable: !0, configurable: !0, writable: !0, value: i }) : n[o] = i;
3
- var a = (n, o, i) => y(n, typeof o != "symbol" ? o + "" : o, i);
4
- import { ModificationDescription as u } from "../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
5
- import { CommonControl as b } from "../common-control.js";
6
- const h = "ui-elements-recommendation-card-composition", s = [
7
- { key: "productImage", label: "Product Image", visible: !0 },
8
- { key: "productName", label: "Product Name", visible: !0 },
9
- { key: "productPrice", label: "Product Price", visible: !0 },
10
- { key: "productOriginalPrice", label: "Product Original Price", visible: !0 },
11
- { key: "productButton", label: "Product Button", visible: !0 }
1
+ import { ModificationDescription as n } from "../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
2
+ import { CommonControl as _ } from "../common-control.js";
3
+ import { ATTR_PRODUCT_IMAGE as m, ATTR_PRODUCT_NAME as y, ATTR_PRODUCT_PRICE as T, ATTR_PRODUCT_OLD_PRICE as h, ATTR_PRODUCT_OMNIBUS_PRICE as C, ATTR_PRODUCT_OMNIBUS_DISCOUNT as f, ATTR_PRODUCT_BUTTON as g } from "./constants.js";
4
+ const R = "ui-elements-recommendation-card-composition", l = ".recommendation-attribute-row", A = "tr.recommendation-product-row", c = "data-card-composition", a = "data-attribute-type", d = "data-visibility", s = [
5
+ { key: m, label: "Product Image", visible: !0 },
6
+ { key: y, label: "Product Name", visible: !0 },
7
+ { key: T, label: "Product Price", visible: !0 },
8
+ { key: h, label: "Product Original Price", visible: !0 },
9
+ { key: C, label: "Omnibus Price", visible: !1 },
10
+ { key: f, label: "Omnibus Discount", visible: !1 },
11
+ { key: g, label: "Product Button", visible: !0 }
12
12
  ];
13
- class g extends b {
14
- constructor() {
15
- super(...arguments);
16
- a(this, "currentComposition", []);
17
- a(this, "currentVisibility", {});
18
- }
13
+ class N extends _ {
19
14
  getId() {
20
- return h;
15
+ return R;
21
16
  }
22
17
  getTemplate() {
23
- const i = s.map((e) => ({
24
- key: e.key,
25
- label: e.label,
26
- content: `
27
- <div style="display: flex; align-items: center; justify-content: space-between;
28
- padding: 8px; gap: 8px;">
29
- <span style="flex: 1;">${e.label}</span>
30
- ${this._GuToggle(`visibility_${e.key}`)}
31
- </div>
32
- `
18
+ const t = s.map((i) => ({
19
+ key: i.key,
20
+ label: i.label,
21
+ content: this._createItemContent(i.label, i.key)
33
22
  }));
34
23
  return `
35
24
  <div class="container">
36
25
  ${this._GuLabel({ text: "Card Element Order & Visibility" })}
37
- ${this._GuOrderable("cardComposition", i)}
26
+ ${this._GuOrderable("cardComposition", t)}
38
27
  </div>
39
28
  `;
40
29
  }
41
30
  onRender() {
42
- this._initializeComposition(), this.api.onValueChanged("cardComposition", (i) => {
43
- this.currentComposition = i, this._applyCompositionToBlock(i);
44
- }), s.forEach((i) => {
45
- this.api.onValueChanged(`visibility_${i.key}`, (e) => {
46
- this.currentVisibility[i.key] = e, this._applyVisibilityToBlock();
31
+ this._initializeComposition(), this._registerValueChangeListeners();
32
+ }
33
+ onTemplateNodeUpdated(t) {
34
+ super.onTemplateNodeUpdated(t), this._initializeComposition();
35
+ }
36
+ /**
37
+ * Creates the HTML content for an orderable item with label and toggle
38
+ */
39
+ _createItemContent(t, i) {
40
+ return `
41
+ <div style="display: flex; align-items: center; justify-content: space-between;
42
+ padding: 8px; gap: 8px;">
43
+ <span style="flex: 1;">${t}</span>
44
+ ${this._GuToggle(`visibility_${i}`)}
45
+ </div>
46
+ `;
47
+ }
48
+ /**
49
+ * Registers event listeners for composition and visibility changes
50
+ */
51
+ _registerValueChangeListeners() {
52
+ this.api.onValueChanged("cardComposition", (t) => {
53
+ this._applyCompositionToBlock(t);
54
+ }), s.forEach((t) => {
55
+ this.api.onValueChanged(`visibility_${t.key}`, (i) => {
56
+ this._applyVisibilityToBlock(t.key, i);
47
57
  });
48
58
  });
49
59
  }
50
- onTemplateNodeUpdated(i) {
51
- super.onTemplateNodeUpdated(i), this._initializeComposition();
52
- }
53
60
  /**
54
- * Initialize the composition order and visibility from the block or use defaults
61
+ * Initializes composition order and visibility state from the current node
55
62
  */
56
63
  _initializeComposition() {
57
- var p;
58
- const i = (p = this.currentNode) == null ? void 0 : p.querySelector(".ins-recommendation-v3-block-v2");
59
- let e = null, l = null;
60
- if (i && "getAttribute" in i && (e = i.getAttribute("data-card-composition"), l = i.getAttribute("data-card-visibility")), e) {
61
- const t = e.split(",").filter(Boolean), r = s.map((c) => c.key);
62
- t.every((c) => r.includes(c)) && t.length > 0 ? this.currentComposition = t : this.currentComposition = r;
63
- } else
64
- this.currentComposition = s.map((t) => t.key);
65
- if (l)
66
- try {
67
- const t = JSON.parse(l);
68
- this.currentVisibility = t;
69
- } catch {
70
- this.currentVisibility = s.reduce((t, r) => (t[r.key] = r.visible, t), {});
71
- }
72
- else
73
- this.currentVisibility = s.reduce((t, r) => (t[r.key] = r.visible, t), {});
74
- const d = {
75
- cardComposition: this.currentComposition
64
+ const t = this._readCompositionFromNode(), i = this._readVisibilityFromRows(), e = {
65
+ cardComposition: t,
66
+ ...this._buildVisibilityValues(i)
76
67
  };
77
- s.forEach((t) => {
78
- d[`visibility_${t.key}`] = this.currentVisibility[t.key] ?? !0;
79
- }), this.api.updateValues(d);
68
+ this.api.updateValues(e);
69
+ }
70
+ /**
71
+ * Reads composition order from node's data-card-composition attribute
72
+ * Falls back to default order if attribute is not present
73
+ */
74
+ _readCompositionFromNode() {
75
+ if (!this.currentNode || !("getAttribute" in this.currentNode))
76
+ return s.map((i) => i.key);
77
+ const t = this.currentNode.getAttribute(c);
78
+ return t ? t.split(",").filter(Boolean) : s.map((i) => i.key);
79
+ }
80
+ /**
81
+ * Builds visibility values object from the visibility map
82
+ */
83
+ _buildVisibilityValues(t) {
84
+ return s.reduce((i, e) => (i[`visibility_${e.key}`] = t[e.key] ?? !0, i), {});
85
+ }
86
+ /**
87
+ * Read visibility state from individual row elements' data-visibility attributes
88
+ * This ensures toggles reflect the actual DOM state
89
+ */
90
+ _readVisibilityFromRows() {
91
+ if (!this.currentNode)
92
+ return this._getDefaultVisibilities();
93
+ const t = Array.from(this.currentNode.querySelectorAll(l));
94
+ console.debug("_readVisibilityFromRows - found attribute rows:", t.length);
95
+ const i = this._extractVisibilityFromRows(t);
96
+ return this._mergeWithDefaults(i);
97
+ }
98
+ /**
99
+ * Returns default visibility values for all items
100
+ */
101
+ _getDefaultVisibilities() {
102
+ return s.reduce((t, i) => (t[i.key] = i.visible, t), {});
103
+ }
104
+ /**
105
+ * Extracts visibility values from DOM nodes
106
+ */
107
+ _extractVisibilityFromRows(t) {
108
+ const i = {};
109
+ return t.forEach((e) => {
110
+ if (!("getAttribute" in e))
111
+ return;
112
+ const o = e.getAttribute(a), r = e.getAttribute(d);
113
+ o && r !== null && (i[o] = this._parseVisibilityValue(r), console.debug(
114
+ `_readVisibilityFromRows - ${o}: ${i[o]} (raw: ${r})`
115
+ ));
116
+ }), i;
117
+ }
118
+ /**
119
+ * Parses visibility value from string to boolean
120
+ * Accepts "1", "true" as true, everything else as false
121
+ */
122
+ _parseVisibilityValue(t) {
123
+ return t === "1" || t === "true";
124
+ }
125
+ /**
126
+ * Merges extracted visibilities with default values for missing keys
127
+ */
128
+ _mergeWithDefaults(t) {
129
+ return s.forEach((i) => {
130
+ i.key in t || (t[i.key] = i.visible, console.debug(`_readVisibilityFromRows - ${i.key}: using default ${i.visible}`));
131
+ }), t;
80
132
  }
81
133
  /**
82
134
  * Apply the reordered composition to the block's HTML structure
135
+ * Updates the data-card-composition attribute and reorders product attributes
136
+ */
137
+ _applyCompositionToBlock(t) {
138
+ if (console.debug("_applyCompositionToBlock - composition:", t), !this.currentNode) {
139
+ console.debug("_applyCompositionToBlock - no current node");
140
+ return;
141
+ }
142
+ this.api.getDocumentModifier().modifyHtml(this.currentNode).setAttribute(c, t.join(",")).apply(new n("Update card composition")), this._reorderProductAttributes(t);
143
+ }
144
+ /**
145
+ * Reorders attribute rows within each product row based on composition order
83
146
  */
84
- _applyCompositionToBlock(i) {
147
+ _reorderProductAttributes(t) {
85
148
  if (!this.currentNode)
86
149
  return;
87
- const e = this.currentNode.querySelector(".ins-recommendation-v3-block-v2");
88
- e && this.api.getDocumentModifier().modifyHtml(e).setAttribute("data-card-composition", i.join(",")).apply(new u("Stored card composition order"));
150
+ const i = this.currentNode.querySelectorAll(A);
151
+ if (!(i != null && i.length))
152
+ return;
153
+ const e = this.api.getDocumentModifier();
154
+ i.forEach((o) => {
155
+ const r = this._buildCompositionHtml(o, t);
156
+ e.modifyHtml(o).setInnerHtml(r);
157
+ }), e.apply(new n("Reorder product attributes"));
158
+ }
159
+ /**
160
+ * Builds HTML string with attributes ordered according to composition
161
+ */
162
+ _buildCompositionHtml(t, i) {
163
+ return i.reduce((e, o) => {
164
+ const r = t.querySelector(`${l}[${a}="${o}"]`);
165
+ return r && "getOuterHTML" in r ? e + r.getOuterHTML() : e;
166
+ }, "");
89
167
  }
90
168
  /**
91
169
  * Apply visibility changes to the block's HTML structure
170
+ * Updates display style and data-visibility attribute for all matching rows
92
171
  */
93
- _applyVisibilityToBlock() {
94
- if (!this.currentNode)
172
+ _applyVisibilityToBlock(t, i) {
173
+ if (console.debug("_applyVisibilityToBlock", t, i), !this.currentNode)
174
+ return;
175
+ const e = this.currentNode.querySelectorAll(`${l}[${a}="${t}"]`);
176
+ if (!(e != null && e.length))
95
177
  return;
96
- const i = this.currentNode.querySelector(".ins-recommendation-v3-block-v2");
97
- i && this.api.getDocumentModifier().modifyHtml(i).setAttribute("data-card-visibility", JSON.stringify(this.currentVisibility)).apply(new u("Stored card visibility settings"));
178
+ const o = i ? "table-row" : "none", r = i ? "1" : "0", p = `Set ${t} visibility to ${i ? "visible" : "hidden"}`, u = this.api.getDocumentModifier();
179
+ e.forEach((b) => {
180
+ u.modifyHtml(b).setStyle("display", o).setAttribute(d, r);
181
+ }), u.apply(new n(p));
98
182
  }
99
183
  }
100
184
  export {
101
- h as COMPOSITION_CONTROL_BLOCK_ID,
102
- g as RecommendationCardCompositionControl
185
+ R as COMPOSITION_CONTROL_BLOCK_ID,
186
+ N as RecommendationCardCompositionControl
103
187
  };
@@ -1,5 +1,13 @@
1
- var o = /* @__PURE__ */ ((c) => (c.BUTTON = "recommendation-block-button", c.NAME = "recommendation-block-name", c.PRICE = "recommendation-block-price", c.OLD_PRICE = "recommendation-block-old-price", c.IMAGE = "recommendation-block-image", c))(o || {}), r = /* @__PURE__ */ ((c) => (c.BUTTON_ALIGN = "recommendation-block-button-align-control", c.BUTTON_BORDER = "recommendation-block-button-border-control", c.BUTTON_BORDER_RADIUS = "recommendation-block-button-border-radius-control", c.BUTTON_COLOR = "recommendation-block-button-color-control", c.BUTTON_FIT_TO_CONTENT = "recommendation-block-button-fit-to-content-control", c.BUTTON_FONT_FAMILY = "recommendation-block-button-font-family-control", c.BUTTON_MARGINS = "recommendation-block-button-margins-control", c.BUTTON_PADDINGS = "recommendation-block-button-paddings-control", c.BUTTON_TEXT = "recommendation-block-button-text-control", c.BUTTON_TEXT_SIZE = "recommendation-block-button-text-size-control", c.BUTTON_TEXT_STYLE_AND_FONT_COLOR = "recommendation-block-button-text-style-and-font-color-control", c.NAME_ALIGN = "recommendation-block-name-align-control", c.NAME_BACKGROUND = "recommendation-block-name-background-control", c.NAME_COLOR = "recommendation-block-name-color-control", c.NAME_FONT_FAMILY = "recommendation-block-name-font-family-control", c.NAME_PADDINGS = "recommendation-block-name-paddings-control", c.NAME_SIZE = "recommendation-block-name-size-control", c.NAME_STYLE = "recommendation-block-name-style-control", c.PRICE_ALIGN = "recommendation-block-price-align-control", c.PRICE_BACKGROUND = "recommendation-block-price-background-control", c.PRICE_COLOR = "recommendation-block-price-color-control", c.PRICE_FONT_FAMILY = "recommendation-block-price-font-family-control", c.PRICE_PADDINGS = "recommendation-block-price-paddings-control", c.PRICE_SIZE = "recommendation-block-price-size-control", c.PRICE_STYLE = "recommendation-block-price-style-control", c.OLD_PRICE_ALIGN = "recommendation-block-old-price-align-control", c.OLD_PRICE_BACKGROUND = "recommendation-block-old-price-background-control", c.OLD_PRICE_COLOR = "recommendation-block-old-price-color-control", c.OLD_PRICE_FONT_FAMILY = "recommendation-block-old-price-font-family-control", c.OLD_PRICE_PADDINGS = "recommendation-block-old-price-paddings-control", c.OLD_PRICE_SIZE = "recommendation-block-old-price-size-control", c.OLD_PRICE_STYLE = "recommendation-block-old-price-style-control", c.IMAGE_SIZE = "recommendation-block-image-size-control", c.IMAGE_MARGINS = "recommendation-block-image-margins-control", c))(r || {});
1
+ const _ = "productImage", b = "productName", n = "productPrice", i = "productOldPrice", O = "productOmnibusPrice", T = "productOmnibusDiscount", t = "productButton";
2
+ var o = /* @__PURE__ */ ((c) => (c.BUTTON = "recommendation-block-button", c.NAME = "recommendation-block-name", c.PRICE = "recommendation-block-price", c.OLD_PRICE = "recommendation-block-old-price", c.OMNIBUS_PRICE = "recommendation-block-omnibus-price", c.OMNIBUS_DISCOUNT = "recommendation-block-omnibus-discount", c.IMAGE = "recommendation-block-image", c))(o || {}), r = /* @__PURE__ */ ((c) => (c.BUTTON_ALIGN = "recommendation-block-button-align-control", c.BUTTON_BORDER = "recommendation-block-button-border-control", c.BUTTON_BORDER_RADIUS = "recommendation-block-button-border-radius-control", c.BUTTON_COLOR = "recommendation-block-button-color-control", c.BUTTON_FIT_TO_CONTENT = "recommendation-block-button-fit-to-content-control", c.BUTTON_FONT_FAMILY = "recommendation-block-button-font-family-control", c.BUTTON_MARGINS = "recommendation-block-button-margins-control", c.BUTTON_PADDINGS = "recommendation-block-button-paddings-control", c.BUTTON_TEXT = "recommendation-block-button-text-control", c.BUTTON_TEXT_SIZE = "recommendation-block-button-text-size-control", c.BUTTON_TEXT_STYLE_AND_FONT_COLOR = "recommendation-block-button-text-style-and-font-color-control", c.NAME_ALIGN = "recommendation-block-name-align-control", c.NAME_BACKGROUND = "recommendation-block-name-background-control", c.NAME_COLOR = "recommendation-block-name-color-control", c.NAME_FONT_FAMILY = "recommendation-block-name-font-family-control", c.NAME_PADDINGS = "recommendation-block-name-paddings-control", c.NAME_SIZE = "recommendation-block-name-size-control", c.NAME_STYLE = "recommendation-block-name-style-control", c.NAME_TEXT_TRIM = "recommendation-block-name-text-trim-control", c.PRICE_ALIGN = "recommendation-block-price-align-control", c.PRICE_BACKGROUND = "recommendation-block-price-background-control", c.PRICE_COLOR = "recommendation-block-price-color-control", c.PRICE_FONT_FAMILY = "recommendation-block-price-font-family-control", c.PRICE_PADDINGS = "recommendation-block-price-paddings-control", c.PRICE_SIZE = "recommendation-block-price-size-control", c.PRICE_STYLE = "recommendation-block-price-style-control", c.OLD_PRICE_ALIGN = "recommendation-block-old-price-align-control", c.OLD_PRICE_BACKGROUND = "recommendation-block-old-price-background-control", c.OLD_PRICE_COLOR = "recommendation-block-old-price-color-control", c.OLD_PRICE_FONT_FAMILY = "recommendation-block-old-price-font-family-control", c.OLD_PRICE_PADDINGS = "recommendation-block-old-price-paddings-control", c.OLD_PRICE_SIZE = "recommendation-block-old-price-size-control", c.OLD_PRICE_STYLE = "recommendation-block-old-price-style-control", c.OMNIBUS_PRICE_ALIGN = "recommendation-block-omnibus-price-align-control", c.OMNIBUS_PRICE_BACKGROUND = "recommendation-block-omnibus-price-background-control", c.OMNIBUS_PRICE_COLOR = "recommendation-block-omnibus-price-color-control", c.OMNIBUS_PRICE_FONT_FAMILY = "recommendation-block-omnibus-price-font-family-control", c.OMNIBUS_PRICE_PADDINGS = "recommendation-block-omnibus-price-paddings-control", c.OMNIBUS_PRICE_SIZE = "recommendation-block-omnibus-price-size-control", c.OMNIBUS_PRICE_STYLE = "recommendation-block-omnibus-price-style-control", c.OMNIBUS_PRICE_TEXT_BEFORE = "recommendation-block-omnibus-price-text-before-control", c.OMNIBUS_PRICE_TEXT_AFTER = "recommendation-block-omnibus-price-text-after-control", c.OMNIBUS_DISCOUNT_ALIGN = "recommendation-block-omnibus-discount-align-control", c.OMNIBUS_DISCOUNT_BACKGROUND = "recommendation-block-omnibus-discount-background-control", c.OMNIBUS_DISCOUNT_COLOR = "recommendation-block-omnibus-discount-color-control", c.OMNIBUS_DISCOUNT_FONT_FAMILY = "recommendation-block-omnibus-discount-font-family-control", c.OMNIBUS_DISCOUNT_PADDINGS = "recommendation-block-omnibus-discount-paddings-control", c.OMNIBUS_DISCOUNT_SIZE = "recommendation-block-omnibus-discount-size-control", c.OMNIBUS_DISCOUNT_STYLE = "recommendation-block-omnibus-discount-style-control", c.OMNIBUS_DISCOUNT_TEXT_BEFORE = "recommendation-block-omnibus-discount-text-before-control", c.OMNIBUS_DISCOUNT_TEXT_AFTER = "recommendation-block-omnibus-discount-text-after-control", c.IMAGE_SIZE = "recommendation-block-image-size-control", c.IMAGE_MARGINS = "recommendation-block-image-margins-control", c))(r || {});
2
3
  export {
4
+ t as ATTR_PRODUCT_BUTTON,
5
+ _ as ATTR_PRODUCT_IMAGE,
6
+ b as ATTR_PRODUCT_NAME,
7
+ i as ATTR_PRODUCT_OLD_PRICE,
8
+ T as ATTR_PRODUCT_OMNIBUS_DISCOUNT,
9
+ O as ATTR_PRODUCT_OMNIBUS_PRICE,
10
+ n as ATTR_PRODUCT_PRICE,
3
11
  o as RecommendationBlockId,
4
12
  r as RecommendationControlId
5
13
  };