@useinsider/guido 2.1.0-beta.bc18abc → 2.1.0-beta.bcfc012

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 (213) hide show
  1. package/README.md +36 -0
  2. package/dist/@types/config/schemas.js +70 -65
  3. package/dist/components/Guido.vue.js +1 -1
  4. package/dist/components/Guido.vue2.js +69 -58
  5. package/dist/components/organisms/extensions/recommendation/FilterSelectionDrawer.vue2.js +15 -14
  6. package/dist/components/organisms/header/EditorActions.vue.js +12 -10
  7. package/dist/components/organisms/header/EditorActions.vue2.js +41 -31
  8. package/dist/components/organisms/header/HeaderWrapper.vue.js +9 -9
  9. package/dist/components/organisms/header/MigrationConfirmModal.vue.js +21 -0
  10. package/dist/components/organisms/header/MigrationConfirmModal.vue2.js +38 -0
  11. package/dist/composables/useActionsApi.js +15 -13
  12. package/dist/composables/useBlocksConfig.js +26 -16
  13. package/dist/composables/useHtmlValidator.js +114 -104
  14. package/dist/composables/useRecommendation.js +54 -21
  15. package/dist/composables/useStripo.js +25 -23
  16. package/dist/composables/useVersionHistoryApi.js +1 -1
  17. package/dist/config/compiler/recommendationCompilerRules.js +45 -39
  18. package/dist/config/compiler/utils/recommendationCompilerUtils.js +121 -0
  19. package/dist/config/i18n/en/index.js +11 -0
  20. package/dist/config/i18n/en/labels.json.js +12 -0
  21. package/dist/config/i18n/en/toasters.json.js +56 -0
  22. package/dist/config/i18n/en/tooltips.json.js +82 -0
  23. package/dist/config/i18n/index.js +7 -0
  24. package/dist/config/migrator/itemsBlockMigrator.js +142 -119
  25. package/dist/config/migrator/recommendationMigrator.js +42 -40
  26. package/dist/enums/defaults.js +8 -4
  27. package/dist/enums/extensions/recommendationBlock.js +1 -1
  28. package/dist/enums/recommendation.js +16 -15
  29. package/dist/extensions/Blocks/Items/block.js +46 -35
  30. package/dist/extensions/Blocks/Items/controls/button/link.js +19 -31
  31. package/dist/extensions/Blocks/Items/controls/cardComposition.js +124 -85
  32. package/dist/extensions/Blocks/Items/controls/image/link.js +19 -31
  33. package/dist/extensions/Blocks/Items/controls/name/trimming.js +28 -40
  34. package/dist/extensions/Blocks/Items/controls/price/currencyLocation.js +35 -47
  35. package/dist/extensions/Blocks/Items/controls/price/currencySymbol.js +49 -54
  36. package/dist/extensions/Blocks/Items/controls/price/formattedPrice.js +42 -51
  37. package/dist/extensions/Blocks/Items/controls/price/hideDiscount.js +23 -36
  38. package/dist/extensions/Blocks/Items/controls/price/priceOrientation.js +45 -57
  39. package/dist/extensions/Blocks/Items/controls/price/singlePrice.js +42 -60
  40. package/dist/extensions/Blocks/Items/controls/settingsControl.js +189 -196
  41. package/dist/extensions/Blocks/Items/enums/settingsEnums.js +0 -2
  42. package/dist/extensions/Blocks/Items/extension.js +8 -9
  43. package/dist/extensions/Blocks/Items/iconsRegistry.js +40 -5
  44. package/dist/extensions/Blocks/Items/items.css.js +48 -0
  45. package/dist/extensions/Blocks/Items/settingsPanel.js +10 -15
  46. package/dist/extensions/Blocks/Items/template.js +181 -175
  47. package/dist/extensions/Blocks/Items/utils/nodeConfigUtils.js +65 -65
  48. package/dist/extensions/Blocks/Recommendation/block.js +153 -9
  49. package/dist/extensions/Blocks/Recommendation/constants/blockIds.js +4 -0
  50. package/dist/extensions/Blocks/Recommendation/constants/controlIds.js +4 -0
  51. package/dist/extensions/Blocks/Recommendation/constants/defaultConfig.js +66 -0
  52. package/dist/extensions/Blocks/Recommendation/constants/layout.js +22 -0
  53. package/dist/extensions/Blocks/Recommendation/constants/selectors.js +21 -0
  54. package/dist/extensions/Blocks/Recommendation/controls/button/index.js +64 -0
  55. package/dist/extensions/Blocks/Recommendation/controls/cardBackground/index.js +80 -0
  56. package/dist/extensions/Blocks/Recommendation/controls/cardComposition/index.js +232 -0
  57. package/dist/extensions/Blocks/Recommendation/controls/image/index.js +19 -0
  58. package/dist/extensions/Blocks/Recommendation/controls/layout/index.js +92 -0
  59. package/dist/extensions/Blocks/Recommendation/controls/main/algorithm.js +102 -0
  60. package/dist/extensions/Blocks/Recommendation/controls/main/currency.js +209 -0
  61. package/dist/extensions/Blocks/Recommendation/controls/main/filters.js +52 -0
  62. package/dist/extensions/Blocks/Recommendation/controls/main/index.js +250 -0
  63. package/dist/extensions/Blocks/Recommendation/controls/main/locale.js +70 -0
  64. package/dist/extensions/Blocks/Recommendation/controls/main/productLayout.js +160 -0
  65. package/dist/extensions/Blocks/Recommendation/controls/main/shuffle.js +67 -0
  66. package/dist/extensions/Blocks/Recommendation/controls/main/utils.js +307 -0
  67. package/dist/extensions/Blocks/Recommendation/controls/mobileLayout/cssRules.js +21 -0
  68. package/dist/extensions/Blocks/Recommendation/controls/name/index.js +46 -0
  69. package/dist/extensions/Blocks/Recommendation/controls/name/textTrim.js +108 -0
  70. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/index.js +44 -0
  71. package/dist/extensions/Blocks/Recommendation/controls/omnibusDiscount/index.js +48 -0
  72. package/dist/extensions/Blocks/Recommendation/controls/{omnibusDiscountTextAfterControl.js → omnibusDiscount/textAfter.js} +16 -14
  73. package/dist/extensions/Blocks/Recommendation/controls/{omnibusDiscountTextBeforeControl.js → omnibusDiscount/textBefore.js} +16 -14
  74. package/dist/extensions/Blocks/Recommendation/controls/omnibusPrice/index.js +48 -0
  75. package/dist/extensions/Blocks/Recommendation/controls/{omnibusPriceTextAfterControl.js → omnibusPrice/textAfter.js} +16 -14
  76. package/dist/extensions/Blocks/Recommendation/controls/{omnibusPriceTextBeforeControl.js → omnibusPrice/textBefore.js} +14 -12
  77. package/dist/extensions/Blocks/Recommendation/controls/price/index.js +44 -0
  78. package/dist/extensions/Blocks/Recommendation/controls/spacing/index.js +222 -0
  79. package/dist/extensions/Blocks/Recommendation/extension.js +40 -17
  80. package/dist/extensions/Blocks/Recommendation/iconsRegistry.js +54 -3
  81. package/dist/extensions/Blocks/Recommendation/recommendation.css.js +61 -4
  82. package/dist/extensions/Blocks/Recommendation/services/configService.js +240 -0
  83. package/dist/extensions/Blocks/Recommendation/settingsPanel.js +21 -10
  84. package/dist/extensions/Blocks/Recommendation/store/recommendation.js +254 -207
  85. package/dist/extensions/Blocks/Recommendation/templates/grid/elementRenderer.js +228 -0
  86. package/dist/extensions/Blocks/Recommendation/templates/grid/migration.js +251 -0
  87. package/dist/extensions/Blocks/Recommendation/templates/grid/template.js +66 -0
  88. package/dist/extensions/Blocks/Recommendation/templates/index.js +12 -0
  89. package/dist/extensions/Blocks/Recommendation/templates/list/elementRenderer.js +169 -0
  90. package/dist/extensions/Blocks/Recommendation/templates/list/template.js +73 -0
  91. package/dist/extensions/Blocks/Recommendation/templates/utils.js +134 -0
  92. package/dist/extensions/Blocks/Recommendation/types/nodeConfig.js +6 -0
  93. package/dist/extensions/Blocks/Recommendation/utils/filterUtil.js +9 -9
  94. package/dist/extensions/Blocks/Recommendation/utils/preserveTextStyles.js +26 -15
  95. package/dist/extensions/Blocks/Recommendation/utils/priceFormatter.js +29 -0
  96. package/dist/extensions/Blocks/Recommendation/utils/tagName.js +46 -0
  97. package/dist/extensions/Blocks/common-control.js +101 -94
  98. package/dist/extensions/Blocks/controlFactories.js +125 -93
  99. package/dist/extensions/ModulesTabIcons/extension.js +17 -0
  100. package/dist/guido.css +1 -1
  101. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js +317 -193
  102. package/dist/services/recommendationApi.js +11 -8
  103. package/dist/services/stripoApi.js +20 -17
  104. package/dist/services/templateLibraryApi.js +16 -13
  105. package/dist/src/@types/config/schemas.d.ts +8 -0
  106. package/dist/src/components/Guido.vue.d.ts +1 -1
  107. package/dist/src/components/organisms/header/EditorActions.vue.d.ts +1 -1
  108. package/dist/src/components/organisms/header/HeaderWrapper.vue.d.ts +1 -1
  109. package/dist/src/components/organisms/header/MigrationConfirmModal.vue.d.ts +5 -0
  110. package/dist/src/components/organisms/header/RightSlot.vue.d.ts +1 -1
  111. package/dist/src/components/wrappers/WpDrawer.vue.d.ts +1 -1
  112. package/dist/src/components/wrappers/WpModal.vue.d.ts +2 -2
  113. package/dist/src/composables/useConfig.d.ts +4 -0
  114. package/dist/src/composables/useRecommendation.d.ts +1 -0
  115. package/dist/src/config/compiler/utils/recommendationCompilerUtils.d.ts +17 -0
  116. package/dist/src/config/i18n/en/index.d.ts +1 -0
  117. package/dist/src/config/i18n/index.d.ts +16 -0
  118. package/dist/src/enums/defaults.d.ts +4 -0
  119. package/dist/src/extensions/Blocks/Items/block.d.ts +1 -1
  120. package/dist/src/extensions/Blocks/Items/controls/button/link.d.ts +0 -1
  121. package/dist/src/extensions/Blocks/Items/controls/cardComposition.d.ts +5 -5
  122. package/dist/src/extensions/Blocks/Items/controls/image/link.d.ts +0 -1
  123. package/dist/src/extensions/Blocks/Items/controls/name/trimming.d.ts +0 -1
  124. package/dist/src/extensions/Blocks/Items/controls/price/currencyLocation.d.ts +0 -1
  125. package/dist/src/extensions/Blocks/Items/controls/price/currencySymbol.d.ts +0 -1
  126. package/dist/src/extensions/Blocks/Items/controls/price/formattedPrice.d.ts +0 -1
  127. package/dist/src/extensions/Blocks/Items/controls/price/hideDiscount.d.ts +0 -1
  128. package/dist/src/extensions/Blocks/Items/controls/price/priceOrientation.d.ts +0 -1
  129. package/dist/src/extensions/Blocks/Items/controls/price/singlePrice.d.ts +0 -5
  130. package/dist/src/extensions/Blocks/Items/controls/settingsControl.d.ts +10 -12
  131. package/dist/src/extensions/Blocks/Items/utils/nodeConfigUtils.d.ts +2 -1
  132. package/dist/src/extensions/Blocks/Recommendation/block.d.ts +68 -0
  133. package/dist/src/extensions/Blocks/Recommendation/constants/blockIds.d.ts +13 -0
  134. package/dist/src/extensions/Blocks/Recommendation/{constants.d.ts → constants/controlIds.d.ts} +0 -24
  135. package/dist/src/extensions/Blocks/Recommendation/constants/defaultConfig.d.ts +49 -0
  136. package/dist/src/extensions/Blocks/Recommendation/constants/index.d.ts +13 -0
  137. package/dist/src/extensions/Blocks/Recommendation/constants/layout.d.ts +41 -0
  138. package/dist/src/extensions/Blocks/Recommendation/constants/selectors.d.ts +35 -0
  139. package/dist/src/extensions/Blocks/Recommendation/controls/button/index.d.ts +143 -0
  140. package/dist/src/extensions/Blocks/Recommendation/controls/cardBackground/index.d.ts +31 -0
  141. package/dist/src/extensions/Blocks/Recommendation/{cardCompositionControl.d.ts → controls/cardComposition/index.d.ts} +23 -3
  142. package/dist/src/extensions/Blocks/Recommendation/controls/image/index.d.ts +35 -0
  143. package/dist/src/extensions/Blocks/Recommendation/controls/index.d.ts +21 -589
  144. package/dist/src/extensions/Blocks/Recommendation/controls/layout/index.d.ts +37 -0
  145. package/dist/src/extensions/Blocks/Recommendation/controls/main/algorithm.d.ts +29 -0
  146. package/dist/src/extensions/Blocks/Recommendation/controls/main/currency.d.ts +52 -0
  147. package/dist/src/extensions/Blocks/Recommendation/controls/main/filters.d.ts +22 -0
  148. package/dist/src/extensions/Blocks/Recommendation/controls/main/index.d.ts +79 -0
  149. package/dist/src/extensions/Blocks/Recommendation/controls/main/locale.d.ts +24 -0
  150. package/dist/src/extensions/Blocks/Recommendation/controls/main/productLayout.d.ts +60 -0
  151. package/dist/src/extensions/Blocks/Recommendation/controls/main/shuffle.d.ts +23 -0
  152. package/dist/src/extensions/Blocks/Recommendation/controls/main/utils.d.ts +221 -0
  153. package/dist/src/extensions/Blocks/Recommendation/controls/mobileLayout/cssRules.d.ts +29 -0
  154. package/dist/src/extensions/Blocks/Recommendation/controls/name/index.d.ts +97 -0
  155. package/dist/src/extensions/Blocks/Recommendation/controls/name/textTrim.d.ts +34 -0
  156. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/index.d.ts +95 -0
  157. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscount/index.d.ts +100 -0
  158. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscount/textAfter.d.ts +15 -0
  159. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscount/textBefore.d.ts +15 -0
  160. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPrice/index.d.ts +100 -0
  161. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPrice/textAfter.d.ts +15 -0
  162. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPrice/textBefore.d.ts +15 -0
  163. package/dist/src/extensions/Blocks/Recommendation/controls/price/index.d.ts +95 -0
  164. package/dist/src/extensions/Blocks/Recommendation/controls/spacing/index.d.ts +83 -0
  165. package/dist/src/extensions/Blocks/Recommendation/extension.d.ts +9 -0
  166. package/dist/src/extensions/Blocks/Recommendation/services/configService.d.ts +151 -0
  167. package/dist/src/extensions/Blocks/Recommendation/services/index.d.ts +6 -0
  168. package/dist/src/extensions/Blocks/Recommendation/store/recommendation.d.ts +138 -468
  169. package/dist/src/extensions/Blocks/Recommendation/templates/grid/elementRenderer.d.ts +20 -0
  170. package/dist/src/extensions/Blocks/Recommendation/templates/{migrationTemplate.d.ts → grid/migration.d.ts} +11 -4
  171. package/dist/src/extensions/Blocks/Recommendation/templates/grid/template.d.ts +33 -0
  172. package/dist/src/extensions/Blocks/Recommendation/templates/index.d.ts +41 -0
  173. package/dist/src/extensions/Blocks/Recommendation/templates/list/elementRenderer.d.ts +8 -0
  174. package/dist/src/extensions/Blocks/Recommendation/templates/list/migration.d.ts +25 -0
  175. package/dist/src/extensions/Blocks/Recommendation/templates/list/template.d.ts +18 -0
  176. package/dist/src/extensions/Blocks/Recommendation/templates/utils.d.ts +66 -0
  177. package/dist/src/extensions/Blocks/Recommendation/types/index.d.ts +7 -0
  178. package/dist/src/extensions/Blocks/Recommendation/types/nodeConfig.d.ts +166 -0
  179. package/dist/src/extensions/Blocks/Recommendation/utils/priceFormatter.d.ts +33 -0
  180. package/dist/src/extensions/Blocks/Recommendation/utils/stylePreserver.d.ts +113 -0
  181. package/dist/src/extensions/Blocks/Recommendation/utils/tagName.d.ts +77 -0
  182. package/dist/src/extensions/Blocks/common-control.d.ts +9 -5
  183. package/dist/src/extensions/ModulesTabIcons/extension.d.ts +2 -0
  184. package/dist/src/stores/config.d.ts +36 -0
  185. package/dist/src/stores/template.d.ts +3 -0
  186. package/dist/static/styles/components/notification.css.js +19 -0
  187. package/dist/static/styles/components/tools.css.js +6 -2
  188. package/dist/static/styles/components/version-history.css.js +10 -2
  189. package/dist/static/styles/components/wide-panel.css.js +18 -2
  190. package/dist/static/styles/customEditorStyle.css.js +35 -11
  191. package/dist/static/styles/variables.css.js +2 -0
  192. package/dist/static/templates/empty/index.html.js +74 -0
  193. package/dist/static/templates/empty/style.css.js +779 -0
  194. package/dist/stores/template.js +9 -0
  195. package/dist/utils/pairProductVariables.js +57 -56
  196. package/dist/utils/templatePreparation.js +15 -14
  197. package/package.json +1 -1
  198. package/dist/extensions/Blocks/Items/store/items-block.js +0 -79
  199. package/dist/extensions/Blocks/Recommendation/cardCompositionControl.js +0 -187
  200. package/dist/extensions/Blocks/Recommendation/constants.js +0 -13
  201. package/dist/extensions/Blocks/Recommendation/control.js +0 -336
  202. package/dist/extensions/Blocks/Recommendation/controls/cardBackgroundColorControl.js +0 -68
  203. package/dist/extensions/Blocks/Recommendation/controls/index.js +0 -245
  204. package/dist/extensions/Blocks/Recommendation/controls/nameTextTrimControl.js +0 -74
  205. package/dist/extensions/Blocks/Recommendation/controls/spacingControl.js +0 -188
  206. package/dist/extensions/Blocks/Recommendation/templates/blockTemplate.js +0 -181
  207. package/dist/extensions/Blocks/Recommendation/templates/migrationTemplate.js +0 -189
  208. package/dist/extensions/Blocks/Recommendation/templates/templateUtils.js +0 -209
  209. package/dist/src/extensions/Blocks/Items/store/items-block.d.ts +0 -45
  210. package/dist/src/extensions/Blocks/Recommendation/control.d.ts +0 -38
  211. package/dist/src/extensions/Blocks/Recommendation/controls/nameTextTrimControl.d.ts +0 -16
  212. package/dist/src/extensions/Blocks/Recommendation/templates/blockTemplate.d.ts +0 -16
  213. package/dist/src/extensions/Blocks/Recommendation/templates/templateUtils.d.ts +0 -52
@@ -1,46 +1,46 @@
1
1
  import { ModificationDescription as b } from "../../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
2
- import { DefaultConfigValues as i, SETTINGS_ENUMS as n, ItemInCartOptions as g } from "../enums/settingsEnums.js";
3
- function d() {
2
+ import { DefaultConfigValues as o, SETTINGS_ENUMS as n, ItemInCartOptions as g } from "../enums/settingsEnums.js";
3
+ function _() {
4
4
  return String(Date.now() + Math.floor(Math.random() * 1e3));
5
5
  }
6
- const E = (o) => o.replace(/\$/g, "$$$$");
6
+ const E = (r) => r.replace(/\$/g, "$$$$");
7
7
  function S() {
8
8
  return {
9
9
  initialized: !0,
10
- blockInstanceId: d(),
10
+ blockInstanceId: _(),
11
11
  source: n.ITEMS_TYPE.CART_ITEMS,
12
12
  type: n.ITEMS_TYPE.CART_ITEMS,
13
- itemsSelectValue: i.cartItemsSelectControlValue,
13
+ itemsSelectValue: o.cartItemsSelectControlValue,
14
14
  orientation: n.ORIENTATION.VERTICAL,
15
- nameTrimming: i.productNameTrimmingControlValue === "1",
16
- priceHideDiscount: i.productPriceHideDiscountControlValue === "1",
17
- priceFormatted: i.productPriceFormattedControlValue === "1",
15
+ nameTrimming: o.productNameTrimmingControlValue === "1",
16
+ priceHideDiscount: o.productPriceHideDiscountControlValue === "1",
17
+ priceFormatted: o.productPriceFormattedControlValue === "1",
18
18
  priceSinglePrice: !1,
19
- priceCurrencySymbol: i.productPriceCurrencySymbolControlValue,
20
- priceCurrencyLocation: i.productPriceCurrencyLocationControlValue,
19
+ priceCurrencySymbol: o.productPriceCurrencySymbolControlValue,
20
+ priceCurrencyLocation: o.productPriceCurrencyLocationControlValue,
21
21
  priceOrientation: "horizontal",
22
- quantityControlEnabled: i.productQuantityControlEnabled === "1",
23
- buttonLink: i.productButtonLinkControlValue,
24
- imageLink: i.productImageLinkControlValue,
22
+ quantityControlEnabled: o.productQuantityControlEnabled === "1",
23
+ buttonLink: o.productButtonLinkControlValue,
24
+ imageLink: o.productImageLinkControlValue,
25
25
  buttonLabel: "Buy",
26
26
  buttonFullWidth: !0,
27
27
  // Default to full width (es-fw class)
28
- imageVisible: i.productImageVisible === "1",
29
- nameVisible: i.productNameVisible === "1",
30
- quantityVisible: i.productQuantityVisible === "1",
31
- priceVisible: i.productPriceVisible === "1",
32
- originalPriceVisible: i.productOriginalPriceVisible === "1",
33
- buttonVisible: i.productButtonVisible === "1"
28
+ imageVisible: o.productImageVisible === "1",
29
+ nameVisible: o.productNameVisible === "1",
30
+ quantityVisible: o.productQuantityVisible === "1",
31
+ priceVisible: o.productPriceVisible === "1",
32
+ originalPriceVisible: o.productOriginalPriceVisible === "1",
33
+ buttonVisible: o.productButtonVisible === "1"
34
34
  };
35
35
  }
36
- function s(o) {
37
- if (!o)
36
+ function p(r) {
37
+ if (!r)
38
38
  return null;
39
- const t = o.closest(".items-block-v2");
40
- return t || o.closest(".esd-cart-items-block");
39
+ const t = r.closest(".items-block-v2");
40
+ return t || r.closest(".esd-cart-items-block");
41
41
  }
42
- function m(o) {
43
- return o ? {
42
+ function m(r) {
43
+ return r ? {
44
44
  CartItems: n.ITEMS_TYPE.CART_ITEMS,
45
45
  BrowsedItems: n.ITEMS_TYPE.BROWSED_ITEMS,
46
46
  PurchasedItems: n.ITEMS_TYPE.PURCHASED_ITEMS,
@@ -48,34 +48,34 @@ function m(o) {
48
48
  CART_ITEMS: n.ITEMS_TYPE.CART_ITEMS,
49
49
  BROWSED_ITEMS: n.ITEMS_TYPE.BROWSED_ITEMS,
50
50
  PURCHASED_ITEMS: n.ITEMS_TYPE.PURCHASED_ITEMS
51
- }[o] || n.ITEMS_TYPE.CART_ITEMS : n.ITEMS_TYPE.CART_ITEMS;
51
+ }[r] || n.ITEMS_TYPE.CART_ITEMS : n.ITEMS_TYPE.CART_ITEMS;
52
52
  }
53
- function I(o, t) {
54
- if (!o)
55
- return i.cartItemsSelectControlValue;
56
- if (o.includes("{{"))
57
- return o;
58
- if (/^\d+$/.test(o)) {
59
- const e = parseInt(o) - 1, r = g[t];
60
- if (r && r[e])
61
- return r[e].value;
53
+ function I(r, t) {
54
+ if (!r)
55
+ return o.cartItemsSelectControlValue;
56
+ if (r.includes("{{"))
57
+ return r;
58
+ if (/^\d+$/.test(r)) {
59
+ const e = parseInt(r) - 1, i = g[t];
60
+ if (i && i[e])
61
+ return i[e].value;
62
62
  }
63
- return i.cartItemsSelectControlValue;
63
+ return o.cartItemsSelectControlValue;
64
64
  }
65
- function C(o) {
66
- const t = o.querySelector("esd-config-block");
65
+ function C(r) {
66
+ const t = r.querySelector("esd-config-block");
67
67
  if (!t)
68
68
  return null;
69
- const e = (c, a) => c == null ? a : c === "1" || c === "true", r = (c, a) => c || a, l = t.getAttribute("data-type"), u = m(l), _ = t.getAttribute("data-cart_items_select_control_value"), p = I(_, u);
69
+ const e = (c, s) => c == null ? s : c === "1" || c === "true", i = (c, s) => c || s, u = t.getAttribute("data-type"), a = m(u), d = t.getAttribute("data-cart_items_select_control_value"), l = I(d, a);
70
70
  return {
71
71
  initialized: e(t.getAttribute("data-initialized"), !1),
72
- blockInstanceId: r(
72
+ blockInstanceId: i(
73
73
  t.getAttribute("data-block-instance-id"),
74
- d()
74
+ _()
75
75
  ),
76
- source: u,
77
- type: u,
78
- itemsSelectValue: p,
76
+ source: a,
77
+ type: a,
78
+ itemsSelectValue: l,
79
79
  orientation: t.getAttribute("data-card_orientation_control_value") || n.ORIENTATION.VERTICAL,
80
80
  nameTrimming: e(
81
81
  t.getAttribute("data-product_name_control_trim"),
@@ -93,28 +93,28 @@ function C(o) {
93
93
  t.getAttribute("data-product_price_control_single_price"),
94
94
  !1
95
95
  ),
96
- priceCurrencySymbol: r(
97
- t.getAttribute("data-product_price_currency_symbol"),
98
- i.productPriceCurrencySymbolControlValue
96
+ priceCurrencySymbol: i(
97
+ t.getAttribute("data-product_price_control_currency_symbol"),
98
+ o.productPriceCurrencySymbolControlValue
99
99
  ),
100
- priceCurrencyLocation: r(
100
+ priceCurrencyLocation: i(
101
101
  t.getAttribute("data-product_price_currency_location"),
102
- i.productPriceCurrencyLocationControlValue
102
+ o.productPriceCurrencyLocationControlValue
103
103
  ),
104
104
  priceOrientation: t.getAttribute("data-product_original_price_control_orientation") || "horizontal",
105
105
  quantityControlEnabled: e(
106
106
  t.getAttribute("data-product_quantity_control_enabled"),
107
107
  !0
108
108
  ),
109
- buttonLink: r(
109
+ buttonLink: i(
110
110
  t.getAttribute("data-product_button_link"),
111
- i.productButtonLinkControlValue
111
+ o.productButtonLinkControlValue
112
112
  ),
113
- imageLink: r(
113
+ imageLink: i(
114
114
  t.getAttribute("data-product_image_link"),
115
- i.productImageLinkControlValue
115
+ o.productImageLinkControlValue
116
116
  ),
117
- buttonLabel: r(
117
+ buttonLabel: i(
118
118
  t.getAttribute("data-product_button_control_label"),
119
119
  "Buy"
120
120
  ),
@@ -149,28 +149,28 @@ function C(o) {
149
149
  )
150
150
  };
151
151
  }
152
- function y(o) {
153
- const t = s(o);
152
+ function y(r) {
153
+ const t = p(r);
154
154
  if (!t)
155
155
  return null;
156
156
  const e = t.getNodeConfig();
157
157
  if (e && e.initialized)
158
158
  return e;
159
- const r = C(t);
160
- return r || null;
159
+ const i = C(t);
160
+ return i || null;
161
161
  }
162
- function A(o, t, e) {
163
- const r = s(o);
164
- if (!r)
162
+ function A(r, t, e, i) {
163
+ const u = p(r);
164
+ if (!u)
165
165
  return;
166
- const u = { ...r.getNodeConfig() || {}, ...e };
167
- t.getDocumentModifier().modifyHtml(r).setNodeConfig(u).apply(new b("Update Items block configuration"));
166
+ const d = { ...u.getNodeConfig() || {}, ...e }, l = i ?? t.getDocumentModifier();
167
+ l.modifyHtml(u).setNodeConfig(d), i || l.apply(new b("Update Items block configuration"));
168
168
  }
169
169
  export {
170
170
  E as escapeReplacement,
171
- d as generateBlockInstanceId,
171
+ _ as generateBlockInstanceId,
172
172
  S as getDefaultItemsBlockConfig,
173
173
  y as getItemsBlockConfig,
174
- s as getItemsBlockContainer,
174
+ p as getItemsBlockContainer,
175
175
  A as setItemsBlockConfig
176
176
  };
@@ -1,18 +1,30 @@
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 h = Object.defineProperty;
2
+ var I = (r, o, t) => o in r ? h(r, o, { enumerable: !0, configurable: !0, writable: !0, value: t }) : r[o] = t;
3
+ var g = (r, o, t) => I(r, typeof o != "symbol" ? o + "" : o, t);
4
+ import { useTemplateStore as k } from "../../../stores/template.js";
5
+ import { Block as _, BlockCompositionType as B, UIElementType as d, UEAttr as C, ModificationDescription as A } from "../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
6
+ import { ensureMobileCssRulesExist as u } from "./controls/mobileLayout/cssRules.js";
7
+ import { RecommendationConfigService as s } from "./services/configService.js";
8
+ import { useRecommendationExtensionStore as p } from "./store/recommendation.js";
9
+ import { getDefaultTemplate as R } from "./templates/grid/template.js";
10
+ const f = "recommendation-block", c = "ins-recommendation-v3-block-v2", a = "recommendation-id";
11
+ class E extends _ {
5
12
  constructor() {
6
13
  super();
14
+ /**
15
+ * Stores the ID generated in getTemplate() so onCreated() can reuse it.
16
+ * This avoids generating a new (different) ID in onCreated().
17
+ */
18
+ g(this, "_pendingBlockId", null);
7
19
  }
8
20
  getId() {
9
- return n;
21
+ return f;
10
22
  }
11
23
  getIcon() {
12
24
  return "recommendation-icon";
13
25
  }
14
26
  getBlockCompositionType() {
15
- return t.CONTAINER;
27
+ return B.CONTAINER;
16
28
  }
17
29
  getName() {
18
30
  return this.api.translate("Recommendation Block");
@@ -20,11 +32,143 @@ class m extends e {
20
32
  getDescription() {
21
33
  return this.api.translate("Recommendation Block Title Description");
22
34
  }
35
+ getSettingsPanelTitleHtml() {
36
+ if (k().migrations[f] === 0)
37
+ return "";
38
+ const e = this.api.translate("Recommendation Block"), i = this.api.translate("This block is switched from the Old Version to the New Version. We recommend you check the Recommendation block and test your message to ensure it works properly.");
39
+ return `<div>
40
+ <div style="display: flex; align-items: center;">
41
+ <span>${e}</span>
42
+ </div>
43
+ <div class="recommendation-migration-info">
44
+ <${d.ICON}
45
+ ${C.ICON.src}="migration-info-icon"
46
+ class="recommendation-migration-info__icon">
47
+ </${d.ICON}>
48
+ <p class="recommendation-migration-info__text">
49
+ ${i}
50
+ </p>
51
+ </div>
52
+ </div>`;
53
+ }
54
+ /**
55
+ * Returns the template HTML for a new recommendation block.
56
+ * Generates a unique recommendation ID and embeds the instance class
57
+ * (ins-recommendation-v3-block-{id}) directly in the template HTML.
58
+ * This is necessary because Stripo's Angular rendering manages the class
59
+ * attribute and overwrites dynamically added classes via setAttribute.
60
+ */
23
61
  getTemplate() {
24
- return o();
62
+ const t = this._generateNextId();
63
+ return this._pendingBlockId = t, R(t);
64
+ }
65
+ /**
66
+ * Called when a new block is dropped into the template
67
+ *
68
+ * Uses the ID from getTemplate() (which already embedded the instance class)
69
+ * and assigns the recommendation-id attribute + initializes configuration.
70
+ * @param node - The newly created block node
71
+ */
72
+ onCreated(t) {
73
+ const e = this._pendingBlockId ?? this._generateNextId();
74
+ this._pendingBlockId = null, this._assignRecommendationId(t, e);
75
+ const i = s.initializeConfig(this.api, t, { recommendationId: e }), n = p();
76
+ n.setCurrentBlock(e), u(this.api), n.patchCurrentBlockConfig({ language: i.language }, { triggerRefetch: !1 });
77
+ }
78
+ /**
79
+ * Called when the document changes or template is loaded
80
+ *
81
+ * Handles migration from legacy templates that don't have node config
82
+ * and assigns recommendation-id to legacy blocks that lack one.
83
+ * @param node - The block node that may need migration
84
+ */
85
+ onDocumentChanged(t) {
86
+ if (!(!t || !("getNodeConfig" in t))) {
87
+ if (!this._getRecommendationId(t)) {
88
+ const e = this._generateNextId();
89
+ this._assignRecommendationId(t, e), s.hasConfig(t) && s.updateConfig(
90
+ this.api,
91
+ t,
92
+ { recommendationId: e },
93
+ "Assign recommendation ID to legacy block"
94
+ );
95
+ }
96
+ s.needsMigration(t) && this._migrateFromLegacy(t), u(this.api);
97
+ }
98
+ }
99
+ /**
100
+ * Called when a block is deleted from the template
101
+ *
102
+ * Cleans up the per-block state from the Pinia store.
103
+ * @param node - The block node being deleted
104
+ */
105
+ onDelete(t) {
106
+ const e = this._getRecommendationId(t);
107
+ e && p().removeBlockState(e);
108
+ }
109
+ /**
110
+ * Generates the next unique recommendation ID by scanning all existing blocks
111
+ * in the document and finding the maximum existing ID + 1.
112
+ */
113
+ _generateNextId() {
114
+ let t = 0;
115
+ try {
116
+ const e = this.api.getDocumentRoot();
117
+ e && "querySelectorAll" in e && e.querySelectorAll(`.${c}`).forEach((n) => {
118
+ if ("getAttribute" in n) {
119
+ const m = n.getAttribute(a), l = m ? parseInt(m) : 0;
120
+ l > t && (t = l);
121
+ }
122
+ });
123
+ } catch {
124
+ }
125
+ return t + 1;
126
+ }
127
+ /**
128
+ * Assigns a recommendation-id attribute to the block element.
129
+ * The instance class (ins-recommendation-v3-block-{id}) is embedded in the template
130
+ * HTML by getTemplate(), since Stripo's Angular rendering overwrites dynamically
131
+ * added classes via setAttribute.
132
+ */
133
+ _assignRecommendationId(t, e) {
134
+ const i = this._getBlockElement(t);
135
+ if (!i)
136
+ return;
137
+ const n = this.api.getDocumentModifier();
138
+ n.modifyHtml(i).setAttribute(a, e.toString()), n.apply(new A(`Assign recommendation ID ${e}`));
139
+ }
140
+ /**
141
+ * Gets the recommendation-id from a block node
142
+ */
143
+ _getRecommendationId(t) {
144
+ const e = this._getBlockElement(t);
145
+ if (!e || !("getAttribute" in e))
146
+ return null;
147
+ const i = e.getAttribute(a);
148
+ if (!i)
149
+ return null;
150
+ const n = parseInt(i);
151
+ return Number.isNaN(n) ? null : n;
152
+ }
153
+ /**
154
+ * Gets the block element (the element with BLOCK_CLASS)
155
+ */
156
+ _getBlockElement(t) {
157
+ if ("getAttribute" in t) {
158
+ const e = t.getAttribute("class");
159
+ if (e && e.includes(c))
160
+ return t;
161
+ }
162
+ return "querySelector" in t ? t.querySelector(`.${c}`) : null;
163
+ }
164
+ /**
165
+ * Migrate configuration from legacy format
166
+ */
167
+ _migrateFromLegacy(t) {
168
+ s.migrateFromDataAttributes(this.api, t);
25
169
  }
26
170
  }
27
171
  export {
28
- n as BLOCK_ID,
29
- m as RecommendationBlock
172
+ f as BLOCK_ID,
173
+ E as RecommendationBlock
30
174
  };
@@ -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
+ };
@@ -0,0 +1,66 @@
1
+ import { DEFAULT_ROW_SPACING as U, DEFAULT_COLUMN_SPACING as I, DEFAULT_MOBILE_CARDS_IN_ROW as n, DEFAULT_CARDS_IN_ROW as s } from "./layout.js";
2
+ import { ATTR_PRODUCT_IMAGE as t, ATTR_PRODUCT_NAME as e, ATTR_PRODUCT_OLD_PRICE as o, ATTR_PRODUCT_PRICE as _, ATTR_PRODUCT_OMNIBUS_PRICE as T, ATTR_PRODUCT_OMNIBUS_DISCOUNT as r, ATTR_PRODUCT_BUTTON as R } from "./selectors.js";
3
+ const O = {
4
+ code: "USD",
5
+ symbol: "USD",
6
+ alignment: "after",
7
+ decimalCount: 2,
8
+ decimalSeparator: ".",
9
+ thousandSeparator: ","
10
+ }, i = {
11
+ textBefore: "",
12
+ textAfter: ""
13
+ }, C = {
14
+ textBefore: "",
15
+ textAfter: ""
16
+ }, D = [
17
+ t,
18
+ e,
19
+ o,
20
+ _,
21
+ T,
22
+ r,
23
+ R
24
+ ], A = {
25
+ [t]: !0,
26
+ [e]: !0,
27
+ [_]: !0,
28
+ [o]: !0,
29
+ [T]: !1,
30
+ [r]: !1,
31
+ [R]: !0
32
+ }, E = {
33
+ // Settings
34
+ strategy: "mostPopular",
35
+ productIds: [],
36
+ size: "6",
37
+ shuffleProducts: !1,
38
+ language: "en_US",
39
+ currency: O,
40
+ filters: [],
41
+ // Layout
42
+ layout: "grid",
43
+ cardsInRow: s,
44
+ mobileCardsInRow: n,
45
+ columnSpacing: I,
46
+ rowSpacing: U,
47
+ // Composition
48
+ composition: D,
49
+ visibility: A,
50
+ // Element settings
51
+ omnibusPrice: i,
52
+ omnibusDiscount: C,
53
+ textTrimming: !1,
54
+ // Meta
55
+ configVersion: 1,
56
+ recommendationId: 0
57
+ }, N = 1;
58
+ export {
59
+ N as CURRENT_CONFIG_VERSION,
60
+ D as DEFAULT_COMPOSITION,
61
+ O as DEFAULT_CURRENCY,
62
+ E as DEFAULT_NODE_CONFIG,
63
+ C as DEFAULT_OMNIBUS_DISCOUNT,
64
+ i as DEFAULT_OMNIBUS_PRICE,
65
+ A as DEFAULT_VISIBILITY
66
+ };
@@ -0,0 +1,22 @@
1
+ const _ = {
2
+ GRID: "grid",
3
+ LIST: "list"
4
+ }, o = [
5
+ { icon: "grid-orientation", value: _.GRID },
6
+ { icon: "list-orientation", value: _.LIST }
7
+ ], t = 3, n = 3, A = 9, O = 4, R = 1, T = 2, c = 10, s = 20, I = 0, S = 50, P = 5;
8
+ export {
9
+ n as DEFAULT_CARDS_IN_ROW,
10
+ c as DEFAULT_COLUMN_SPACING,
11
+ R as DEFAULT_MOBILE_CARDS_IN_ROW,
12
+ t as DEFAULT_PRODUCTS_PER_ROW,
13
+ s as DEFAULT_ROW_SPACING,
14
+ o as LAYOUT_OPTIONS,
15
+ _ as LAYOUT_VALUES,
16
+ T as MAX_MOBILE_PRODUCTS_PER_ROW,
17
+ O as MAX_PRODUCTS_PER_ROW,
18
+ A as MAX_PRODUCT_COUNT,
19
+ S as MAX_SPACING,
20
+ I as MIN_SPACING,
21
+ P as SPACING_STEP
22
+ };
@@ -0,0 +1,21 @@
1
+ const c = ".ins-recommendation-product-container", n = ".ins-recommendation-desktop-container", o = ".ins-recommendation-mobile-container", T = {
2
+ CURRENCY: "currency",
3
+ SYMBOL: "currency-symbol",
4
+ ALIGNMENT: "currency-alignment",
5
+ THOUSAND_SEPARATOR: "currency-thousand-separator",
6
+ DECIMAL_SEPARATOR: "currency-decimal-separator",
7
+ DECIMAL_COUNT: "currency-decimal-count"
8
+ }, t = "productImage", r = "productName", R = "productPrice", e = "productOldPrice", O = "productOmnibusPrice", _ = "productOmnibusDiscount", C = "productButton";
9
+ export {
10
+ C as ATTR_PRODUCT_BUTTON,
11
+ t as ATTR_PRODUCT_IMAGE,
12
+ r as ATTR_PRODUCT_NAME,
13
+ e as ATTR_PRODUCT_OLD_PRICE,
14
+ _ as ATTR_PRODUCT_OMNIBUS_DISCOUNT,
15
+ O as ATTR_PRODUCT_OMNIBUS_PRICE,
16
+ R as ATTR_PRODUCT_PRICE,
17
+ c as CONTAINER_SELECTOR,
18
+ T as CURRENCY_ATTR,
19
+ n as DESKTOP_CONTAINER_SELECTOR,
20
+ o as MOBILE_CONTAINER_SELECTOR
21
+ };
@@ -0,0 +1,64 @@
1
+ import { createButtonFitToContainerControl as T, createButtonTextStyleAndFontColorControl as r, createButtonTextSizeControl as e, createButtonTextControl as B, createButtonPaddingsControl as l, createButtonMarginsControl as C, createButtonFontFamilyControl as O, createButtonColorControl as N, createButtonBorderRadiusControl as i, createButtonBorderControl as a, createButtonAlignControl as c } from "../../../controlFactories.js";
2
+ import { RecommendationBlockId as o } from "../../constants/blockIds.js";
3
+ import { RecommendationControlId as t } from "../../constants/controlIds.js";
4
+ import { CONTAINER_SELECTOR as n } from "../../constants/selectors.js";
5
+ const U = c(
6
+ t.BUTTON_ALIGN,
7
+ o.BUTTON,
8
+ n
9
+ ), d = a(
10
+ t.BUTTON_BORDER,
11
+ o.BUTTON,
12
+ n
13
+ ), s = i(
14
+ t.BUTTON_BORDER_RADIUS,
15
+ o.BUTTON,
16
+ n
17
+ ), _ = N(
18
+ t.BUTTON_COLOR,
19
+ o.BUTTON,
20
+ n
21
+ ), m = O(
22
+ t.BUTTON_FONT_FAMILY,
23
+ o.BUTTON,
24
+ n
25
+ ), u = C(
26
+ t.BUTTON_MARGINS,
27
+ o.BUTTON,
28
+ n
29
+ ), R = l(
30
+ t.BUTTON_PADDINGS,
31
+ o.BUTTON,
32
+ n
33
+ ), F = B(
34
+ t.BUTTON_TEXT,
35
+ o.BUTTON,
36
+ n
37
+ ), A = e(
38
+ t.BUTTON_TEXT_SIZE,
39
+ o.BUTTON,
40
+ n
41
+ ), S = r(
42
+ t.BUTTON_TEXT_STYLE_AND_FONT_COLOR,
43
+ o.BUTTON,
44
+ n
45
+ ), E = T(
46
+ t.BUTTON_FIT_TO_CONTENT,
47
+ o.BUTTON,
48
+ n
49
+ ), p = {
50
+ align: U,
51
+ border: d,
52
+ borderRadius: s,
53
+ color: _,
54
+ fontFamily: m,
55
+ margins: u,
56
+ paddings: R,
57
+ text: F,
58
+ textSize: A,
59
+ textStyleAndFontColor: S,
60
+ fitToContent: E
61
+ };
62
+ export {
63
+ p as ButtonControls
64
+ };
@@ -0,0 +1,80 @@
1
+ import { ModificationDescription as d } from "../../../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
2
+ import { CommonControl as s } from "../../../common-control.js";
3
+ import { getCurrentLayout as l } from "../main/utils.js";
4
+ const u = "recommendation-card-background-color-control", e = {
5
+ CARD_BACKGROUND_COLOR: "cardBackgroundColor"
6
+ }, a = {
7
+ GRID: ".product-card-segment",
8
+ LIST: ".product-card-wrapper"
9
+ };
10
+ class _ extends s {
11
+ getId() {
12
+ return u;
13
+ }
14
+ getTemplate() {
15
+ return `
16
+ <div class="card-bg-control-container">
17
+ ${this._GuTwoColumns([
18
+ this._GuLabel({ text: "Card Background Color" }),
19
+ this._GuColorPicker(e.CARD_BACKGROUND_COLOR)
20
+ ])}
21
+ </div>
22
+ `;
23
+ }
24
+ onRender() {
25
+ this._setFormValues(), this._listenToFormUpdates();
26
+ }
27
+ onTemplateNodeUpdated(r) {
28
+ super.onTemplateNodeUpdated(r), this._setFormValues();
29
+ }
30
+ _setFormValues() {
31
+ const r = this._getCurrentCardBackgroundColor();
32
+ this.api.updateValues({
33
+ [e.CARD_BACKGROUND_COLOR]: r
34
+ });
35
+ }
36
+ /**
37
+ * Gets the appropriate selector based on layout
38
+ * Grid: .product-card-segment (inner table per product cell)
39
+ * List: .product-card-wrapper (table per product row)
40
+ */
41
+ _getCardSelector() {
42
+ return l(this.currentNode) === "grid" ? a.GRID : a.LIST;
43
+ }
44
+ /**
45
+ * Reads the current background color from the first product card element
46
+ * @returns The background color value or 'transparent' if not found
47
+ */
48
+ _getCurrentCardBackgroundColor() {
49
+ if (!this.currentNode || !("querySelectorAll" in this.currentNode))
50
+ return "transparent";
51
+ const r = this._getCardSelector(), t = this.currentNode.querySelector(r);
52
+ return !t || !("getStyle" in t) ? "transparent" : t.getStyle("background-color") || "transparent";
53
+ }
54
+ /**
55
+ * Handles card background color changes
56
+ * Applies the color to all product card elements based on layout
57
+ */
58
+ _onCardBackgroundColorChange(r) {
59
+ if (!this.currentNode || !("querySelectorAll" in this.currentNode))
60
+ return;
61
+ const t = this._getCardSelector(), o = Array.from(
62
+ this.currentNode.querySelectorAll(t)
63
+ );
64
+ if (o.length === 0)
65
+ return;
66
+ const n = this.api.getDocumentModifier();
67
+ o.forEach((c) => {
68
+ n.modifyHtml(c).setStyle("background-color", r);
69
+ }), n.apply(new d("Update card background color"));
70
+ }
71
+ _listenToFormUpdates() {
72
+ this.api.onValueChanged(e.CARD_BACKGROUND_COLOR, (r) => {
73
+ this._onCardBackgroundColorChange(r);
74
+ });
75
+ }
76
+ }
77
+ export {
78
+ u as CARD_BACKGROUND_COLOR_CONTROL_ID,
79
+ _ as CardBackgroundColorControl
80
+ };