@useinsider/guido 2.1.0-beta.7d0f92a → 2.1.0-beta.860ef21

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 (132) hide show
  1. package/dist/components/organisms/extensions/recommendation/FilterSelectionDrawer.vue2.js +14 -15
  2. package/dist/composables/useHtmlValidator.js +84 -106
  3. package/dist/composables/useRecommendation.js +21 -54
  4. package/dist/config/compiler/recommendationCompilerRules.js +39 -45
  5. package/dist/config/migrator/recommendationMigrator.js +2 -2
  6. package/dist/enums/extensions/recommendationBlock.js +1 -1
  7. package/dist/enums/recommendation.js +15 -16
  8. package/dist/extensions/Blocks/Recommendation/block.js +9 -130
  9. package/dist/extensions/Blocks/Recommendation/cardCompositionControl.js +187 -0
  10. package/dist/extensions/Blocks/Recommendation/constants.js +13 -0
  11. package/dist/extensions/Blocks/Recommendation/control.js +336 -0
  12. package/dist/extensions/Blocks/Recommendation/controls/cardBackgroundColorControl.js +68 -0
  13. package/dist/extensions/Blocks/Recommendation/controls/index.js +245 -0
  14. package/dist/extensions/Blocks/Recommendation/controls/nameTextTrimControl.js +74 -0
  15. package/dist/extensions/Blocks/Recommendation/controls/{omnibusDiscount/textAfter.js → omnibusDiscountTextAfterControl.js} +14 -16
  16. package/dist/extensions/Blocks/Recommendation/controls/{omnibusDiscount/textBefore.js → omnibusDiscountTextBeforeControl.js} +14 -16
  17. package/dist/extensions/Blocks/Recommendation/controls/{omnibusPrice/textAfter.js → omnibusPriceTextAfterControl.js} +14 -16
  18. package/dist/extensions/Blocks/Recommendation/controls/{omnibusPrice/textBefore.js → omnibusPriceTextBeforeControl.js} +12 -14
  19. package/dist/extensions/Blocks/Recommendation/controls/spacingControl.js +188 -0
  20. package/dist/extensions/Blocks/Recommendation/extension.js +17 -40
  21. package/dist/extensions/Blocks/Recommendation/iconsRegistry.js +3 -19
  22. package/dist/extensions/Blocks/Recommendation/recommendation.css.js +4 -13
  23. package/dist/extensions/Blocks/Recommendation/settingsPanel.js +10 -21
  24. package/dist/extensions/Blocks/Recommendation/store/recommendation.js +193 -230
  25. package/dist/extensions/Blocks/Recommendation/templates/blockTemplate.js +181 -0
  26. package/dist/extensions/Blocks/Recommendation/templates/migrationTemplate.js +189 -0
  27. package/dist/extensions/Blocks/Recommendation/templates/templateUtils.js +209 -0
  28. package/dist/extensions/Blocks/Recommendation/utils/filterUtil.js +9 -9
  29. package/dist/extensions/Blocks/Recommendation/utils/preserveTextStyles.js +15 -26
  30. package/dist/extensions/Blocks/controlFactories.js +93 -125
  31. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js +169 -223
  32. package/dist/services/recommendationApi.js +9 -10
  33. package/dist/services/templateLibraryApi.js +13 -16
  34. package/dist/src/components/wrappers/WpDrawer.vue.d.ts +1 -1
  35. package/dist/src/composables/useRecommendation.d.ts +0 -1
  36. package/dist/src/extensions/Blocks/Recommendation/block.d.ts +0 -67
  37. package/dist/src/extensions/Blocks/Recommendation/{controls/cardComposition/index.d.ts → cardCompositionControl.d.ts} +3 -23
  38. package/dist/src/extensions/Blocks/Recommendation/{constants/controlIds.d.ts → constants.d.ts} +24 -0
  39. package/dist/src/extensions/Blocks/Recommendation/control.d.ts +38 -0
  40. package/dist/src/extensions/Blocks/Recommendation/controls/index.d.ts +589 -21
  41. package/dist/src/extensions/Blocks/Recommendation/controls/nameTextTrimControl.d.ts +16 -0
  42. package/dist/src/extensions/Blocks/Recommendation/extension.d.ts +0 -9
  43. package/dist/src/extensions/Blocks/Recommendation/store/recommendation.d.ts +468 -131
  44. package/dist/src/extensions/Blocks/Recommendation/templates/blockTemplate.d.ts +16 -0
  45. package/dist/src/extensions/Blocks/Recommendation/templates/{grid/migration.d.ts → migrationTemplate.d.ts} +4 -11
  46. package/dist/src/extensions/Blocks/Recommendation/templates/templateUtils.d.ts +52 -0
  47. package/dist/static/styles/components/notification.css.js +1 -0
  48. package/dist/static/styles/components/wide-panel.css.js +15 -0
  49. package/dist/static/styles/customEditorStyle.css.js +2 -25
  50. package/dist/utils/pairProductVariables.js +56 -57
  51. package/dist/utils/templatePreparation.js +14 -15
  52. package/package.json +2 -2
  53. package/dist/config/compiler/utils/recommendationCompilerUtils.js +0 -116
  54. package/dist/extensions/Blocks/Recommendation/constants/blockIds.js +0 -4
  55. package/dist/extensions/Blocks/Recommendation/constants/controlIds.js +0 -4
  56. package/dist/extensions/Blocks/Recommendation/constants/defaultConfig.js +0 -65
  57. package/dist/extensions/Blocks/Recommendation/constants/layout.js +0 -20
  58. package/dist/extensions/Blocks/Recommendation/constants/selectors.js +0 -19
  59. package/dist/extensions/Blocks/Recommendation/controls/button/index.js +0 -64
  60. package/dist/extensions/Blocks/Recommendation/controls/cardBackground/index.js +0 -80
  61. package/dist/extensions/Blocks/Recommendation/controls/cardComposition/index.js +0 -232
  62. package/dist/extensions/Blocks/Recommendation/controls/image/index.js +0 -19
  63. package/dist/extensions/Blocks/Recommendation/controls/layout/index.js +0 -92
  64. package/dist/extensions/Blocks/Recommendation/controls/main/algorithm.js +0 -102
  65. package/dist/extensions/Blocks/Recommendation/controls/main/currency.js +0 -209
  66. package/dist/extensions/Blocks/Recommendation/controls/main/filters.js +0 -52
  67. package/dist/extensions/Blocks/Recommendation/controls/main/index.js +0 -217
  68. package/dist/extensions/Blocks/Recommendation/controls/main/locale.js +0 -70
  69. package/dist/extensions/Blocks/Recommendation/controls/main/productLayout.js +0 -110
  70. package/dist/extensions/Blocks/Recommendation/controls/main/shuffle.js +0 -67
  71. package/dist/extensions/Blocks/Recommendation/controls/main/utils.js +0 -286
  72. package/dist/extensions/Blocks/Recommendation/controls/name/index.js +0 -46
  73. package/dist/extensions/Blocks/Recommendation/controls/name/textTrim.js +0 -108
  74. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/index.js +0 -44
  75. package/dist/extensions/Blocks/Recommendation/controls/omnibusDiscount/index.js +0 -48
  76. package/dist/extensions/Blocks/Recommendation/controls/omnibusPrice/index.js +0 -48
  77. package/dist/extensions/Blocks/Recommendation/controls/price/index.js +0 -44
  78. package/dist/extensions/Blocks/Recommendation/controls/spacing/index.js +0 -222
  79. package/dist/extensions/Blocks/Recommendation/services/configService.js +0 -240
  80. package/dist/extensions/Blocks/Recommendation/templates/grid/elementRenderer.js +0 -233
  81. package/dist/extensions/Blocks/Recommendation/templates/grid/migration.js +0 -251
  82. package/dist/extensions/Blocks/Recommendation/templates/grid/template.js +0 -69
  83. package/dist/extensions/Blocks/Recommendation/templates/index.js +0 -12
  84. package/dist/extensions/Blocks/Recommendation/templates/list/elementRenderer.js +0 -174
  85. package/dist/extensions/Blocks/Recommendation/templates/list/template.js +0 -73
  86. package/dist/extensions/Blocks/Recommendation/templates/utils.js +0 -122
  87. package/dist/extensions/Blocks/Recommendation/types/nodeConfig.js +0 -6
  88. package/dist/extensions/Blocks/Recommendation/utils/priceFormatter.js +0 -29
  89. package/dist/extensions/Blocks/Recommendation/utils/tagName.js +0 -46
  90. package/dist/src/config/compiler/utils/recommendationCompilerUtils.d.ts +0 -17
  91. package/dist/src/extensions/Blocks/Recommendation/constants/blockIds.d.ts +0 -13
  92. package/dist/src/extensions/Blocks/Recommendation/constants/defaultConfig.d.ts +0 -49
  93. package/dist/src/extensions/Blocks/Recommendation/constants/index.d.ts +0 -13
  94. package/dist/src/extensions/Blocks/Recommendation/constants/layout.d.ts +0 -35
  95. package/dist/src/extensions/Blocks/Recommendation/constants/selectors.d.ts +0 -31
  96. package/dist/src/extensions/Blocks/Recommendation/controls/button/index.d.ts +0 -143
  97. package/dist/src/extensions/Blocks/Recommendation/controls/cardBackground/index.d.ts +0 -31
  98. package/dist/src/extensions/Blocks/Recommendation/controls/image/index.d.ts +0 -35
  99. package/dist/src/extensions/Blocks/Recommendation/controls/layout/index.d.ts +0 -37
  100. package/dist/src/extensions/Blocks/Recommendation/controls/main/algorithm.d.ts +0 -29
  101. package/dist/src/extensions/Blocks/Recommendation/controls/main/currency.d.ts +0 -52
  102. package/dist/src/extensions/Blocks/Recommendation/controls/main/filters.d.ts +0 -22
  103. package/dist/src/extensions/Blocks/Recommendation/controls/main/index.d.ts +0 -68
  104. package/dist/src/extensions/Blocks/Recommendation/controls/main/locale.d.ts +0 -24
  105. package/dist/src/extensions/Blocks/Recommendation/controls/main/productLayout.d.ts +0 -42
  106. package/dist/src/extensions/Blocks/Recommendation/controls/main/shuffle.d.ts +0 -23
  107. package/dist/src/extensions/Blocks/Recommendation/controls/main/utils.d.ts +0 -214
  108. package/dist/src/extensions/Blocks/Recommendation/controls/name/index.d.ts +0 -97
  109. package/dist/src/extensions/Blocks/Recommendation/controls/name/textTrim.d.ts +0 -34
  110. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/index.d.ts +0 -95
  111. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscount/index.d.ts +0 -100
  112. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscount/textAfter.d.ts +0 -15
  113. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscount/textBefore.d.ts +0 -15
  114. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPrice/index.d.ts +0 -100
  115. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPrice/textAfter.d.ts +0 -15
  116. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPrice/textBefore.d.ts +0 -15
  117. package/dist/src/extensions/Blocks/Recommendation/controls/price/index.d.ts +0 -95
  118. package/dist/src/extensions/Blocks/Recommendation/controls/spacing/index.d.ts +0 -83
  119. package/dist/src/extensions/Blocks/Recommendation/services/configService.d.ts +0 -151
  120. package/dist/src/extensions/Blocks/Recommendation/services/index.d.ts +0 -6
  121. package/dist/src/extensions/Blocks/Recommendation/templates/grid/elementRenderer.d.ts +0 -20
  122. package/dist/src/extensions/Blocks/Recommendation/templates/grid/template.d.ts +0 -33
  123. package/dist/src/extensions/Blocks/Recommendation/templates/index.d.ts +0 -39
  124. package/dist/src/extensions/Blocks/Recommendation/templates/list/elementRenderer.d.ts +0 -8
  125. package/dist/src/extensions/Blocks/Recommendation/templates/list/migration.d.ts +0 -25
  126. package/dist/src/extensions/Blocks/Recommendation/templates/list/template.d.ts +0 -18
  127. package/dist/src/extensions/Blocks/Recommendation/templates/utils.d.ts +0 -57
  128. package/dist/src/extensions/Blocks/Recommendation/types/index.d.ts +0 -7
  129. package/dist/src/extensions/Blocks/Recommendation/types/nodeConfig.d.ts +0 -160
  130. package/dist/src/extensions/Blocks/Recommendation/utils/priceFormatter.d.ts +0 -33
  131. package/dist/src/extensions/Blocks/Recommendation/utils/stylePreserver.d.ts +0 -113
  132. package/dist/src/extensions/Blocks/Recommendation/utils/tagName.d.ts +0 -77
@@ -0,0 +1,336 @@
1
+ var p = Object.defineProperty;
2
+ var S = (a, s, e) => s in a ? p(a, s, { enumerable: !0, configurable: !0, writable: !0, value: e }) : a[s] = e;
3
+ var u = (a, s, e) => S(a, typeof s != "symbol" ? s + "" : s, e);
4
+ import { currencyDecimalCounts as _, currencyOperators as C, currencyLocationMaps as R } from "../../../enums/extensions/recommendationBlock.js";
5
+ import { UEAttr as O, ModificationDescription as g } from "../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
6
+ import { CommonControl as U } from "../common-control.js";
7
+ import { useRecommendationExtensionStore as N } from "./store/recommendation.js";
8
+ import { prepareProductRows as E } from "./templates/blockTemplate.js";
9
+ import { DEFAULT_CARD_COMPOSITION as d, getDefaultProducts as L } from "./templates/templateUtils.js";
10
+ import { useDebounceFn as T } from "../../../node_modules/@vueuse/shared/index.js";
11
+ const f = "ui-elements-recommendation-block", t = {
12
+ ALGORITHM: "strategy",
13
+ PRODUCT_IDS: "productIds",
14
+ LOCALE: "language",
15
+ CURRENCY: "value",
16
+ CURRENCY_LOCATION: "alignment",
17
+ CURRENCY_SYMBOL: "symbol",
18
+ CURRENCY_THOUSAND_SEPARATOR: "thousandSeparator",
19
+ CURRENCY_DECIMAL_SEPARATOR: "decimalSeparator",
20
+ CURRENCY_DECIMAL_COUNT: "decimalCount",
21
+ FILTERS: "filterStatus",
22
+ PRODUCT_COUNT: "size",
23
+ PRODUCT_IN_ROW: "cardsInRow",
24
+ SHUFFLE_PRODUCTS: "shuffleProducts"
25
+ };
26
+ class Y extends U {
27
+ constructor() {
28
+ super(...arguments);
29
+ u(this, "store", N());
30
+ u(this, "storeUnsubscription", () => {
31
+ });
32
+ u(this, "addFilterListener", () => {
33
+ });
34
+ u(this, "addFilterButton", null);
35
+ u(this, "_debouncedRegenerateProductRows", T(() => {
36
+ this._regenerateProductRows();
37
+ }, 500));
38
+ }
39
+ getId() {
40
+ return f;
41
+ }
42
+ getTemplate() {
43
+ return `
44
+ <div class="recommendation-controls-container">
45
+ ${this._getAlgorithms()}
46
+ ${this._getLanguages()}
47
+ ${this._getCurrency()}
48
+ ${this._getFilterStatus()}
49
+ ${this._getProductLayout()}
50
+ ${this._getShuffleProducts()}
51
+ </div>
52
+ `;
53
+ }
54
+ async onRender() {
55
+ await Promise.all([
56
+ this.store.fetchRecommendationFilters(),
57
+ this.store.fetchRecommendationCreateData(),
58
+ this.store.fetchRecommendationProducts()
59
+ // TODO: We need to change the location. It's just for testing
60
+ ]), this._listenStateUpdates(), this._initializeSelectItems(), this._setFormValues(), this._listenToFormUpdates();
61
+ }
62
+ onDestroy() {
63
+ var e;
64
+ (e = this.addFilterButton) == null || e.removeEventListener("click", this.addFilterListener), this.storeUnsubscription();
65
+ }
66
+ _setFormValues() {
67
+ const e = this.store.recommendationConfigs;
68
+ this._setProductIdsVisibility(), this.api.updateValues({
69
+ [t.ALGORITHM]: e.strategy,
70
+ [t.PRODUCT_IDS]: e.productIds.join(","),
71
+ [t.CURRENCY]: e.currencySettings.value,
72
+ [t.LOCALE]: e.language,
73
+ [t.CURRENCY_LOCATION]: e.currencySettings.alignment,
74
+ [t.CURRENCY_SYMBOL]: e.currencySettings.symbol,
75
+ [t.CURRENCY_THOUSAND_SEPARATOR]: e.currencySettings.thousandSeparator,
76
+ [t.CURRENCY_DECIMAL_SEPARATOR]: e.currencySettings.decimalSeparator,
77
+ [t.CURRENCY_DECIMAL_COUNT]: e.currencySettings.decimalCount,
78
+ [t.PRODUCT_COUNT]: e.size,
79
+ [t.PRODUCT_IN_ROW]: e.cardsInRow,
80
+ [t.SHUFFLE_PRODUCTS]: e.shuffleProducts
81
+ });
82
+ }
83
+ _initializeSelectItems() {
84
+ const { store: e } = this, o = e.getActivePredictiveAlgorithms, i = e.getLanguages, n = {
85
+ [t.ALGORITHM]: o,
86
+ [t.LOCALE]: i,
87
+ [t.CURRENCY]: e.currencyList,
88
+ [t.CURRENCY_LOCATION]: R,
89
+ [t.CURRENCY_SYMBOL]: e.getCurrencySymbolList,
90
+ [t.CURRENCY_THOUSAND_SEPARATOR]: C,
91
+ [t.CURRENCY_DECIMAL_SEPARATOR]: C,
92
+ [t.CURRENCY_DECIMAL_COUNT]: _,
93
+ [t.PRODUCT_COUNT]: Number(e.recommendationConfigs.size),
94
+ [t.PRODUCT_IN_ROW]: e.recommendationConfigs.cardsInRow,
95
+ [t.SHUFFLE_PRODUCTS]: e.recommendationConfigs.shuffleProducts
96
+ };
97
+ Object.entries(n).forEach(([r, l]) => {
98
+ this.api.setUIEAttribute(r, O.SELECTPICKER.items, l);
99
+ });
100
+ }
101
+ _getAlgorithms() {
102
+ return `
103
+ ${this._GuTwoColumns([
104
+ this._GuLabel({ text: "Recommendation Algorithm" }),
105
+ this._GuSelect({
106
+ name: t.ALGORITHM,
107
+ placeholder: "Select Recommendation Algorithm",
108
+ options: this.store.getActivePredictiveAlgorithms
109
+ }),
110
+ this._GuLabel({ text: "Product Ids", name: `${t.PRODUCT_IDS}_label` }),
111
+ this._GuTextInput({
112
+ name: t.PRODUCT_IDS,
113
+ placeholder: "Enter Product Ids",
114
+ className: "es-180w"
115
+ })
116
+ ])}
117
+ `;
118
+ }
119
+ _getLanguages() {
120
+ return `
121
+ ${this._GuTwoColumns([
122
+ this._GuLabel({ text: "Recommendation Locale" }),
123
+ this._GuSelect({
124
+ name: t.LOCALE,
125
+ placeholder: "Select Recommendation Locale",
126
+ options: this.store.getLanguages
127
+ })
128
+ ])}
129
+ `;
130
+ }
131
+ _getCurrency() {
132
+ return `
133
+ ${this._GuTwoColumns([
134
+ this._GuLabel({ text: "Currency" }),
135
+ this._GuSelect({
136
+ name: t.CURRENCY,
137
+ placeholder: "Select Currency",
138
+ options: this.store.currencyList
139
+ }),
140
+ this._GuLabel({ text: "Currency Location" }),
141
+ this._GuSelect({
142
+ name: t.CURRENCY_LOCATION,
143
+ placeholder: "Select Currency Location",
144
+ options: R
145
+ }),
146
+ this._GuLabel({ text: "Currency Symbol" }),
147
+ this._GuSelect({
148
+ name: t.CURRENCY_SYMBOL,
149
+ placeholder: "Select Currency Symbol",
150
+ options: this.store.getCurrencySymbolList
151
+ }),
152
+ this._GuLabel({ text: "Thousand Separator" }),
153
+ this._GuSelect({
154
+ name: t.CURRENCY_THOUSAND_SEPARATOR,
155
+ placeholder: "Select Thousand Separator",
156
+ options: C
157
+ }),
158
+ this._GuLabel({ text: "Decimal Separator" }),
159
+ this._GuSelect({
160
+ name: t.CURRENCY_DECIMAL_SEPARATOR,
161
+ placeholder: "Select Decimal Separator",
162
+ options: C
163
+ }),
164
+ this._GuLabel({ text: "Decimal Count" }),
165
+ this._GuSelect({
166
+ name: t.CURRENCY_DECIMAL_COUNT,
167
+ placeholder: "Select Decimal Count",
168
+ options: _
169
+ })
170
+ ])}
171
+ `;
172
+ }
173
+ _getProductLayout() {
174
+ return `
175
+ ${this._GuTwoColumns([
176
+ this._GuLabel({ text: "Number of Products" }),
177
+ this._GuCounter({ name: t.PRODUCT_COUNT, maxValue: 9 }),
178
+ this._GuLabel({ text: "Products in One Row" }),
179
+ this._GuCounter({ name: t.PRODUCT_IN_ROW, maxValue: 4 })
180
+ ])}
181
+ `;
182
+ }
183
+ _getFilterStatus() {
184
+ return `
185
+ ${this._GuTwoColumns([
186
+ this._GuLabel({ text: "Filters" }),
187
+ this._GuButton({
188
+ name: t.FILTERS,
189
+ label: "Add Filter",
190
+ id: "guido__btn-add-filter"
191
+ })
192
+ ])}
193
+ `;
194
+ }
195
+ _getShuffleProducts() {
196
+ return `
197
+ ${this._GuTwoColumns([
198
+ this._GuLabel({ text: "Shuffle Recommended Products" }),
199
+ this._GuToggle(t.SHUFFLE_PRODUCTS)
200
+ ])}
201
+ `;
202
+ }
203
+ _onFilterSelectClick() {
204
+ this.store.$patch({
205
+ filterSelectionDrawerStatus: !0
206
+ });
207
+ }
208
+ _onDataChange(e, o) {
209
+ this.currentNode && (this.store.$patch({
210
+ recommendationConfigs: {
211
+ [e]: o
212
+ }
213
+ }), this._debouncedRegenerateProductRows());
214
+ }
215
+ /**
216
+ * Get the current card composition from block data attribute or use default
217
+ */
218
+ _getCardComposition() {
219
+ if (!this.currentNode)
220
+ return d;
221
+ const e = this.currentNode.querySelector(".ins-recommendation-v3-block-v2");
222
+ if (!e || !("getAttribute" in e))
223
+ return d;
224
+ const o = e.getAttribute("data-card-composition");
225
+ return o ? o.split(",").filter(Boolean) : d;
226
+ }
227
+ _regenerateProductRows() {
228
+ if (!this.currentNode || !("querySelector" in this.currentNode))
229
+ return;
230
+ const e = this.currentNode.querySelector(".ins-recommendation-product-container");
231
+ if (!e) {
232
+ console.error("Could not find container table for product rows");
233
+ return;
234
+ }
235
+ const o = this.store.recommendationProducts.length > 0 ? this.store.recommendationProducts : L(), { cardsInRow: i } = this.store.recommendationConfigs, n = this._getCardComposition(), r = E(o, i, n);
236
+ this.api.getDocumentModifier().modifyHtml(e).setInnerHtml(r).apply(new g("Updated product")), this._reapplySpacing();
237
+ }
238
+ /**
239
+ * Reapply spacing values after product regeneration
240
+ * This ensures spacing persists when products are regenerated
241
+ */
242
+ _reapplySpacing() {
243
+ if (!this.currentNode)
244
+ return;
245
+ const e = this.currentNode.querySelector(".ins-recommendation-v3-block-v2");
246
+ if (!e || !("getAttribute" in e))
247
+ return;
248
+ const o = e.getAttribute("data-column-spacing"), i = e.getAttribute("data-row-spacing"), n = this.api.getDocumentModifier();
249
+ if (o) {
250
+ const r = parseInt(o);
251
+ if (!Number.isNaN(r)) {
252
+ const h = `0 ${Math.floor(r / 2)}px`;
253
+ Array.from(
254
+ this.currentNode.querySelectorAll(".product-card-wrapper")
255
+ ).forEach((c) => {
256
+ "parentNode" in c && c.parentNode && typeof c.parentNode == "object" && "tagName" in c.parentNode && c.parentNode.tagName === "TD" && n.modifyHtml(c.parentNode).setStyle("padding", h);
257
+ });
258
+ }
259
+ }
260
+ if (i) {
261
+ const r = parseInt(i);
262
+ if (!Number.isNaN(r)) {
263
+ const l = `${r}px`;
264
+ Array.from(this.currentNode.querySelectorAll(".spacer")).forEach((m) => {
265
+ n.modifyHtml(m).setStyle("height", l);
266
+ });
267
+ }
268
+ }
269
+ (o || i) && n.apply(new g("Reapply spacing after regeneration"));
270
+ }
271
+ _onCurrencyConfigChange(e, o) {
272
+ this.currentNode && this.store.$patch({
273
+ recommendationConfigs: {
274
+ currencySettings: {
275
+ [e]: o
276
+ }
277
+ }
278
+ });
279
+ }
280
+ _onCurrencyChange(e) {
281
+ const [, o] = e.split(".");
282
+ this.store.$patch({
283
+ recommendationConfigs: {
284
+ currencySettings: {
285
+ name: o,
286
+ value: o
287
+ }
288
+ }
289
+ });
290
+ }
291
+ _setProductIdsVisibility() {
292
+ const { recommendationConfigs: e } = this.store, o = e.strategy === "manualMerchandising";
293
+ this.api.setVisibility(t.PRODUCT_IDS, o), this.api.setVisibility(`${t.PRODUCT_IDS}_label`, o);
294
+ }
295
+ _listenToFormUpdates() {
296
+ var o;
297
+ this.api.onValueChanged(t.ALGORITHM, (i) => {
298
+ const n = i;
299
+ this._onDataChange(t.ALGORITHM, n), this._setProductIdsVisibility();
300
+ }), this.api.onValueChanged(t.PRODUCT_IDS, (i) => {
301
+ this._onDataChange(t.PRODUCT_IDS, i.split(",") || []);
302
+ }), this.api.onValueChanged(t.LOCALE, (i) => {
303
+ this._onDataChange(t.LOCALE, i);
304
+ }), this.api.onValueChanged(t.CURRENCY, (i) => {
305
+ this._onCurrencyChange(i);
306
+ }), [
307
+ t.CURRENCY_LOCATION,
308
+ t.CURRENCY_SYMBOL,
309
+ t.CURRENCY_THOUSAND_SEPARATOR,
310
+ t.CURRENCY_DECIMAL_SEPARATOR,
311
+ t.CURRENCY_DECIMAL_COUNT
312
+ ].forEach((i) => {
313
+ this.api.onValueChanged(i, (n) => {
314
+ this._onCurrencyConfigChange(i, n);
315
+ });
316
+ }), this.api.onValueChanged(t.PRODUCT_COUNT, (i) => {
317
+ this._onDataChange(t.PRODUCT_COUNT, i.toString());
318
+ }), this.api.onValueChanged(t.PRODUCT_IN_ROW, (i) => {
319
+ this._onDataChange(t.PRODUCT_IN_ROW, i);
320
+ }), this.api.onValueChanged(t.SHUFFLE_PRODUCTS, (i) => {
321
+ this._onDataChange(t.SHUFFLE_PRODUCTS, i);
322
+ }), this.addFilterListener = this._onFilterSelectClick.bind(this), this.addFilterButton = this.getContainer().querySelector("#guido__btn-add-filter"), (o = this.addFilterButton) == null || o.addEventListener("click", this.addFilterListener);
323
+ }
324
+ _listenStateUpdates() {
325
+ this.storeUnsubscription = this.store.$subscribe((e) => {
326
+ if ("payload" in e) {
327
+ const o = e.payload.recommendationConfigs;
328
+ o && (this.api.updateValues(o), this.store.fetchRecommendationProducts());
329
+ }
330
+ });
331
+ }
332
+ }
333
+ export {
334
+ f as CONTROL_BLOCK_ID,
335
+ Y as RecommendationBlockControl
336
+ };
@@ -0,0 +1,68 @@
1
+ import { ModificationDescription as a } from "../../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
2
+ import { CommonControl as d } from "../../common-control.js";
3
+ const c = "recommendation-card-background-color-control", o = {
4
+ CARD_BACKGROUND_COLOR: "cardBackgroundColor"
5
+ };
6
+ class u extends d {
7
+ getId() {
8
+ return c;
9
+ }
10
+ getTemplate() {
11
+ return `
12
+ <div class="card-bg-control-container">
13
+ ${this._GuTwoColumns([
14
+ this._GuLabel({ text: "Card Background Color" }),
15
+ this._GuColorPicker(o.CARD_BACKGROUND_COLOR)
16
+ ])}
17
+ </div>
18
+ `;
19
+ }
20
+ onRender() {
21
+ this._setFormValues(), this._listenToFormUpdates();
22
+ }
23
+ onTemplateNodeUpdated(r) {
24
+ super.onTemplateNodeUpdated(r), this._setFormValues();
25
+ }
26
+ _setFormValues() {
27
+ const r = this._getCurrentCardBackgroundColor();
28
+ this.api.updateValues({
29
+ [o.CARD_BACKGROUND_COLOR]: r
30
+ });
31
+ }
32
+ /**
33
+ * Reads the current background color from the first product card wrapper
34
+ * @returns The background color value or 'transparent' if not found
35
+ */
36
+ _getCurrentCardBackgroundColor() {
37
+ if (!this.currentNode || !("querySelectorAll" in this.currentNode))
38
+ return "transparent";
39
+ const r = this.currentNode.querySelector(".product-card-wrapper");
40
+ return !r || !("getStyle" in r) ? "transparent" : r.getStyle("background-color") || "transparent";
41
+ }
42
+ /**
43
+ * Handles card background color changes
44
+ * Applies the color to all product card wrapper elements
45
+ */
46
+ _onCardBackgroundColorChange(r) {
47
+ if (!this.currentNode || !("querySelectorAll" in this.currentNode))
48
+ return;
49
+ const e = Array.from(
50
+ this.currentNode.querySelectorAll(".product-card-wrapper")
51
+ );
52
+ if (e.length === 0)
53
+ return;
54
+ const t = this.api.getDocumentModifier();
55
+ e.forEach((n) => {
56
+ t.modifyHtml(n).setStyle("background-color", r);
57
+ }), t.apply(new a("Update card background color"));
58
+ }
59
+ _listenToFormUpdates() {
60
+ this.api.onValueChanged(o.CARD_BACKGROUND_COLOR, (r) => {
61
+ this._onCardBackgroundColorChange(r);
62
+ });
63
+ }
64
+ }
65
+ export {
66
+ c as CARD_BACKGROUND_COLOR_CONTROL_ID,
67
+ u as CardBackgroundColorControl
68
+ };
@@ -0,0 +1,245 @@
1
+ import { createButtonAlignControl as c, createButtonBorderControl as _, createButtonBorderRadiusControl as T, createButtonColorControl as i, createButtonFitToContainerControl as B, createButtonFontFamilyControl as s, createButtonMarginsControl as S, createButtonPaddingsControl as E, createButtonTextControl as P, createButtonTextSizeControl as U, createButtonTextStyleAndFontColorControl as R, createImageMarginsControl as a, createImageSizeControl as M, createTextAlignControl as C, createTextBackgroundColorControl as r, createTextColorControl as O, createTextFontFamilyControl as I, createPaddingsControl as e, createTextSizeControl as N, createTextStyleControl as l } from "../../controlFactories.js";
2
+ import { RecommendationBlockId as o, RecommendationControlId as t } from "../constants.js";
3
+ const n = ".ins-recommendation-product-container", u = C(
4
+ t.NAME_ALIGN,
5
+ o.NAME,
6
+ n
7
+ ), d = O(
8
+ t.NAME_COLOR,
9
+ o.NAME,
10
+ n
11
+ ), m = N(
12
+ t.NAME_SIZE,
13
+ o.NAME,
14
+ n
15
+ ), L = l(
16
+ t.NAME_STYLE,
17
+ o.NAME,
18
+ n
19
+ ), F = I(
20
+ t.NAME_FONT_FAMILY,
21
+ o.NAME,
22
+ n
23
+ ), g = r(
24
+ t.NAME_BACKGROUND,
25
+ o.NAME,
26
+ n
27
+ ), G = e(
28
+ t.NAME_PADDINGS,
29
+ o.NAME,
30
+ n
31
+ ), y = C(
32
+ t.PRICE_ALIGN,
33
+ o.PRICE,
34
+ n
35
+ ), b = O(
36
+ t.PRICE_COLOR,
37
+ o.PRICE,
38
+ n
39
+ ), x = N(
40
+ t.PRICE_SIZE,
41
+ o.PRICE,
42
+ n
43
+ ), Y = l(
44
+ t.PRICE_STYLE,
45
+ o.PRICE,
46
+ n
47
+ ), z = I(
48
+ t.PRICE_FONT_FAMILY,
49
+ o.PRICE,
50
+ n
51
+ ), k = r(
52
+ t.PRICE_BACKGROUND,
53
+ o.PRICE,
54
+ n
55
+ ), Z = e(
56
+ t.PRICE_PADDINGS,
57
+ o.PRICE,
58
+ n
59
+ ), K = C(
60
+ t.OLD_PRICE_ALIGN,
61
+ o.OLD_PRICE,
62
+ n
63
+ ), p = O(
64
+ t.OLD_PRICE_COLOR,
65
+ o.OLD_PRICE,
66
+ n
67
+ ), X = N(
68
+ t.OLD_PRICE_SIZE,
69
+ o.OLD_PRICE,
70
+ n
71
+ ), f = l(
72
+ t.OLD_PRICE_STYLE,
73
+ o.OLD_PRICE,
74
+ n
75
+ ), h = I(
76
+ t.OLD_PRICE_FONT_FAMILY,
77
+ o.OLD_PRICE,
78
+ n
79
+ ), j = r(
80
+ t.OLD_PRICE_BACKGROUND,
81
+ o.OLD_PRICE,
82
+ n
83
+ ), q = e(
84
+ t.OLD_PRICE_PADDINGS,
85
+ o.OLD_PRICE,
86
+ n
87
+ ), v = C(
88
+ t.OMNIBUS_PRICE_ALIGN,
89
+ o.OMNIBUS_PRICE,
90
+ n
91
+ ), w = O(
92
+ t.OMNIBUS_PRICE_COLOR,
93
+ o.OMNIBUS_PRICE,
94
+ n
95
+ ), H = N(
96
+ t.OMNIBUS_PRICE_SIZE,
97
+ o.OMNIBUS_PRICE,
98
+ n
99
+ ), J = l(
100
+ t.OMNIBUS_PRICE_STYLE,
101
+ o.OMNIBUS_PRICE,
102
+ n
103
+ ), Q = I(
104
+ t.OMNIBUS_PRICE_FONT_FAMILY,
105
+ o.OMNIBUS_PRICE,
106
+ n
107
+ ), V = r(
108
+ t.OMNIBUS_PRICE_BACKGROUND,
109
+ o.OMNIBUS_PRICE,
110
+ n
111
+ ), W = e(
112
+ t.OMNIBUS_PRICE_PADDINGS,
113
+ o.OMNIBUS_PRICE,
114
+ n
115
+ ), $ = C(
116
+ t.OMNIBUS_DISCOUNT_ALIGN,
117
+ o.OMNIBUS_DISCOUNT,
118
+ n
119
+ ), oo = O(
120
+ t.OMNIBUS_DISCOUNT_COLOR,
121
+ o.OMNIBUS_DISCOUNT,
122
+ n
123
+ ), to = N(
124
+ t.OMNIBUS_DISCOUNT_SIZE,
125
+ o.OMNIBUS_DISCOUNT,
126
+ n
127
+ ), no = l(
128
+ t.OMNIBUS_DISCOUNT_STYLE,
129
+ o.OMNIBUS_DISCOUNT,
130
+ n
131
+ ), Co = I(
132
+ t.OMNIBUS_DISCOUNT_FONT_FAMILY,
133
+ o.OMNIBUS_DISCOUNT,
134
+ n
135
+ ), ro = r(
136
+ t.OMNIBUS_DISCOUNT_BACKGROUND,
137
+ o.OMNIBUS_DISCOUNT,
138
+ n
139
+ ), Oo = e(
140
+ t.OMNIBUS_DISCOUNT_PADDINGS,
141
+ o.OMNIBUS_DISCOUNT,
142
+ n
143
+ ), Io = c(
144
+ t.BUTTON_ALIGN,
145
+ o.BUTTON,
146
+ n
147
+ ), eo = _(
148
+ t.BUTTON_BORDER,
149
+ o.BUTTON,
150
+ n
151
+ ), No = T(
152
+ t.BUTTON_BORDER_RADIUS,
153
+ o.BUTTON,
154
+ n
155
+ ), lo = i(
156
+ t.BUTTON_COLOR,
157
+ o.BUTTON,
158
+ n
159
+ ), co = s(
160
+ t.BUTTON_FONT_FAMILY,
161
+ o.BUTTON,
162
+ n
163
+ ), _o = S(
164
+ t.BUTTON_MARGINS,
165
+ o.BUTTON,
166
+ n
167
+ ), To = E(
168
+ t.BUTTON_PADDINGS,
169
+ o.BUTTON,
170
+ n
171
+ ), io = P(
172
+ t.BUTTON_TEXT,
173
+ o.BUTTON,
174
+ n
175
+ ), Bo = U(
176
+ t.BUTTON_TEXT_SIZE,
177
+ o.BUTTON,
178
+ n
179
+ ), so = R(
180
+ t.BUTTON_TEXT_STYLE_AND_FONT_COLOR,
181
+ o.BUTTON,
182
+ n
183
+ ), So = B(
184
+ t.BUTTON_FIT_TO_CONTENT,
185
+ o.BUTTON,
186
+ n
187
+ ), Eo = M(
188
+ t.IMAGE_SIZE,
189
+ o.IMAGE,
190
+ n
191
+ ), Po = a(
192
+ t.IMAGE_MARGINS,
193
+ o.IMAGE,
194
+ n
195
+ );
196
+ export {
197
+ Io as ButtonAlignControl,
198
+ eo as ButtonBorderControl,
199
+ No as ButtonBorderRadiusControl,
200
+ lo as ButtonColorControl,
201
+ So as ButtonFitToContentControl,
202
+ co as ButtonFontFamilyControl,
203
+ _o as ButtonMarginsControl,
204
+ To as ButtonPaddingsControl,
205
+ io as ButtonTextControl,
206
+ Bo as ButtonTextSizeControl,
207
+ so as ButtonTextStyleAndFontColorControl,
208
+ Po as ImageMarginsControl,
209
+ Eo as ImageSizeControl,
210
+ u as NameAlignControl,
211
+ g as NameBackgroundControl,
212
+ d as NameColorControl,
213
+ F as NameFontFamilyControl,
214
+ G as NamePaddingsControl,
215
+ m as NameSizeControl,
216
+ L as NameStyleControl,
217
+ K as OldPriceAlignControl,
218
+ j as OldPriceBackgroundControl,
219
+ p as OldPriceColorControl,
220
+ h as OldPriceFontFamilyControl,
221
+ q as OldPricePaddingsControl,
222
+ X as OldPriceSizeControl,
223
+ f as OldPriceStyleControl,
224
+ $ as OmnibusDiscountAlignControl,
225
+ ro as OmnibusDiscountBackgroundControl,
226
+ oo as OmnibusDiscountColorControl,
227
+ Co as OmnibusDiscountFontFamilyControl,
228
+ Oo as OmnibusDiscountPaddingsControl,
229
+ to as OmnibusDiscountSizeControl,
230
+ no as OmnibusDiscountStyleControl,
231
+ v as OmnibusPriceAlignControl,
232
+ V as OmnibusPriceBackgroundControl,
233
+ w as OmnibusPriceColorControl,
234
+ Q as OmnibusPriceFontFamilyControl,
235
+ W as OmnibusPricePaddingsControl,
236
+ H as OmnibusPriceSizeControl,
237
+ J as OmnibusPriceStyleControl,
238
+ y as PriceAlignControl,
239
+ k as PriceBackgroundControl,
240
+ b as PriceColorControl,
241
+ z as PriceFontFamilyControl,
242
+ Z as PricePaddingsControl,
243
+ x as PriceSizeControl,
244
+ Y as PriceStyleControl
245
+ };