@useinsider/guido 2.1.0-beta.90d45e0 → 2.1.0-beta.9ba2e9d

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 (140) hide show
  1. package/dist/components/organisms/extensions/recommendation/FilterSelectionDrawer.vue2.js +15 -14
  2. package/dist/composables/useActionsApi.js +15 -13
  3. package/dist/composables/useHtmlValidator.js +106 -84
  4. package/dist/composables/useRecommendation.js +54 -21
  5. package/dist/config/compiler/recommendationCompilerRules.js +45 -39
  6. package/dist/config/compiler/utils/recommendationCompilerUtils.js +147 -0
  7. package/dist/config/migrator/recommendationMigrator.js +2 -2
  8. package/dist/enums/recommendation.js +16 -15
  9. package/dist/extensions/Blocks/Items/controls/cardComposition.js +117 -94
  10. package/dist/extensions/Blocks/Items/controls/price/currencyLocation.js +29 -29
  11. package/dist/extensions/Blocks/Items/controls/price/currencySymbol.js +29 -29
  12. package/dist/extensions/Blocks/Items/controls/price/formattedPrice.js +31 -29
  13. package/dist/extensions/Blocks/Items/controls/price/hideDiscount.js +0 -1
  14. package/dist/extensions/Blocks/Items/controls/price/singlePrice.js +29 -27
  15. package/dist/extensions/Blocks/Items/controls/settingsControl.js +107 -107
  16. package/dist/extensions/Blocks/Items/settingsPanel.js +10 -15
  17. package/dist/extensions/Blocks/Recommendation/block.js +130 -9
  18. package/dist/extensions/Blocks/Recommendation/constants/blockIds.js +4 -0
  19. package/dist/extensions/Blocks/Recommendation/constants/controlIds.js +4 -0
  20. package/dist/extensions/Blocks/Recommendation/constants/defaultConfig.js +65 -0
  21. package/dist/extensions/Blocks/Recommendation/constants/layout.js +20 -0
  22. package/dist/extensions/Blocks/Recommendation/constants/selectors.js +19 -0
  23. package/dist/extensions/Blocks/Recommendation/controls/button/index.js +64 -0
  24. package/dist/extensions/Blocks/Recommendation/controls/cardBackground/index.js +80 -0
  25. package/dist/extensions/Blocks/Recommendation/controls/cardComposition/index.js +232 -0
  26. package/dist/extensions/Blocks/Recommendation/controls/image/index.js +19 -0
  27. package/dist/extensions/Blocks/Recommendation/controls/layout/index.js +92 -0
  28. package/dist/extensions/Blocks/Recommendation/controls/main/algorithm.js +102 -0
  29. package/dist/extensions/Blocks/Recommendation/controls/main/currency.js +209 -0
  30. package/dist/extensions/Blocks/Recommendation/controls/main/filters.js +52 -0
  31. package/dist/extensions/Blocks/Recommendation/controls/main/index.js +217 -0
  32. package/dist/extensions/Blocks/Recommendation/controls/main/locale.js +70 -0
  33. package/dist/extensions/Blocks/Recommendation/controls/main/productLayout.js +110 -0
  34. package/dist/extensions/Blocks/Recommendation/controls/main/shuffle.js +67 -0
  35. package/dist/extensions/Blocks/Recommendation/controls/main/utils.js +286 -0
  36. package/dist/extensions/Blocks/Recommendation/controls/name/index.js +46 -0
  37. package/dist/extensions/Blocks/Recommendation/controls/name/textTrim.js +108 -0
  38. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/index.js +44 -0
  39. package/dist/extensions/Blocks/Recommendation/controls/omnibusDiscount/index.js +48 -0
  40. package/dist/extensions/Blocks/Recommendation/controls/{omnibusDiscountTextAfterControl.js → omnibusDiscount/textAfter.js} +16 -14
  41. package/dist/extensions/Blocks/Recommendation/controls/{omnibusDiscountTextBeforeControl.js → omnibusDiscount/textBefore.js} +16 -14
  42. package/dist/extensions/Blocks/Recommendation/controls/omnibusPrice/index.js +48 -0
  43. package/dist/extensions/Blocks/Recommendation/controls/{omnibusPriceTextAfterControl.js → omnibusPrice/textAfter.js} +16 -14
  44. package/dist/extensions/Blocks/Recommendation/controls/{omnibusPriceTextBeforeControl.js → omnibusPrice/textBefore.js} +14 -12
  45. package/dist/extensions/Blocks/Recommendation/controls/price/index.js +44 -0
  46. package/dist/extensions/Blocks/Recommendation/controls/spacing/index.js +222 -0
  47. package/dist/extensions/Blocks/Recommendation/extension.js +40 -17
  48. package/dist/extensions/Blocks/Recommendation/iconsRegistry.js +19 -3
  49. package/dist/extensions/Blocks/Recommendation/recommendation.css.js +13 -4
  50. package/dist/extensions/Blocks/Recommendation/services/configService.js +240 -0
  51. package/dist/extensions/Blocks/Recommendation/settingsPanel.js +21 -10
  52. package/dist/extensions/Blocks/Recommendation/store/recommendation.js +230 -193
  53. package/dist/extensions/Blocks/Recommendation/templates/grid/elementRenderer.js +233 -0
  54. package/dist/extensions/Blocks/Recommendation/templates/grid/migration.js +251 -0
  55. package/dist/extensions/Blocks/Recommendation/templates/grid/template.js +69 -0
  56. package/dist/extensions/Blocks/Recommendation/templates/index.js +12 -0
  57. package/dist/extensions/Blocks/Recommendation/templates/list/elementRenderer.js +174 -0
  58. package/dist/extensions/Blocks/Recommendation/templates/list/template.js +73 -0
  59. package/dist/extensions/Blocks/Recommendation/templates/utils.js +122 -0
  60. package/dist/extensions/Blocks/Recommendation/types/nodeConfig.js +6 -0
  61. package/dist/extensions/Blocks/Recommendation/utils/filterUtil.js +9 -9
  62. package/dist/extensions/Blocks/Recommendation/utils/preserveTextStyles.js +26 -15
  63. package/dist/extensions/Blocks/Recommendation/utils/priceFormatter.js +29 -0
  64. package/dist/extensions/Blocks/Recommendation/utils/tagName.js +46 -0
  65. package/dist/extensions/Blocks/controlFactories.js +125 -93
  66. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js +223 -169
  67. package/dist/services/recommendationApi.js +10 -9
  68. package/dist/services/templateLibraryApi.js +16 -13
  69. package/dist/src/components/wrappers/WpDrawer.vue.d.ts +1 -1
  70. package/dist/src/composables/useRecommendation.d.ts +1 -0
  71. package/dist/src/config/compiler/utils/recommendationCompilerUtils.d.ts +17 -0
  72. package/dist/src/extensions/Blocks/Items/controls/cardComposition.d.ts +5 -4
  73. package/dist/src/extensions/Blocks/Items/controls/settingsControl.d.ts +1 -1
  74. package/dist/src/extensions/Blocks/Recommendation/block.d.ts +67 -0
  75. package/dist/src/extensions/Blocks/Recommendation/constants/blockIds.d.ts +13 -0
  76. package/dist/src/extensions/Blocks/Recommendation/{constants.d.ts → constants/controlIds.d.ts} +0 -24
  77. package/dist/src/extensions/Blocks/Recommendation/constants/defaultConfig.d.ts +49 -0
  78. package/dist/src/extensions/Blocks/Recommendation/constants/index.d.ts +13 -0
  79. package/dist/src/extensions/Blocks/Recommendation/constants/layout.d.ts +35 -0
  80. package/dist/src/extensions/Blocks/Recommendation/constants/selectors.d.ts +31 -0
  81. package/dist/src/extensions/Blocks/Recommendation/controls/button/index.d.ts +143 -0
  82. package/dist/src/extensions/Blocks/Recommendation/controls/cardBackground/index.d.ts +31 -0
  83. package/dist/src/extensions/Blocks/Recommendation/{cardCompositionControl.d.ts → controls/cardComposition/index.d.ts} +23 -3
  84. package/dist/src/extensions/Blocks/Recommendation/controls/image/index.d.ts +35 -0
  85. package/dist/src/extensions/Blocks/Recommendation/controls/index.d.ts +21 -589
  86. package/dist/src/extensions/Blocks/Recommendation/controls/layout/index.d.ts +37 -0
  87. package/dist/src/extensions/Blocks/Recommendation/controls/main/algorithm.d.ts +29 -0
  88. package/dist/src/extensions/Blocks/Recommendation/controls/main/currency.d.ts +52 -0
  89. package/dist/src/extensions/Blocks/Recommendation/controls/main/filters.d.ts +22 -0
  90. package/dist/src/extensions/Blocks/Recommendation/controls/main/index.d.ts +68 -0
  91. package/dist/src/extensions/Blocks/Recommendation/controls/main/locale.d.ts +24 -0
  92. package/dist/src/extensions/Blocks/Recommendation/controls/main/productLayout.d.ts +42 -0
  93. package/dist/src/extensions/Blocks/Recommendation/controls/main/shuffle.d.ts +23 -0
  94. package/dist/src/extensions/Blocks/Recommendation/controls/main/utils.d.ts +214 -0
  95. package/dist/src/extensions/Blocks/Recommendation/controls/name/index.d.ts +97 -0
  96. package/dist/src/extensions/Blocks/Recommendation/controls/name/textTrim.d.ts +34 -0
  97. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/index.d.ts +95 -0
  98. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscount/index.d.ts +100 -0
  99. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscount/textAfter.d.ts +15 -0
  100. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscount/textBefore.d.ts +15 -0
  101. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPrice/index.d.ts +100 -0
  102. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPrice/textAfter.d.ts +15 -0
  103. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPrice/textBefore.d.ts +15 -0
  104. package/dist/src/extensions/Blocks/Recommendation/controls/price/index.d.ts +95 -0
  105. package/dist/src/extensions/Blocks/Recommendation/controls/spacing/index.d.ts +83 -0
  106. package/dist/src/extensions/Blocks/Recommendation/extension.d.ts +9 -0
  107. package/dist/src/extensions/Blocks/Recommendation/services/configService.d.ts +151 -0
  108. package/dist/src/extensions/Blocks/Recommendation/services/index.d.ts +6 -0
  109. package/dist/src/extensions/Blocks/Recommendation/store/recommendation.d.ts +131 -468
  110. package/dist/src/extensions/Blocks/Recommendation/templates/grid/elementRenderer.d.ts +20 -0
  111. package/dist/src/extensions/Blocks/Recommendation/templates/{migrationTemplate.d.ts → grid/migration.d.ts} +11 -4
  112. package/dist/src/extensions/Blocks/Recommendation/templates/grid/template.d.ts +33 -0
  113. package/dist/src/extensions/Blocks/Recommendation/templates/index.d.ts +39 -0
  114. package/dist/src/extensions/Blocks/Recommendation/templates/list/elementRenderer.d.ts +8 -0
  115. package/dist/src/extensions/Blocks/Recommendation/templates/list/migration.d.ts +25 -0
  116. package/dist/src/extensions/Blocks/Recommendation/templates/list/template.d.ts +18 -0
  117. package/dist/src/extensions/Blocks/Recommendation/templates/utils.d.ts +57 -0
  118. package/dist/src/extensions/Blocks/Recommendation/types/index.d.ts +7 -0
  119. package/dist/src/extensions/Blocks/Recommendation/types/nodeConfig.d.ts +160 -0
  120. package/dist/src/extensions/Blocks/Recommendation/utils/priceFormatter.d.ts +33 -0
  121. package/dist/src/extensions/Blocks/Recommendation/utils/stylePreserver.d.ts +113 -0
  122. package/dist/src/extensions/Blocks/Recommendation/utils/tagName.d.ts +77 -0
  123. package/dist/static/styles/customEditorStyle.css.js +25 -2
  124. package/dist/utils/pairProductVariables.js +57 -56
  125. package/dist/utils/templatePreparation.js +15 -14
  126. package/package.json +1 -1
  127. package/dist/extensions/Blocks/Recommendation/cardCompositionControl.js +0 -187
  128. package/dist/extensions/Blocks/Recommendation/constants.js +0 -13
  129. package/dist/extensions/Blocks/Recommendation/control.js +0 -336
  130. package/dist/extensions/Blocks/Recommendation/controls/cardBackgroundColorControl.js +0 -68
  131. package/dist/extensions/Blocks/Recommendation/controls/index.js +0 -245
  132. package/dist/extensions/Blocks/Recommendation/controls/nameTextTrimControl.js +0 -74
  133. package/dist/extensions/Blocks/Recommendation/controls/spacingControl.js +0 -188
  134. package/dist/extensions/Blocks/Recommendation/templates/blockTemplate.js +0 -181
  135. package/dist/extensions/Blocks/Recommendation/templates/migrationTemplate.js +0 -189
  136. package/dist/extensions/Blocks/Recommendation/templates/templateUtils.js +0 -209
  137. package/dist/src/extensions/Blocks/Recommendation/control.d.ts +0 -38
  138. package/dist/src/extensions/Blocks/Recommendation/controls/nameTextTrimControl.d.ts +0 -16
  139. package/dist/src/extensions/Blocks/Recommendation/templates/blockTemplate.d.ts +0 -16
  140. package/dist/src/extensions/Blocks/Recommendation/templates/templateUtils.d.ts +0 -52
@@ -1,12 +1,12 @@
1
1
  import { ModificationDescription as N, UEAttr as L } from "../../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
2
2
  import { CommonControl as U } from "../../common-control.js";
3
- import { ItemsBlockId as T } from "../enums/controlEnums.js";
3
+ import { ItemsBlockId as I } from "../enums/controlEnums.js";
4
4
  import { productPairs as y, templateFirstLine as b } from "../enums/productEnums.js";
5
- import { SETTINGS_ENUMS as p, ItemTypeOptions as D, OrientationOptions as k, ItemInCartOptions as g, DefaultConfigValues as x } from "../enums/settingsEnums.js";
5
+ import { SETTINGS_ENUMS as d, ItemTypeOptions as D, OrientationOptions as k, ItemInCartOptions as g, DefaultConfigValues as x } from "../enums/settingsEnums.js";
6
6
  import F from "../layouts/horizontal.html.js";
7
7
  import $ from "../layouts/vertical.html.js";
8
8
  import { getDefaultTemplate as q } from "../template.js";
9
- import { getItemsBlockConfig as h, setItemsBlockConfig as O, escapeReplacement as A } from "../utils/nodeConfigUtils.js";
9
+ import { getItemsBlockConfig as _, setItemsBlockConfig as O, escapeReplacement as A } from "../utils/nodeConfigUtils.js";
10
10
  const w = "ui-elements-items-block", m = {
11
11
  ITEMS_TYPE: "itemsType",
12
12
  ORIENTATION: "orientation",
@@ -26,20 +26,20 @@ class Z extends U {
26
26
  `;
27
27
  }
28
28
  onRender() {
29
- const e = h(this.currentNode);
29
+ const e = _(this.currentNode);
30
30
  this.api.updateValues({
31
- [m.ORIENTATION]: (e == null ? void 0 : e.orientation) ?? p.ORIENTATION.VERTICAL,
32
- [m.ITEMS_TYPE]: (e == null ? void 0 : e.type) ?? p.ITEMS_TYPE.CART_ITEMS,
31
+ [m.ORIENTATION]: (e == null ? void 0 : e.orientation) ?? d.ORIENTATION.VERTICAL,
32
+ [m.ITEMS_TYPE]: (e == null ? void 0 : e.type) ?? d.ITEMS_TYPE.CART_ITEMS,
33
33
  [m.ITEM_IDS]: (e == null ? void 0 : e.itemsSelectValue) ?? ""
34
34
  }), this._listenToFormUpdates();
35
35
  }
36
36
  onTemplateNodeUpdated(e) {
37
37
  super.onTemplateNodeUpdated(e), console.debug("Items Block Config", e.getNodeConfig()), this.handleBlockInstanceChange(() => {
38
- const t = h(this.currentNode);
38
+ const r = _(this.currentNode);
39
39
  this.api.updateValues({
40
- [m.ORIENTATION]: (t == null ? void 0 : t.orientation) ?? p.ORIENTATION.VERTICAL,
41
- [m.ITEMS_TYPE]: (t == null ? void 0 : t.type) ?? p.ITEMS_TYPE.CART_ITEMS,
42
- [m.ITEM_IDS]: (t == null ? void 0 : t.itemsSelectValue) ?? ""
40
+ [m.ORIENTATION]: (r == null ? void 0 : r.orientation) ?? d.ORIENTATION.VERTICAL,
41
+ [m.ITEMS_TYPE]: (r == null ? void 0 : r.type) ?? d.ITEMS_TYPE.CART_ITEMS,
42
+ [m.ITEM_IDS]: (r == null ? void 0 : r.itemsSelectValue) ?? ""
43
43
  }), this._initializeSelectItems();
44
44
  });
45
45
  }
@@ -82,38 +82,38 @@ class Z extends U {
82
82
  }
83
83
  _onOrientationChange(e) {
84
84
  this.api.updateValues({ [m.ORIENTATION]: e });
85
- const t = this.api.getDocumentModifier();
85
+ const r = this.api.getDocumentModifier();
86
86
  O(this.currentNode, this.api, {
87
87
  orientation: e,
88
88
  priceOrientation: "horizontal"
89
- }, t), t.apply(new N("Changed orientation")), this._reOrderTemplate(), setTimeout(() => {
89
+ }, r), r.apply(new N("Changed orientation")), this._reOrderTemplate(), setTimeout(() => {
90
90
  this._recalculateTrimming();
91
91
  }, 50);
92
92
  }
93
93
  _onItemsTypeChange(e) {
94
- const t = p.ITEMS_TYPE[e], r = g[e], i = r == null ? void 0 : r[0];
95
- if (!t || !i)
94
+ const r = d.ITEMS_TYPE[e], t = g[e], i = t == null ? void 0 : t[0];
95
+ if (!r || !i)
96
96
  return;
97
97
  const n = i.value, s = i.value.replace("Url}}", "Image}}"), o = this.api.getDocumentModifier();
98
98
  O(this.currentNode, this.api, {
99
- source: t,
100
- type: t,
99
+ source: r,
100
+ type: r,
101
101
  itemsSelectValue: i.value,
102
102
  imageLink: s,
103
103
  buttonLink: n
104
- }, o), this._updateDataTypeAttributes(t, o), this._initializeSelectItems();
105
- const l = this._getTemplateData(t);
106
- this._updateImageSrc(l.imageSrc, o), this._updateName(l.name, o), this._updatePrice(l.price, o), this._updateOriginalPrice(l.originalPrice, o), this._updateQuantity(l.quantity, t, o), o.apply(new N("Updated items type"));
104
+ }, o), this._updateDataTypeAttributes(r, o), this._initializeSelectItems();
105
+ const l = this._getTemplateData(r, i.value);
106
+ this._updateImageSrc(l.imageSrc, o), this._updateName(l.name, o), this._updatePrice(l.price, o), this._updateOriginalPrice(l.originalPrice, o), this._updateQuantity(l.quantity, r, o), o.apply(new N("Updated items type"));
107
107
  }
108
108
  _onItemIdsChange(e) {
109
109
  this.api.updateValues({ [m.ITEM_IDS]: e });
110
- const t = e, r = e.replace("Url}}", "Image}}"), i = this.api.getDocumentModifier();
110
+ const r = e, t = e.replace("Url}}", "Image}}"), i = this.api.getDocumentModifier();
111
111
  O(this.currentNode, this.api, {
112
112
  itemsSelectValue: e,
113
- imageLink: r,
114
- buttonLink: t
113
+ imageLink: t,
114
+ buttonLink: r
115
115
  }, i), this._updateDataNumberAttributes(e, i);
116
- const n = this._getTemplateData();
116
+ const n = this._getTemplateData(void 0, e);
117
117
  this._updateImageSrc(n.imageSrc, i), this._updateName(n.name, i), this._updatePrice(n.price, i), this._updateOriginalPrice(n.originalPrice, i), this._updateQuantity(n.quantity, void 0, i), i.apply(new N("Updated item selection"));
118
118
  }
119
119
  _initializeSelectItems() {
@@ -122,17 +122,17 @@ class Z extends U {
122
122
  L.SELECTPICKER.items,
123
123
  D
124
124
  );
125
- const e = h(this.currentNode), t = (e == null ? void 0 : e.type) ?? p.ITEMS_TYPE.CART_ITEMS, r = (e == null ? void 0 : e.itemsSelectValue) ?? "";
125
+ const e = _(this.currentNode), r = (e == null ? void 0 : e.type) ?? d.ITEMS_TYPE.CART_ITEMS, t = (e == null ? void 0 : e.itemsSelectValue) ?? "";
126
126
  this.api.updateValues({
127
- [m.ITEMS_TYPE]: t
127
+ [m.ITEMS_TYPE]: r
128
128
  });
129
- const i = g[t];
129
+ const i = g[r];
130
130
  this.api.setUIEAttribute(
131
131
  m.ITEM_IDS,
132
132
  L.SELECTPICKER.items,
133
133
  i
134
134
  ), this.api.updateValues({
135
- [m.ITEM_IDS]: r
135
+ [m.ITEM_IDS]: t
136
136
  });
137
137
  }
138
138
  _listenToFormUpdates() {
@@ -148,120 +148,120 @@ class Z extends U {
148
148
  );
149
149
  }
150
150
  _renderTemplate() {
151
- const e = h(this.currentNode), t = (e == null ? void 0 : e.orientation) ?? p.ORIENTATION.VERTICAL, r = (e == null ? void 0 : e.type) ?? p.ITEMS_TYPE.CART_ITEMS, i = (e == null ? void 0 : e.itemsSelectValue) ?? "", n = (e == null ? void 0 : e.priceCurrencySymbol) ?? "", s = (e == null ? void 0 : e.priceCurrencyLocation) ?? "0", o = (e == null ? void 0 : e.priceFormatted) ?? !1;
151
+ const e = _(this.currentNode), r = (e == null ? void 0 : e.orientation) ?? d.ORIENTATION.VERTICAL, t = (e == null ? void 0 : e.type) ?? d.ITEMS_TYPE.CART_ITEMS, i = (e == null ? void 0 : e.itemsSelectValue) ?? "", n = (e == null ? void 0 : e.priceCurrencySymbol) ?? "", s = (e == null ? void 0 : e.priceCurrencyLocation) ?? "0", o = (e == null ? void 0 : e.priceFormatted) ?? !1;
152
152
  this.api.getDocumentModifier().modifyHtml(this.currentNode).setInnerHtml(q({
153
- orientation: t,
154
- itemsType: r,
153
+ orientation: r,
154
+ itemsType: t,
155
155
  itemId: i,
156
156
  currencySymbol: n,
157
157
  currencyLocation: s,
158
158
  formattedPrice: o
159
159
  })).apply(new N("Updated template"));
160
160
  }
161
- _getTemplateData(e) {
162
- const t = h(this.currentNode), r = e ?? (t == null ? void 0 : t.type) ?? p.ITEMS_TYPE.CART_ITEMS, i = (t == null ? void 0 : t.itemsSelectValue) ?? "", n = (t == null ? void 0 : t.priceFormatted) ?? !1, s = (t == null ? void 0 : t.priceSinglePrice) ?? !1, o = g[r].findIndex((d) => d.value === i), l = o > -1 ? o : 0, a = y.PAIRS_FOR_EXTENSION.price[r], c = y.PAIRS_FOR_EXTENSION.originalPrice[r];
163
- let I, u;
164
- return s ? (I = n ? a.DEFAULT_SINGLE_PRICE_FORMATTED : a.DEFAULT_SINGLE_PRICE, u = n ? c.DEFAULT_SINGLE_PRICE_FORMATTED : c.DEFAULT_SINGLE_PRICE) : (I = n ? a.DEFAULT_PRICE_FORMATTED : a.DEFAULT_PRICE, u = n ? c.DEFAULT_PRICE_FORMATTED : c.DEFAULT_PRICE), {
165
- imageSrc: y.PAIRS_FOR_EXTENSION.imageSrc[r].DEFAULT[l],
166
- name: y.PAIRS_FOR_EXTENSION.name[r].DEFAULT[l],
167
- price: I,
168
- originalPrice: u,
169
- quantity: y.PAIRS_FOR_EXTENSION.quantity[r].DEFAULT,
170
- button: y.PAIRS_FOR_EXTENSION.button[r].DEFAULT_LABEL
161
+ _getTemplateData(e, r) {
162
+ const t = _(this.currentNode), i = e ?? (t == null ? void 0 : t.type) ?? d.ITEMS_TYPE.CART_ITEMS, n = r ?? (t == null ? void 0 : t.itemsSelectValue) ?? "", s = (t == null ? void 0 : t.priceFormatted) ?? !1, o = (t == null ? void 0 : t.priceSinglePrice) ?? !1, l = g[i].findIndex((h) => h.value === n), a = l > -1 ? l : 0, c = y.PAIRS_FOR_EXTENSION.price[i], T = y.PAIRS_FOR_EXTENSION.originalPrice[i];
163
+ let u, p;
164
+ return o ? (u = s ? c.DEFAULT_SINGLE_PRICE_FORMATTED : c.DEFAULT_SINGLE_PRICE, p = s ? T.DEFAULT_SINGLE_PRICE_FORMATTED : T.DEFAULT_SINGLE_PRICE) : (u = s ? c.DEFAULT_PRICE_FORMATTED : c.DEFAULT_PRICE, p = s ? T.DEFAULT_PRICE_FORMATTED : T.DEFAULT_PRICE), {
165
+ imageSrc: y.PAIRS_FOR_EXTENSION.imageSrc[i].DEFAULT[a],
166
+ name: y.PAIRS_FOR_EXTENSION.name[i].DEFAULT[a],
167
+ price: u,
168
+ originalPrice: p,
169
+ quantity: y.PAIRS_FOR_EXTENSION.quantity[i].DEFAULT,
170
+ button: y.PAIRS_FOR_EXTENSION.button[i].DEFAULT_LABEL
171
171
  };
172
172
  }
173
- _updateImageSrc(e, t) {
173
+ _updateImageSrc(e, r) {
174
174
  var i;
175
- const r = (i = this.currentNode) == null ? void 0 : i.querySelector(`[esd-extension-block-id="${T.IMAGE}"] img`);
176
- r && t.modifyHtml(r).setAttribute("src", e);
175
+ const t = (i = this.currentNode) == null ? void 0 : i.querySelector(`[esd-extension-block-id="${I.IMAGE}"] img`);
176
+ t && r.modifyHtml(t).setAttribute("src", e);
177
177
  }
178
- _updateName(e, t) {
178
+ _updateName(e, r) {
179
179
  var s;
180
- const r = (s = this.currentNode) == null ? void 0 : s.querySelector(`[esd-extension-block-id="${T.NAME}"]`);
181
- if (!r)
180
+ const t = (s = this.currentNode) == null ? void 0 : s.querySelector(`[esd-extension-block-id="${I.NAME}"]`);
181
+ if (!t)
182
182
  return;
183
- const i = r.getInnerText().trim();
184
- let n = r.getInnerHTML().trim();
185
- n = n.replace(i, A(e)), t.modifyHtml(r).setInnerHtml(n);
183
+ const i = t.getInnerText().trim();
184
+ let n = t.getInnerHTML().trim();
185
+ n = n.replace(i, A(e)), r.modifyHtml(t).setInnerHtml(n);
186
186
  }
187
- _updatePrice(e, t) {
187
+ _updatePrice(e, r) {
188
188
  var o;
189
- const r = ((o = this.currentNode) == null ? void 0 : o.querySelectorAll(
190
- `[esd-extension-block-id="${T.PRICE}"]`
191
- )) || [], i = h(this.currentNode), n = (i == null ? void 0 : i.priceCurrencySymbol) ?? "", s = (i == null ? void 0 : i.priceCurrencyLocation) ?? "0";
192
- r.forEach((l) => {
189
+ const t = ((o = this.currentNode) == null ? void 0 : o.querySelectorAll(
190
+ `[esd-extension-block-id="${I.PRICE}"]`
191
+ )) || [], i = _(this.currentNode), n = (i == null ? void 0 : i.priceCurrencySymbol) ?? "", s = (i == null ? void 0 : i.priceCurrencyLocation) ?? "0";
192
+ t.forEach((l) => {
193
193
  const a = this._getParagraphFromBlock(l);
194
194
  if (!a)
195
195
  return;
196
- const c = a.getInnerHTML().trim() || "", I = a.getInnerText().trim() || "", u = (n == null ? void 0 : n.trim()) || "", d = this._removeCurrencySymbol(I, u), _ = this._replacePriceNumber(d, e), E = this._buildPriceContent(_, u, s), S = c.replace(I, A(E));
197
- t.modifyHtml(a).setInnerHtml(S);
196
+ const c = a.getInnerHTML().trim() || "", T = a.getInnerText().trim() || "", u = (n == null ? void 0 : n.trim()) || "", p = this._removeCurrencySymbol(T, u), h = this._replacePriceNumber(p, e), E = this._buildPriceContent(h, u, s), S = c.replace(T, A(E));
197
+ r.modifyHtml(a).setInnerHtml(S);
198
198
  });
199
199
  }
200
- _updateOriginalPrice(e, t) {
200
+ _updateOriginalPrice(e, r) {
201
201
  var o;
202
- const r = ((o = this.currentNode) == null ? void 0 : o.querySelectorAll(
203
- `[esd-extension-block-id="${T.ORIGINAL_PRICE}"]`
204
- )) || [], i = h(this.currentNode), n = (i == null ? void 0 : i.priceCurrencySymbol) ?? "", s = (i == null ? void 0 : i.priceCurrencyLocation) ?? "0";
205
- r.forEach((l) => {
202
+ const t = ((o = this.currentNode) == null ? void 0 : o.querySelectorAll(
203
+ `[esd-extension-block-id="${I.ORIGINAL_PRICE}"]`
204
+ )) || [], i = _(this.currentNode), n = (i == null ? void 0 : i.priceCurrencySymbol) ?? "", s = (i == null ? void 0 : i.priceCurrencyLocation) ?? "0";
205
+ t.forEach((l) => {
206
206
  const a = this._getParagraphFromBlock(l);
207
207
  if (!a)
208
208
  return;
209
209
  const c = a.querySelector("s");
210
210
  if (!c)
211
211
  return;
212
- const I = c.getInnerHTML().trim() || "", u = c.getInnerText().trim() || "", d = (n == null ? void 0 : n.trim()) || "", _ = this._removeCurrencySymbol(u, d), E = this._replacePriceNumber(_, e), S = this._buildPriceContent(E, d, s), R = `<s>${I.replace(u, A(S))}</s>`;
213
- t.modifyHtml(a).setInnerHtml(R);
212
+ const T = c.getInnerHTML().trim() || "", u = c.getInnerText().trim() || "", p = (n == null ? void 0 : n.trim()) || "", h = this._removeCurrencySymbol(u, p), E = this._replacePriceNumber(h, e), S = this._buildPriceContent(E, p, s), R = `<s>${T.replace(u, A(S))}</s>`;
213
+ r.modifyHtml(a).setInnerHtml(R);
214
214
  });
215
215
  }
216
- _updateQuantity(e, t, r) {
217
- var _;
218
- const i = h(this.currentNode), s = (t ?? (i == null ? void 0 : i.type) ?? p.ITEMS_TYPE.CART_ITEMS) !== p.ITEMS_TYPE.BROWSED_ITEMS, o = (i == null ? void 0 : i.quantityControlEnabled) !== !1, l = s && o, a = (_ = this.currentNode) == null ? void 0 : _.querySelector(`[esd-extension-block-id="${T.QUANTITY}"]`);
216
+ _updateQuantity(e, r, t) {
217
+ var h;
218
+ const i = _(this.currentNode), s = (r ?? (i == null ? void 0 : i.type) ?? d.ITEMS_TYPE.CART_ITEMS) !== d.ITEMS_TYPE.BROWSED_ITEMS, o = (i == null ? void 0 : i.quantityControlEnabled) !== !1, l = s && o, a = (h = this.currentNode) == null ? void 0 : h.querySelector(`[esd-extension-block-id="${I.QUANTITY}"]`);
219
219
  if (!a)
220
220
  return;
221
221
  const c = this._getParagraphFromBlock(a);
222
222
  if (!c)
223
223
  return;
224
- const I = c.getInnerText().trim();
224
+ const T = c.getInnerText().trim();
225
225
  let u = c.getInnerHTML().trim();
226
- function d(E, S, C) {
226
+ function p(E, S, C) {
227
227
  return E.replace(
228
228
  new RegExp(`(>\\s*)?${S}(\\s*<)?`, "g"),
229
229
  `$1${C}$2`
230
230
  );
231
231
  }
232
- u = d(u, I, e), r.modifyHtml(c).setInnerHtml(u), r.modifyHtml(a).setStyle("display", l ? "table-cell" : "none");
232
+ u = p(u, T, e), t.modifyHtml(c).setInnerHtml(u), t.modifyHtml(a).setStyle("display", l ? "table-cell" : "none");
233
233
  }
234
234
  _reOrderTemplate(e) {
235
- var _, E, S, C, R, M;
236
- const t = (_ = this.currentNode) == null ? void 0 : _.querySelector(`[esd-extension-block-id="${T.IMAGE}"]`), r = (E = this.currentNode) == null ? void 0 : E.querySelector(`[esd-extension-block-id="${T.NAME}"]`), i = ((S = this.currentNode) == null ? void 0 : S.querySelectorAll(
237
- `[esd-extension-block-id="${T.PRICE}"]`
235
+ var h, E, S, C, R, M;
236
+ const r = (h = this.currentNode) == null ? void 0 : h.querySelector(`[esd-extension-block-id="${I.IMAGE}"]`), t = (E = this.currentNode) == null ? void 0 : E.querySelector(`[esd-extension-block-id="${I.NAME}"]`), i = ((S = this.currentNode) == null ? void 0 : S.querySelectorAll(
237
+ `[esd-extension-block-id="${I.PRICE}"]`
238
238
  )) || [], n = ((C = this.currentNode) == null ? void 0 : C.querySelectorAll(
239
- `[esd-extension-block-id="${T.ORIGINAL_PRICE}"]`
240
- )) || [], [s] = i, [o] = n, l = (R = this.currentNode) == null ? void 0 : R.querySelector(`[esd-extension-block-id="${T.QUANTITY}"]`), a = (M = this.currentNode) == null ? void 0 : M.querySelector(`[esd-extension-block-id="${T.BUTTON}"]`);
241
- if (!t || !r || !s || !o || !l || !a)
239
+ `[esd-extension-block-id="${I.ORIGINAL_PRICE}"]`
240
+ )) || [], [s] = i, [o] = n, l = (R = this.currentNode) == null ? void 0 : R.querySelector(`[esd-extension-block-id="${I.QUANTITY}"]`), a = (M = this.currentNode) == null ? void 0 : M.querySelector(`[esd-extension-block-id="${I.BUTTON}"]`);
241
+ if (!r || !t || !s || !o || !l || !a)
242
242
  return;
243
- const c = h(this.currentNode), u = ((c == null ? void 0 : c.orientation) ?? p.ORIENTATION.VERTICAL) === p.ORIENTATION.VERTICAL;
244
- let d = u ? $ : F;
243
+ const c = _(this.currentNode), u = ((c == null ? void 0 : c.orientation) ?? d.ORIENTATION.VERTICAL) === d.ORIENTATION.VERTICAL;
244
+ let p = u ? $ : F;
245
245
  setTimeout(() => {
246
246
  const H = A(s.getOuterHTML()), f = A(o.getOuterHTML());
247
- d = d.replace("{-{-TEMPLATE_FIRST_LINE-}-}", u ? b : "").replace("{-{-PRODUCT_IMAGE-}-}", t.getOuterHTML()).replace("{-{-PRODUCT_NAME-}-}", r.getOuterHTML()).replaceAll("{-{-PRODUCT_PRICE-}-}", H).replaceAll("{-{-PRODUCT_ORIGINAL_PRICE-}-}", f).replace("{-{-PRODUCT_QUANTITY-}-}", l.getOuterHTML()).replace("{-{-PRODUCT_BUTTON-}-}", a.getOuterHTML()), d = d.trim().replace(b, "").slice(0, -5);
247
+ p = p.replace("{-{-TEMPLATE_FIRST_LINE-}-}", u ? b : "").replace("{-{-PRODUCT_IMAGE-}-}", r.getOuterHTML()).replace("{-{-PRODUCT_NAME-}-}", t.getOuterHTML()).replaceAll("{-{-PRODUCT_PRICE-}-}", H).replaceAll("{-{-PRODUCT_ORIGINAL_PRICE-}-}", f).replace("{-{-PRODUCT_QUANTITY-}-}", l.getOuterHTML()).replace("{-{-PRODUCT_BUTTON-}-}", a.getOuterHTML()), p = p.trim().replace(b, "").slice(0, -5);
248
248
  const P = e ?? this.api.getDocumentModifier();
249
- P.modifyHtml(t.querySelector("img")).setAttribute("width", x.productImageWidth).setAttribute("height", x.productImageWidth), P.modifyHtml(this.currentNode).setInnerHtml(d), e || P.apply(new N("Reordered template"));
249
+ P.modifyHtml(r.querySelector("img")).setAttribute("width", x.productImageWidth).setAttribute("height", x.productImageWidth), P.modifyHtml(this.currentNode).setInnerHtml(p), e || P.apply(new N("Reordered template"));
250
250
  }, 50);
251
251
  }
252
- _updateDataTypeAttributes(e, t) {
252
+ _updateDataTypeAttributes(e, r) {
253
253
  if (!this.currentNode)
254
254
  return;
255
- const r = this.currentNode.closest(".ins-product-td");
256
- r && t.modifyHtml(r).setAttribute("data-type", e), this.currentNode.querySelectorAll("[data-type]").forEach((n) => {
255
+ const t = this.currentNode.closest(".ins-product-td");
256
+ t && r.modifyHtml(t).setAttribute("data-type", e), this.currentNode.querySelectorAll("[data-type]").forEach((n) => {
257
257
  const s = n;
258
- t.modifyHtml(s).setAttribute("data-type", e);
258
+ r.modifyHtml(s).setAttribute("data-type", e);
259
259
  });
260
260
  }
261
- _updateDataNumberAttributes(e, t) {
261
+ _updateDataNumberAttributes(e, r) {
262
262
  if (!this.currentNode)
263
263
  return;
264
- const r = h(this.currentNode), i = (r == null ? void 0 : r.type) ?? p.ITEMS_TYPE.CART_ITEMS, n = g[i].findIndex((a) => a.value === e);
264
+ const t = _(this.currentNode), i = (t == null ? void 0 : t.type) ?? d.ITEMS_TYPE.CART_ITEMS, n = g[i].findIndex((a) => a.value === e);
265
265
  let s = "1";
266
266
  if (n >= 0)
267
267
  s = String(n + 1);
@@ -273,27 +273,27 @@ class Z extends U {
273
273
  }
274
274
  }
275
275
  const o = this.currentNode.closest(".ins-product-td");
276
- o && t.modifyHtml(o).setAttribute("data-number", s), this.currentNode.querySelectorAll("[data-number]").forEach((a) => {
276
+ o && r.modifyHtml(o).setAttribute("data-number", s), this.currentNode.querySelectorAll("[data-number]").forEach((a) => {
277
277
  const c = a;
278
- t.modifyHtml(c).setAttribute("data-number", s);
278
+ r.modifyHtml(c).setAttribute("data-number", s);
279
279
  });
280
280
  }
281
281
  _reFillTemplate(e) {
282
- const t = this._getTemplateData(e), r = this.api.getDocumentModifier();
283
- this._updateImageSrc(t.imageSrc, r), this._updateName(t.name, r), this._updatePrice(t.price, r), this._updateOriginalPrice(t.originalPrice, r), this._updateQuantity(t.quantity, e, r), r.apply(new N("Refilled template"));
282
+ const r = this._getTemplateData(e), t = this.api.getDocumentModifier();
283
+ this._updateImageSrc(r.imageSrc, t), this._updateName(r.name, t), this._updatePrice(r.price, t), this._updateOriginalPrice(r.originalPrice, t), this._updateQuantity(r.quantity, e, t), t.apply(new N("Refilled template"));
284
284
  }
285
285
  _recalculateTrimming() {
286
286
  var s;
287
287
  if (!this.currentNode)
288
288
  return;
289
- const e = (s = this.currentNode) == null ? void 0 : s.querySelector(`[esd-extension-block-id="${T.NAME}"]`);
289
+ const e = (s = this.currentNode) == null ? void 0 : s.querySelector(`[esd-extension-block-id="${I.NAME}"]`);
290
290
  if (!e)
291
291
  return;
292
- const t = e.querySelector("p > a");
293
- if (!t)
292
+ const r = e.querySelector("p > a");
293
+ if (!r)
294
294
  return;
295
- const r = h(this.currentNode), i = (r == null ? void 0 : r.orientation) === p.ORIENTATION.HORIZONTAL, n = (r == null ? void 0 : r.nameTrimming) ?? !0;
296
- this.api.getDocumentModifier().modifyHtml(t).setStyle("overflow", "hidden").setStyle("white-space", n ? "nowrap" : "normal").setStyle("text-overflow", n ? "ellipsis" : "unset").setStyle("max-width", i ? "130px" : "520px").setStyle("width", i ? "130px" : "520px").apply(new N("Recalculated trimming after orientation change"));
295
+ const t = _(this.currentNode), i = (t == null ? void 0 : t.orientation) === d.ORIENTATION.HORIZONTAL, n = (t == null ? void 0 : t.nameTrimming) ?? !0;
296
+ this.api.getDocumentModifier().modifyHtml(r).setStyle("overflow", "hidden").setStyle("white-space", n ? "nowrap" : "normal").setStyle("text-overflow", n ? "ellipsis" : "unset").setStyle("max-width", i ? "130px" : "520px").setStyle("width", i ? "130px" : "520px").apply(new N("Recalculated trimming after orientation change"));
297
297
  }
298
298
  _getParagraphFromBlock(e) {
299
299
  return e.querySelector("p");
@@ -301,27 +301,27 @@ class Z extends U {
301
301
  _escapeRegex(e) {
302
302
  return e.replace(/[-\\^$*+?().|[\]{}]/g, "\\$&");
303
303
  }
304
- _removeCurrencySymbol(e, t) {
305
- const r = e || "";
306
- let i = r;
307
- if (t) {
308
- const n = new RegExp(`\\s*${this._escapeRegex(t)}\\s*`);
309
- i = r.replace(n, "").trim();
304
+ _removeCurrencySymbol(e, r) {
305
+ const t = e || "";
306
+ let i = t;
307
+ if (r) {
308
+ const n = new RegExp(`\\s*${this._escapeRegex(r)}\\s*`);
309
+ i = t.replace(n, "").trim();
310
310
  } else {
311
- const n = r.match(/([^0-9.,\s]+)/);
311
+ const n = t.match(/([^0-9.,\s]+)/);
312
312
  if (n && n[1]) {
313
313
  const s = n[1].trim(), o = new RegExp(`\\s*${this._escapeRegex(s)}\\s*`);
314
- i = r.replace(o, "").trim();
314
+ i = t.replace(o, "").trim();
315
315
  }
316
316
  }
317
317
  return i;
318
318
  }
319
- _replacePriceNumber(e, t) {
320
- const r = /([0-9][0-9,.]*)/;
321
- return e.replace(r, t).trim();
319
+ _replacePriceNumber(e, r) {
320
+ const t = /([0-9][0-9,.]*)/;
321
+ return e.replace(t, r).trim();
322
322
  }
323
- _buildPriceContent(e, t, r) {
324
- return t ? r === "1" ? `${e}&nbsp;${t}` : `${t}&nbsp;${e}` : e;
323
+ _buildPriceContent(e, r, t) {
324
+ return r ? t === "1" ? `${e}&nbsp;${r}` : `${r}&nbsp;${e}` : e;
325
325
  }
326
326
  }
327
327
  export {
@@ -22,6 +22,8 @@ class U extends O {
22
22
  new T(
23
23
  _.SETTINGS,
24
24
  [
25
+ I.ORIGINAL_PRICE_STYLE,
26
+ I.ORIGINAL_PRICE_ALIGN,
25
27
  I.PRICE_ORIENTATION,
26
28
  I.ORIGINAL_PRICE_PADDINGS
27
29
  ]
@@ -29,17 +31,17 @@ class U extends O {
29
31
  new T(
30
32
  _.STYLES,
31
33
  [
32
- I.ORIGINAL_PRICE_STYLE,
33
- I.ORIGINAL_PRICE_ALIGN,
34
- I.ORIGINAL_PRICE_COLOR,
35
34
  I.ORIGINAL_PRICE_FONT_FAMILY,
36
- I.ORIGINAL_PRICE_SIZE
35
+ I.ORIGINAL_PRICE_SIZE,
36
+ I.ORIGINAL_PRICE_COLOR
37
37
  ]
38
38
  )
39
39
  ], N[E.PRICE] = [
40
40
  new T(
41
41
  _.SETTINGS,
42
42
  [
43
+ I.PRICE_STYLE,
44
+ I.PRICE_ALIGN,
43
45
  I.PRICE_HIDE_DISCOUNT,
44
46
  I.PRICE_FORMATTED_PRICE,
45
47
  I.PRICE_SINGLE_PRICE,
@@ -51,11 +53,9 @@ class U extends O {
51
53
  new T(
52
54
  _.STYLES,
53
55
  [
54
- I.PRICE_STYLE,
55
- I.PRICE_ALIGN,
56
- I.PRICE_COLOR,
57
56
  I.PRICE_FONT_FAMILY,
58
- I.PRICE_SIZE
57
+ I.PRICE_SIZE,
58
+ I.PRICE_COLOR
59
59
  ]
60
60
  )
61
61
  ], N[E.NAME] = [
@@ -77,17 +77,12 @@ class U extends O {
77
77
  ]
78
78
  )
79
79
  ], N[E.QUANTITY] = [
80
- new T(
81
- _.SETTINGS,
82
- [
83
- I.QUANTITY_FONT_FAMILY,
84
- I.QUANTITY_STYLE
85
- ]
86
- ),
87
80
  new T(
88
81
  _.STYLES,
89
82
  [
83
+ I.QUANTITY_STYLE,
90
84
  I.QUANTITY_ALIGN,
85
+ I.QUANTITY_FONT_FAMILY,
91
86
  I.QUANTITY_SIZE,
92
87
  I.QUANTITY_COLOR,
93
88
  I.QUANTITY_PADDINGS
@@ -1,18 +1,28 @@
1
- import { Block as e, BlockCompositionType as t } from "../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
2
- import { getDefaultTemplate as o } from "./templates/blockTemplate.js";
3
- const n = "recommendation-block";
4
- class m extends e {
1
+ var u = Object.defineProperty;
2
+ var p = (r, i, t) => i in r ? u(r, i, { enumerable: !0, configurable: !0, writable: !0, value: t }) : r[i] = t;
3
+ var g = (r, i, t) => p(r, typeof i != "symbol" ? i + "" : i, t);
4
+ import { Block as f, BlockCompositionType as I, ModificationDescription as h } from "../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
5
+ import { RecommendationConfigService as s } from "./services/configService.js";
6
+ import { useRecommendationExtensionStore as d } from "./store/recommendation.js";
7
+ import { getDefaultTemplate as _ } from "./templates/grid/template.js";
8
+ const k = "recommendation-block", c = "ins-recommendation-v3-block-v2", m = "recommendation-id";
9
+ class b extends f {
5
10
  constructor() {
6
11
  super();
12
+ /**
13
+ * Stores the ID generated in getTemplate() so onCreated() can reuse it.
14
+ * This avoids generating a new (different) ID in onCreated().
15
+ */
16
+ g(this, "_pendingBlockId", null);
7
17
  }
8
18
  getId() {
9
- return n;
19
+ return k;
10
20
  }
11
21
  getIcon() {
12
22
  return "recommendation-icon";
13
23
  }
14
24
  getBlockCompositionType() {
15
- return t.CONTAINER;
25
+ return I.CONTAINER;
16
26
  }
17
27
  getName() {
18
28
  return this.api.translate("Recommendation Block");
@@ -20,11 +30,122 @@ class m extends e {
20
30
  getDescription() {
21
31
  return this.api.translate("Recommendation Block Title Description");
22
32
  }
33
+ /**
34
+ * Returns the template HTML for a new recommendation block.
35
+ * Generates a unique recommendation ID and embeds the instance class
36
+ * (ins-recommendation-v3-block-{id}) directly in the template HTML.
37
+ * This is necessary because Stripo's Angular rendering manages the class
38
+ * attribute and overwrites dynamically added classes via setAttribute.
39
+ */
23
40
  getTemplate() {
24
- return o();
41
+ const t = this._generateNextId();
42
+ return this._pendingBlockId = t, _(t);
43
+ }
44
+ /**
45
+ * Called when a new block is dropped into the template
46
+ *
47
+ * Uses the ID from getTemplate() (which already embedded the instance class)
48
+ * and assigns the recommendation-id attribute + initializes configuration.
49
+ * @param node - The newly created block node
50
+ */
51
+ onCreated(t) {
52
+ const e = this._pendingBlockId ?? this._generateNextId();
53
+ this._pendingBlockId = null, this._assignRecommendationId(t, e), s.initializeConfig(this.api, t, { recommendationId: e }), d().setCurrentBlock(e);
54
+ }
55
+ /**
56
+ * Called when the document changes or template is loaded
57
+ *
58
+ * Handles migration from legacy templates that don't have node config
59
+ * and assigns recommendation-id to legacy blocks that lack one.
60
+ * @param node - The block node that may need migration
61
+ */
62
+ onDocumentChanged(t) {
63
+ if (!(!t || !("getNodeConfig" in t))) {
64
+ if (!this._getRecommendationId(t)) {
65
+ const e = this._generateNextId();
66
+ this._assignRecommendationId(t, e), s.hasConfig(t) && s.updateConfig(
67
+ this.api,
68
+ t,
69
+ { recommendationId: e },
70
+ "Assign recommendation ID to legacy block"
71
+ );
72
+ }
73
+ s.needsMigration(t) && this._migrateFromLegacy(t);
74
+ }
75
+ }
76
+ /**
77
+ * Called when a block is deleted from the template
78
+ *
79
+ * Cleans up the per-block state from the Pinia store.
80
+ * @param node - The block node being deleted
81
+ */
82
+ onDelete(t) {
83
+ const e = this._getRecommendationId(t);
84
+ e && d().removeBlockState(e);
85
+ }
86
+ /**
87
+ * Generates the next unique recommendation ID by scanning all existing blocks
88
+ * in the document and finding the maximum existing ID + 1.
89
+ */
90
+ _generateNextId() {
91
+ let t = 0;
92
+ try {
93
+ const e = this.api.getDocumentRoot();
94
+ e && "querySelectorAll" in e && e.querySelectorAll(`.${c}`).forEach((o) => {
95
+ if ("getAttribute" in o) {
96
+ const a = o.getAttribute(m), l = a ? parseInt(a) : 0;
97
+ l > t && (t = l);
98
+ }
99
+ });
100
+ } catch {
101
+ }
102
+ return t + 1;
103
+ }
104
+ /**
105
+ * Assigns a recommendation-id attribute to the block element.
106
+ * The instance class (ins-recommendation-v3-block-{id}) is embedded in the template
107
+ * HTML by getTemplate(), since Stripo's Angular rendering overwrites dynamically
108
+ * added classes via setAttribute.
109
+ */
110
+ _assignRecommendationId(t, e) {
111
+ const n = this._getBlockElement(t);
112
+ if (!n)
113
+ return;
114
+ const o = this.api.getDocumentModifier();
115
+ o.modifyHtml(n).setAttribute(m, e.toString()), o.apply(new h(`Assign recommendation ID ${e}`));
116
+ }
117
+ /**
118
+ * Gets the recommendation-id from a block node
119
+ */
120
+ _getRecommendationId(t) {
121
+ const e = this._getBlockElement(t);
122
+ if (!e || !("getAttribute" in e))
123
+ return null;
124
+ const n = e.getAttribute(m);
125
+ if (!n)
126
+ return null;
127
+ const o = parseInt(n);
128
+ return Number.isNaN(o) ? null : o;
129
+ }
130
+ /**
131
+ * Gets the block element (the element with BLOCK_CLASS)
132
+ */
133
+ _getBlockElement(t) {
134
+ if ("getAttribute" in t) {
135
+ const e = t.getAttribute("class");
136
+ if (e && e.includes(c))
137
+ return t;
138
+ }
139
+ return "querySelector" in t ? t.querySelector(`.${c}`) : null;
140
+ }
141
+ /**
142
+ * Migrate configuration from legacy format
143
+ */
144
+ _migrateFromLegacy(t) {
145
+ s.migrateFromDataAttributes(this.api, t);
25
146
  }
26
147
  }
27
148
  export {
28
- n as BLOCK_ID,
29
- m as RecommendationBlock
149
+ k as BLOCK_ID,
150
+ b as RecommendationBlock
30
151
  };
@@ -0,0 +1,4 @@
1
+ var b = /* @__PURE__ */ ((r) => (r.BUTTON = "recommendation-block-button", r.NAME = "recommendation-block-name", r.PRICE = "recommendation-block-price", r.OLD_PRICE = "recommendation-block-old-price", r.OMNIBUS_PRICE = "recommendation-block-omnibus-price", r.OMNIBUS_DISCOUNT = "recommendation-block-omnibus-discount", r.IMAGE = "recommendation-block-image", r))(b || {});
2
+ export {
3
+ b as RecommendationBlockId
4
+ };
@@ -0,0 +1,4 @@
1
+ var o = /* @__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))(o || {});
2
+ export {
3
+ o as RecommendationControlId
4
+ };