@useinsider/guido 1.0.3-beta.df46976 → 1.0.3-beta.dfb1fcf

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 (257) hide show
  1. package/README.md +140 -3
  2. package/dist/components/Guido.vue.js +1 -1
  3. package/dist/components/Guido.vue2.js +79 -73
  4. package/dist/components/organisms/header/LeftSlot.vue.js +1 -1
  5. package/dist/components/organisms/header/LeftSlot.vue2.js +16 -15
  6. package/dist/components/organisms/header/RightSlot.vue.js +11 -11
  7. package/dist/components/organisms/header/RightSlot.vue2.js +23 -22
  8. package/dist/components/organisms/onboarding/NewVersionPopup.vue2.js +21 -20
  9. package/dist/composables/useBlocksConfig.js +49 -0
  10. package/dist/composables/useGuidoActions.js +19 -9
  11. package/dist/composables/useStripo.js +53 -57
  12. package/dist/config/compiler/unsubscribeCompilerRules.js +33 -28
  13. package/dist/config/migrator/index.js +7 -6
  14. package/dist/config/migrator/recommendationMigrator.js +293 -0
  15. package/dist/enums/date.js +4 -14
  16. package/dist/enums/defaults.js +16 -9
  17. package/dist/enums/onboarding.js +2 -1
  18. package/dist/enums/unsubscribe.js +27 -25
  19. package/dist/extensions/Blocks/Checkbox/extension.js +2 -2
  20. package/dist/extensions/Blocks/CouponBlock/extension.js +2 -2
  21. package/dist/extensions/Blocks/Recommendation/block.js +6 -3
  22. package/dist/extensions/Blocks/Recommendation/cardCompositionControl.js +193 -0
  23. package/dist/extensions/Blocks/Recommendation/constants.js +14 -0
  24. package/dist/extensions/Blocks/Recommendation/control.js +109 -65
  25. package/dist/extensions/Blocks/Recommendation/controls/cardBackgroundColorControl.js +68 -0
  26. package/dist/extensions/Blocks/Recommendation/controls/index.js +272 -0
  27. package/dist/extensions/Blocks/Recommendation/controls/nameTextTrimControl.js +74 -0
  28. package/dist/extensions/Blocks/Recommendation/controls/omnibusDiscountTextAfterControl.js +71 -0
  29. package/dist/extensions/Blocks/Recommendation/controls/omnibusDiscountTextBeforeControl.js +71 -0
  30. package/dist/extensions/Blocks/Recommendation/controls/omnibusPriceTextAfterControl.js +71 -0
  31. package/dist/extensions/Blocks/Recommendation/controls/omnibusPriceTextBeforeControl.js +71 -0
  32. package/dist/extensions/Blocks/Recommendation/controls/priceHideControl.js +60 -0
  33. package/dist/extensions/Blocks/Recommendation/controls/priceInlineLayoutControl.js +160 -0
  34. package/dist/extensions/Blocks/Recommendation/controls/spacingControl.js +188 -0
  35. package/dist/extensions/Blocks/Recommendation/extension.js +18 -7
  36. package/dist/extensions/Blocks/Recommendation/settingsPanel.js +159 -21
  37. package/dist/extensions/Blocks/Recommendation/store/recommendation.js +1 -1
  38. package/dist/extensions/Blocks/Recommendation/templates/blockTemplate.js +184 -0
  39. package/dist/extensions/Blocks/Recommendation/templates/migrationTemplate.js +189 -0
  40. package/dist/extensions/Blocks/Recommendation/templates/templateUtils.js +209 -0
  41. package/dist/extensions/Blocks/Recommendation/utils/preserveTextStyles.js +25 -0
  42. package/dist/extensions/Blocks/common-control.js +125 -43
  43. package/dist/extensions/Blocks/controlFactories.js +234 -0
  44. package/dist/extensions/DynamicContent/dynamic-content-modal.js +25 -19
  45. package/dist/extensions/DynamicContent/dynamic-content.js +128 -33
  46. package/dist/guido.css +1 -1
  47. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js +312 -100
  48. package/dist/package.json.js +7 -0
  49. package/dist/services/stripoApi.js +1 -1
  50. package/dist/{@types → src/@types}/generic.d.ts +41 -6
  51. package/dist/{components → src/components}/Guido.vue.d.ts +3 -2
  52. package/dist/src/composables/useBlocksConfig.d.ts +11 -0
  53. package/dist/{composables → src/composables}/useGuidoActions.d.ts +9 -0
  54. package/dist/src/config/migrator/recommendationMigrator.d.ts +1 -0
  55. package/dist/src/enums/date.d.ts +4 -0
  56. package/dist/src/enums/onboarding.d.ts +2 -0
  57. package/dist/{extensions → src/extensions}/Blocks/Recommendation/block.d.ts +1 -0
  58. package/dist/src/extensions/Blocks/Recommendation/cardCompositionControl.d.ts +79 -0
  59. package/dist/src/extensions/Blocks/Recommendation/constants.d.ts +91 -0
  60. package/dist/{extensions → src/extensions}/Blocks/Recommendation/control.d.ts +11 -2
  61. package/dist/src/extensions/Blocks/Recommendation/controls/cardBackgroundColorControl.d.ts +25 -0
  62. package/dist/src/extensions/Blocks/Recommendation/controls/index.d.ts +71 -0
  63. package/dist/src/extensions/Blocks/Recommendation/controls/nameTextTrimControl.d.ts +16 -0
  64. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscountTextAfterControl.d.ts +15 -0
  65. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscountTextBeforeControl.d.ts +15 -0
  66. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPriceTextAfterControl.d.ts +15 -0
  67. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPriceTextBeforeControl.d.ts +15 -0
  68. package/dist/src/extensions/Blocks/Recommendation/controls/priceHideControl.d.ts +16 -0
  69. package/dist/src/extensions/Blocks/Recommendation/controls/priceInlineLayoutControl.d.ts +50 -0
  70. package/dist/src/extensions/Blocks/Recommendation/controls/spacingControl.d.ts +60 -0
  71. package/dist/{extensions → src/extensions}/Blocks/Recommendation/store/recommendation.d.ts +1 -1
  72. package/dist/src/extensions/Blocks/Recommendation/templates/blockTemplate.d.ts +16 -0
  73. package/dist/src/extensions/Blocks/Recommendation/templates/migrationTemplate.d.ts +16 -0
  74. package/dist/src/extensions/Blocks/Recommendation/templates/templateUtils.d.ts +52 -0
  75. package/dist/src/extensions/Blocks/Recommendation/utils/preserveTextStyles.d.ts +19 -0
  76. package/dist/{extensions → src/extensions}/Blocks/common-control.d.ts +21 -0
  77. package/dist/src/extensions/Blocks/controlFactories.d.ts +95 -0
  78. package/dist/src/extensions/DynamicContent/dynamic-content-modal.d.ts +13 -0
  79. package/dist/src/extensions/DynamicContent/dynamic-content.d.ts +66 -0
  80. package/dist/{stores → src/stores}/config.d.ts +9 -2
  81. package/dist/{stores → src/stores}/dynamic-content.d.ts +3 -3
  82. package/dist/{stores → src/stores}/editor.d.ts +1 -1
  83. package/dist/{stores → src/stores}/onboarding.d.ts +1 -1
  84. package/dist/{stores → src/stores}/preview.d.ts +1 -1
  85. package/dist/{stores → src/stores}/recommendation.d.ts +1 -1
  86. package/dist/{stores → src/stores}/save-as-template.d.ts +1 -1
  87. package/dist/{stores → src/stores}/toaster.d.ts +1 -1
  88. package/dist/{stores → src/stores}/unsubscribe.d.ts +1 -1
  89. package/dist/{stores → src/stores}/version-history.d.ts +1 -1
  90. package/dist/src/utils/dateUtil.d.ts +22 -0
  91. package/dist/src/utils/environmentUtil.d.ts +5 -0
  92. package/dist/{utils → src/utils}/genericUtil.d.ts +1 -0
  93. package/dist/static/styles/components/narrow-panel.css.js +10 -0
  94. package/dist/static/styles/components/wide-panel.css.js +0 -4
  95. package/dist/static/styles/customEditorStyle.css.js +19 -0
  96. package/dist/stores/config.js +5 -5
  97. package/dist/stores/dynamic-content.js +2 -2
  98. package/dist/stores/editor.js +1 -1
  99. package/dist/stores/onboarding.js +27 -27
  100. package/dist/stores/preview.js +1 -1
  101. package/dist/stores/recommendation.js +3 -3
  102. package/dist/stores/save-as-template.js +2 -2
  103. package/dist/stores/toaster.js +1 -1
  104. package/dist/stores/unsubscribe.js +1 -1
  105. package/dist/stores/version-history.js +4 -4
  106. package/dist/utils/dateUtil.js +33 -7
  107. package/dist/utils/environmentUtil.js +4 -0
  108. package/dist/utils/genericUtil.js +20 -9
  109. package/package.json +7 -2
  110. package/dist/enums/date.d.ts +0 -13
  111. package/dist/enums/onboarding.d.ts +0 -1
  112. package/dist/extensions/Blocks/Recommendation/template.d.ts +0 -6
  113. package/dist/extensions/Blocks/Recommendation/template.js +0 -200
  114. package/dist/extensions/DynamicContent/dynamic-content-modal.d.ts +0 -6
  115. package/dist/extensions/DynamicContent/dynamic-content.d.ts +0 -16
  116. package/dist/utils/dateUtil.d.ts +0 -2
  117. package/dist/{@types → src/@types}/events.d.ts +0 -0
  118. package/dist/{@types → src/@types}/save-as-template.d.ts +0 -0
  119. package/dist/{App.vue.d.ts → src/App.vue.d.ts} +0 -0
  120. package/dist/{components → src/components}/organisms/LoadingWrapper.vue.d.ts +0 -0
  121. package/dist/{components → src/components}/organisms/base/Toaster.vue.d.ts +0 -0
  122. package/dist/{components → src/components}/organisms/email-preview/PreviewContainer.vue.d.ts +0 -0
  123. package/dist/{components → src/components}/organisms/email-preview/amp/AmpErrorModal.vue.d.ts +0 -0
  124. package/dist/{components → src/components}/organisms/email-preview/amp/AmpToggle.vue.d.ts +0 -0
  125. package/dist/{components → src/components}/organisms/email-preview/desktop-preview/DesktopPreview.vue.d.ts +0 -0
  126. package/dist/{components → src/components}/organisms/email-preview/desktop-preview/EmailHeaderInfo.vue.d.ts +0 -0
  127. package/dist/{components → src/components}/organisms/email-preview/desktop-preview/EmailSizeIndicator.vue.d.ts +0 -0
  128. package/dist/{components → src/components}/organisms/email-preview/mobile-preview/ContentView.vue.d.ts +0 -0
  129. package/dist/{components → src/components}/organisms/email-preview/mobile-preview/InboxView.vue.d.ts +0 -0
  130. package/dist/{components → src/components}/organisms/email-preview/mobile-preview/MobilePreview.vue.d.ts +0 -0
  131. package/dist/{components → src/components}/organisms/extensions/recommendation/FilterItem.vue.d.ts +0 -0
  132. package/dist/{components → src/components}/organisms/extensions/recommendation/FilterSelectionDrawer.vue.d.ts +0 -0
  133. package/dist/{components → src/components}/organisms/extensions/recommendation/Filters.vue.d.ts +0 -0
  134. package/dist/{components → src/components}/organisms/extensions/recommendation/LogicAdapter.vue.d.ts +0 -0
  135. package/dist/{components → src/components}/organisms/header/HeaderWrapper.vue.d.ts +0 -0
  136. package/dist/{components → src/components}/organisms/header/LeftSlot.vue.d.ts +0 -0
  137. package/dist/{components → src/components}/organisms/header/MiddleSlot.vue.d.ts +0 -0
  138. package/dist/{components → src/components}/organisms/header/RightSlot.vue.d.ts +0 -0
  139. package/dist/{components → src/components}/organisms/header/ViewOptions.vue.d.ts +0 -0
  140. package/dist/{components → src/components}/organisms/header/version-history/RestoreButton.vue.d.ts +0 -0
  141. package/dist/{components → src/components}/organisms/header/version-history/VersionHistory.vue.d.ts +0 -0
  142. package/dist/{components → src/components}/organisms/header/version-history/VersionHistoryItem.vue.d.ts +0 -0
  143. package/dist/{components → src/components}/organisms/header/version-history/ViewOptions.vue.d.ts +0 -0
  144. package/dist/{components → src/components}/organisms/onboarding/AMPOnboarding.vue.d.ts +0 -0
  145. package/dist/{components → src/components}/organisms/onboarding/GenericOnboarding.vue.d.ts +0 -0
  146. package/dist/{components → src/components}/organisms/onboarding/NewVersionPopup.vue.d.ts +0 -0
  147. package/dist/{components → src/components}/organisms/onboarding/OnboardingWrapper.vue.d.ts +0 -0
  148. package/dist/{components → src/components}/organisms/onboarding/TextBlockOnboarding.vue.d.ts +0 -0
  149. package/dist/{components → src/components}/organisms/onboarding/VersionHistoryOnboarding.vue.d.ts +0 -0
  150. package/dist/{components → src/components}/organisms/save-as-template/SaveAsTemplateDrawer.vue.d.ts +0 -0
  151. package/dist/{components → src/components}/organisms/unsubscribe/UnsubscribeBreadcrumb.vue.d.ts +0 -0
  152. package/dist/{components → src/components}/organisms/unsubscribe/UnsubscribePageSelection.vue.d.ts +0 -0
  153. package/dist/{components → src/components}/organisms/unsubscribe/UnsubscribeTypeSelection.vue.d.ts +0 -0
  154. package/dist/{components → src/components}/organisms/unsubscribe/UnsubscribeWrapper.vue.d.ts +0 -0
  155. package/dist/{components → src/components}/wrappers/WpDrawer.vue.d.ts +0 -0
  156. package/dist/{components → src/components}/wrappers/WpModal.vue.d.ts +1 -1
  157. /package/dist/{composables → src/composables}/useActionsApi.d.ts +0 -0
  158. /package/dist/{composables → src/composables}/useApiExample.d.ts +0 -0
  159. /package/dist/{composables → src/composables}/useCodeEditorApi.d.ts +0 -0
  160. /package/dist/{composables → src/composables}/useConfig.d.ts +0 -0
  161. /package/dist/{composables → src/composables}/useCustomInterfaceAppearance.d.ts +0 -0
  162. /package/dist/{composables → src/composables}/useDebounce.d.ts +0 -0
  163. /package/dist/{composables → src/composables}/useExport.d.ts +0 -0
  164. /package/dist/{composables → src/composables}/useHtmlCompiler.d.ts +0 -0
  165. /package/dist/{composables → src/composables}/useHtmlValidator.d.ts +0 -0
  166. /package/dist/{composables → src/composables}/useHttp.d.ts +0 -0
  167. /package/dist/{composables → src/composables}/usePartner.d.ts +0 -0
  168. /package/dist/{composables → src/composables}/usePreviewMode.d.ts +0 -0
  169. /package/dist/{composables → src/composables}/useProvideInject.d.ts +0 -0
  170. /package/dist/{composables → src/composables}/useRecommendation.d.ts +0 -0
  171. /package/dist/{composables → src/composables}/useResponsivePreview.d.ts +0 -0
  172. /package/dist/{composables → src/composables}/useSave.d.ts +0 -0
  173. /package/dist/{composables → src/composables}/useStripo.d.ts +0 -0
  174. /package/dist/{composables → src/composables}/useStripoEventHandler.d.ts +0 -0
  175. /package/dist/{composables → src/composables}/useToaster.d.ts +0 -0
  176. /package/dist/{composables → src/composables}/useTranslations.d.ts +0 -0
  177. /package/dist/{composables → src/composables}/useValidation.d.ts +0 -0
  178. /package/dist/{composables → src/composables}/useVersionHistoryApi.d.ts +0 -0
  179. /package/dist/{composables → src/composables}/validators/saveAsTemplate.d.ts +0 -0
  180. /package/dist/{config → src/config}/compiler/htmlCompilerRules.d.ts +0 -0
  181. /package/dist/{config → src/config}/compiler/outlookCompilerRules.d.ts +0 -0
  182. /package/dist/{config → src/config}/compiler/recommendationCompilerRules.d.ts +0 -0
  183. /package/dist/{config → src/config}/compiler/socialCompilerRules.d.ts +0 -0
  184. /package/dist/{config → src/config}/compiler/unsubscribeCompilerRules.d.ts +0 -0
  185. /package/dist/{config → src/config}/migrator/checkboxMigrator.d.ts +0 -0
  186. /package/dist/{config → src/config}/migrator/couponBlockMigrator.d.ts +0 -0
  187. /package/dist/{config → src/config}/migrator/index.d.ts +0 -0
  188. /package/dist/{config → src/config}/migrator/radioButtonMigrator.d.ts +0 -0
  189. /package/dist/{config → src/config}/migrator/unsubscribeMigrator.d.ts +0 -0
  190. /package/dist/{enums → src/enums}/defaults.d.ts +0 -0
  191. /package/dist/{enums → src/enums}/displayConditions.d.ts +0 -0
  192. /package/dist/{enums → src/enums}/extensions/recommendationBlock.d.ts +0 -0
  193. /package/dist/{enums → src/enums}/html-validator.d.ts +0 -0
  194. /package/dist/{enums → src/enums}/preview.d.ts +0 -0
  195. /package/dist/{enums → src/enums}/recommendation.d.ts +0 -0
  196. /package/dist/{enums → src/enums}/toaster.d.ts +0 -0
  197. /package/dist/{enums → src/enums}/unsubscribe.d.ts +0 -0
  198. /package/dist/{extensions → src/extensions}/Blocks/Checkbox/block.d.ts +0 -0
  199. /package/dist/{extensions → src/extensions}/Blocks/Checkbox/control.d.ts +0 -0
  200. /package/dist/{extensions → src/extensions}/Blocks/Checkbox/extension.d.ts +0 -0
  201. /package/dist/{extensions → src/extensions}/Blocks/Checkbox/iconsRegistry.d.ts +0 -0
  202. /package/dist/{extensions → src/extensions}/Blocks/Checkbox/settingsPanel.d.ts +0 -0
  203. /package/dist/{extensions → src/extensions}/Blocks/Checkbox/template.d.ts +0 -0
  204. /package/dist/{extensions → src/extensions}/Blocks/CouponBlock/block.d.ts +0 -0
  205. /package/dist/{extensions → src/extensions}/Blocks/CouponBlock/extension.d.ts +0 -0
  206. /package/dist/{extensions → src/extensions}/Blocks/CouponBlock/iconsRegistry.d.ts +0 -0
  207. /package/dist/{extensions → src/extensions}/Blocks/CouponBlock/settingsPanel.d.ts +0 -0
  208. /package/dist/{extensions → src/extensions}/Blocks/CouponBlock/template.d.ts +0 -0
  209. /package/dist/{extensions → src/extensions}/Blocks/RadioButton/block.d.ts +0 -0
  210. /package/dist/{extensions → src/extensions}/Blocks/RadioButton/control.d.ts +0 -0
  211. /package/dist/{extensions → src/extensions}/Blocks/RadioButton/extension.d.ts +0 -0
  212. /package/dist/{extensions → src/extensions}/Blocks/RadioButton/iconsRegistry.d.ts +0 -0
  213. /package/dist/{extensions → src/extensions}/Blocks/RadioButton/settingsPanel.d.ts +0 -0
  214. /package/dist/{extensions → src/extensions}/Blocks/RadioButton/template.d.ts +0 -0
  215. /package/dist/{extensions → src/extensions}/Blocks/Recommendation/extension.d.ts +0 -0
  216. /package/dist/{extensions → src/extensions}/Blocks/Recommendation/iconsRegistry.d.ts +0 -0
  217. /package/dist/{extensions → src/extensions}/Blocks/Recommendation/settingsPanel.d.ts +0 -0
  218. /package/dist/{extensions → src/extensions}/Blocks/Recommendation/utils/filterUtil.d.ts +0 -0
  219. /package/dist/{extensions → src/extensions}/Blocks/Unsubscribe/block.d.ts +0 -0
  220. /package/dist/{extensions → src/extensions}/Blocks/Unsubscribe/control.d.ts +0 -0
  221. /package/dist/{extensions → src/extensions}/Blocks/Unsubscribe/elements/preview.d.ts +0 -0
  222. /package/dist/{extensions → src/extensions}/Blocks/Unsubscribe/extension.d.ts +0 -0
  223. /package/dist/{extensions → src/extensions}/Blocks/Unsubscribe/iconsRegistry.d.ts +0 -0
  224. /package/dist/{extensions → src/extensions}/Blocks/Unsubscribe/settingsPanel.d.ts +0 -0
  225. /package/dist/{extensions → src/extensions}/Blocks/Unsubscribe/tagRegistry.d.ts +0 -0
  226. /package/dist/{extensions → src/extensions}/Blocks/Unsubscribe/template.d.ts +0 -0
  227. /package/dist/{extensions → src/extensions}/Blocks/Unsubscribe/utils/constants.d.ts +0 -0
  228. /package/dist/{extensions → src/extensions}/Blocks/Unsubscribe/utils/utils.d.ts +0 -0
  229. /package/dist/{extensions → src/extensions}/Blocks/_Boilerplate/block.d.ts +0 -0
  230. /package/dist/{extensions → src/extensions}/Blocks/_Boilerplate/control.d.ts +0 -0
  231. /package/dist/{extensions → src/extensions}/Blocks/_Boilerplate/extension.d.ts +0 -0
  232. /package/dist/{extensions → src/extensions}/Blocks/_Boilerplate/iconsRegistry.d.ts +0 -0
  233. /package/dist/{extensions → src/extensions}/Blocks/_Boilerplate/settingsPanel.d.ts +0 -0
  234. /package/dist/{extensions → src/extensions}/Blocks/_Boilerplate/template.d.ts +0 -0
  235. /package/dist/{extensions → src/extensions}/DynamicContent/extension.d.ts +0 -0
  236. /package/dist/{library.d.ts → src/library.d.ts} +0 -0
  237. /package/dist/{main.d.ts → src/main.d.ts} +0 -0
  238. /package/dist/{mock → src/mock}/api/auth.d.ts +0 -0
  239. /package/dist/{mock → src/mock}/api/custom-fonts.d.ts +0 -0
  240. /package/dist/{mock → src/mock}/api/default-template.d.ts +0 -0
  241. /package/dist/{mock → src/mock}/api/recommendation.d.ts +0 -0
  242. /package/dist/{mock → src/mock}/api/template-library.d.ts +0 -0
  243. /package/dist/{mock → src/mock}/api/unsubscribe.d.ts +0 -0
  244. /package/dist/{mock → src/mock}/api/user-modal-state.d.ts +0 -0
  245. /package/dist/{mock → src/mock}/api/validator.d.ts +0 -0
  246. /package/dist/{mock → src/mock}/browser.d.ts +0 -0
  247. /package/dist/{mock → src/mock}/handlers.d.ts +0 -0
  248. /package/dist/{services → src/services}/onboardingApi.d.ts +0 -0
  249. /package/dist/{services → src/services}/recommendationApi.d.ts +0 -0
  250. /package/dist/{services → src/services}/stripoApi.d.ts +0 -0
  251. /package/dist/{services → src/services}/templateLibraryApi.d.ts +0 -0
  252. /package/dist/{services → src/services}/unsubscribeApi.d.ts +0 -0
  253. /package/dist/{utils → src/utils}/arrayUtil.d.ts +0 -0
  254. /package/dist/{utils → src/utils}/base64.d.ts +0 -0
  255. /package/dist/{utils → src/utils}/htmlCompiler.d.ts +0 -0
  256. /package/dist/{utils → src/utils}/templatePreparation.d.ts +0 -0
  257. /package/dist/{utils → src/utils}/tooltipUtils.d.ts +0 -0
@@ -0,0 +1,193 @@
1
+ import { ModificationDescription as n } from "../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
2
+ import { CommonControl as b } from "../common-control.js";
3
+ import { ATTR_PRODUCT_IMAGE as m, ATTR_PRODUCT_NAME as y, ATTR_PRODUCT_PRICE as T, ATTR_PRODUCT_OLD_PRICE as h, ATTR_PRODUCT_OMNIBUS_PRICE as C, ATTR_PRODUCT_OMNIBUS_DISCOUNT as f, ATTR_PRODUCT_BUTTON as g } from "./constants.js";
4
+ const R = "ui-elements-recommendation-card-composition", l = ".recommendation-attribute-row", A = "tr.recommendation-product-row", c = "data-card-composition", a = "data-attribute-type", d = "data-visibility", s = [
5
+ { key: m, label: "Product Image", visible: !0 },
6
+ { key: y, label: "Product Name", visible: !0 },
7
+ { key: T, label: "Product Price", visible: !0 },
8
+ { key: h, label: "Product Original Price", visible: !0 },
9
+ { key: C, label: "Omnibus Price", visible: !1 },
10
+ { key: f, label: "Omnibus Discount", visible: !1 },
11
+ { key: g, label: "Product Button", visible: !0 }
12
+ ];
13
+ class N extends b {
14
+ getId() {
15
+ return R;
16
+ }
17
+ getTemplate() {
18
+ const t = s.map((i) => ({
19
+ key: i.key,
20
+ label: i.label,
21
+ content: this._createItemContent(i.label, i.key)
22
+ }));
23
+ return `
24
+ <div class="container">
25
+ ${this._GuLabel({ text: "Card Element Order & Visibility" })}
26
+ ${this._GuOrderable("cardComposition", t)}
27
+ </div>
28
+ `;
29
+ }
30
+ onRender() {
31
+ this._initializeComposition(), this._registerValueChangeListeners();
32
+ }
33
+ onTemplateNodeUpdated(t) {
34
+ super.onTemplateNodeUpdated(t), this._initializeComposition();
35
+ }
36
+ /**
37
+ * Creates the HTML content for an orderable item with label and toggle
38
+ */
39
+ _createItemContent(t, i) {
40
+ return `
41
+ <div style="display: flex; align-items: center; justify-content: space-between;
42
+ padding: 8px; gap: 8px;">
43
+ <span style="flex: 1;">${t}</span>
44
+ ${this._GuToggle(`visibility_${i}`)}
45
+ </div>
46
+ `;
47
+ }
48
+ /**
49
+ * Registers event listeners for composition and visibility changes
50
+ */
51
+ _registerValueChangeListeners() {
52
+ this.api.onValueChanged("cardComposition", (t) => {
53
+ this._applyCompositionToBlock(t);
54
+ }), s.forEach((t) => {
55
+ this.api.onValueChanged(`visibility_${t.key}`, (i) => {
56
+ this._applyVisibilityToBlock(t.key, i);
57
+ });
58
+ });
59
+ }
60
+ /**
61
+ * Initializes composition order and visibility state from the current node
62
+ */
63
+ _initializeComposition() {
64
+ const t = this._readCompositionFromNode(), i = this._readVisibilityFromRows(), e = {
65
+ cardComposition: t,
66
+ ...this._buildVisibilityValues(i)
67
+ };
68
+ this.api.updateValues(e);
69
+ }
70
+ /**
71
+ * Reads composition order from node's data-card-composition attribute
72
+ * Falls back to default order if attribute is not present
73
+ */
74
+ _readCompositionFromNode() {
75
+ if (!this.currentNode || !("getAttribute" in this.currentNode))
76
+ return this._getDefaultComposition();
77
+ const t = this.currentNode.getAttribute(c);
78
+ return t ? t.split(",").filter(Boolean) : this._getDefaultComposition();
79
+ }
80
+ /**
81
+ * Gets default composition order
82
+ */
83
+ _getDefaultComposition() {
84
+ return s.map((t) => t.key);
85
+ }
86
+ /**
87
+ * Builds visibility values object from the visibility map
88
+ */
89
+ _buildVisibilityValues(t) {
90
+ return s.reduce((i, e) => (i[`visibility_${e.key}`] = t[e.key] ?? !0, i), {});
91
+ }
92
+ /**
93
+ * Read visibility state from individual row elements' data-visibility attributes
94
+ * This ensures toggles reflect the actual DOM state
95
+ */
96
+ _readVisibilityFromRows() {
97
+ if (!this.currentNode)
98
+ return this._getDefaultVisibilities();
99
+ const t = Array.from(this.currentNode.querySelectorAll(l));
100
+ console.debug("_readVisibilityFromRows - found attribute rows:", t.length);
101
+ const i = this._extractVisibilityFromRows(t);
102
+ return this._mergeWithDefaults(i);
103
+ }
104
+ /**
105
+ * Returns default visibility values for all items
106
+ */
107
+ _getDefaultVisibilities() {
108
+ return s.reduce((t, i) => (t[i.key] = i.visible, t), {});
109
+ }
110
+ /**
111
+ * Extracts visibility values from DOM nodes
112
+ */
113
+ _extractVisibilityFromRows(t) {
114
+ const i = {};
115
+ return t.forEach((e) => {
116
+ if (!("getAttribute" in e))
117
+ return;
118
+ const o = e.getAttribute(a), r = e.getAttribute(d);
119
+ o && r !== null && (i[o] = this._parseVisibilityValue(r), console.debug(
120
+ `_readVisibilityFromRows - ${o}: ${i[o]} (raw: ${r})`
121
+ ));
122
+ }), i;
123
+ }
124
+ /**
125
+ * Parses visibility value from string to boolean
126
+ * Accepts "1", "true" as true, everything else as false
127
+ */
128
+ _parseVisibilityValue(t) {
129
+ return t === "1" || t === "true";
130
+ }
131
+ /**
132
+ * Merges extracted visibilities with default values for missing keys
133
+ */
134
+ _mergeWithDefaults(t) {
135
+ return s.forEach((i) => {
136
+ i.key in t || (t[i.key] = i.visible, console.debug(`_readVisibilityFromRows - ${i.key}: using default ${i.visible}`));
137
+ }), t;
138
+ }
139
+ /**
140
+ * Apply the reordered composition to the block's HTML structure
141
+ * Updates the data-card-composition attribute and reorders product attributes
142
+ */
143
+ _applyCompositionToBlock(t) {
144
+ if (console.debug("_applyCompositionToBlock - composition:", t), !this.currentNode) {
145
+ console.debug("_applyCompositionToBlock - no current node");
146
+ return;
147
+ }
148
+ this.api.getDocumentModifier().modifyHtml(this.currentNode).setAttribute(c, t.join(",")).apply(new n("Update card composition")), this._reorderProductAttributes(t);
149
+ }
150
+ /**
151
+ * Reorders attribute rows within each product row based on composition order
152
+ */
153
+ _reorderProductAttributes(t) {
154
+ if (!this.currentNode)
155
+ return;
156
+ const i = this.currentNode.querySelectorAll(A);
157
+ if (!(i != null && i.length))
158
+ return;
159
+ const e = this.api.getDocumentModifier();
160
+ i.forEach((o) => {
161
+ const r = this._buildCompositionHtml(o, t);
162
+ e.modifyHtml(o).setInnerHtml(r);
163
+ }), e.apply(new n("Reorder product attributes"));
164
+ }
165
+ /**
166
+ * Builds HTML string with attributes ordered according to composition
167
+ */
168
+ _buildCompositionHtml(t, i) {
169
+ return i.reduce((e, o) => {
170
+ const r = t.querySelector(`${l}[${a}="${o}"]`);
171
+ return r && "getOuterHTML" in r ? e + r.getOuterHTML() : e;
172
+ }, "");
173
+ }
174
+ /**
175
+ * Apply visibility changes to the block's HTML structure
176
+ * Updates display style and data-visibility attribute for all matching rows
177
+ */
178
+ _applyVisibilityToBlock(t, i) {
179
+ if (console.debug("_applyVisibilityToBlock", t, i), !this.currentNode)
180
+ return;
181
+ const e = this.currentNode.querySelectorAll(`${l}[${a}="${t}"]`);
182
+ if (!(e != null && e.length))
183
+ return;
184
+ const o = i ? "table-row" : "none", r = i ? "1" : "0", p = `Set ${t} visibility to ${i ? "visible" : "hidden"}`, u = this.api.getDocumentModifier();
185
+ e.forEach((_) => {
186
+ u.modifyHtml(_).setStyle("display", o).setAttribute(d, r);
187
+ }), u.apply(new n(p));
188
+ }
189
+ }
190
+ export {
191
+ R as COMPOSITION_CONTROL_BLOCK_ID,
192
+ N as RecommendationCardCompositionControl
193
+ };
@@ -0,0 +1,14 @@
1
+ const _ = "productImage", i = "productName", n = "productPrice", b = "productOldPrice", l = "productOmnibusPrice", N = "productOmnibusDiscount", O = "productButton", T = "data-price-inline";
2
+ var o = /* @__PURE__ */ ((c) => (c.BUTTON = "recommendation-block-button", c.NAME = "recommendation-block-name", c.PRICE = "recommendation-block-price", c.OLD_PRICE = "recommendation-block-old-price", c.OMNIBUS_PRICE = "recommendation-block-omnibus-price", c.OMNIBUS_DISCOUNT = "recommendation-block-omnibus-discount", c.IMAGE = "recommendation-block-image", c))(o || {}), r = /* @__PURE__ */ ((c) => (c.BUTTON_ALIGN = "recommendation-block-button-align-control", c.BUTTON_BORDER = "recommendation-block-button-border-control", c.BUTTON_BORDER_RADIUS = "recommendation-block-button-border-radius-control", c.BUTTON_COLOR = "recommendation-block-button-color-control", c.BUTTON_FIT_TO_CONTENT = "recommendation-block-button-fit-to-content-control", c.BUTTON_FONT_FAMILY = "recommendation-block-button-font-family-control", c.BUTTON_MARGINS = "recommendation-block-button-margins-control", c.BUTTON_PADDINGS = "recommendation-block-button-paddings-control", c.BUTTON_TEXT = "recommendation-block-button-text-control", c.BUTTON_TEXT_SIZE = "recommendation-block-button-text-size-control", c.BUTTON_TEXT_STYLE_AND_FONT_COLOR = "recommendation-block-button-text-style-and-font-color-control", c.NAME_ALIGN = "recommendation-block-name-align-control", c.NAME_BACKGROUND = "recommendation-block-name-background-control", c.NAME_COLOR = "recommendation-block-name-color-control", c.NAME_FONT_FAMILY = "recommendation-block-name-font-family-control", c.NAME_LINE_SPACING = "recommendation-block-name-line-spacing-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_HIDE_IF_SAME = "recommendation-block-price-hide-if-same-control", c.PRICE_LINE_SPACING = "recommendation-block-price-line-spacing-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_LINE_SPACING = "recommendation-block-old-price-line-spacing-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_LINE_SPACING = "recommendation-block-omnibus-price-line-spacing-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_LINE_SPACING = "recommendation-block-omnibus-discount-line-spacing-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.PRICE_INLINE_LAYOUT = "recommendation-block-price-inline-layout-control", c))(r || {});
3
+ export {
4
+ T as ATTR_DATA_PRICE_INLINE,
5
+ O as ATTR_PRODUCT_BUTTON,
6
+ _ as ATTR_PRODUCT_IMAGE,
7
+ i as ATTR_PRODUCT_NAME,
8
+ b as ATTR_PRODUCT_OLD_PRICE,
9
+ N as ATTR_PRODUCT_OMNIBUS_DISCOUNT,
10
+ l as ATTR_PRODUCT_OMNIBUS_PRICE,
11
+ n as ATTR_PRODUCT_PRICE,
12
+ o as RecommendationBlockId,
13
+ r as RecommendationControlId
14
+ };
@@ -1,11 +1,14 @@
1
- var _ = Object.defineProperty;
2
- var R = (o, n, e) => n in o ? _(o, n, { enumerable: !0, configurable: !0, writable: !0, value: e }) : o[n] = e;
3
- var r = (o, n, e) => R(o, typeof n != "symbol" ? n + "" : n, e);
4
- import { currencyDecimalCounts as c, currencyOperators as a, currencyLocationMaps as l } from "../../../enums/extensions/recommendationBlock.js";
5
- import { UEAttr as d } from "../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
6
- import { CommonControl as m } from "../common-control.js";
7
- import { useRecommendationExtensionStore as S } from "./store/recommendation.js";
8
- const g = "ui-elements-recommendation-block", t = {
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 = {
9
12
  ALGORITHM: "strategy",
10
13
  PRODUCT_IDS: "productIds",
11
14
  LOCALE: "language",
@@ -18,21 +21,23 @@ const g = "ui-elements-recommendation-block", t = {
18
21
  FILTERS: "filterStatus",
19
22
  PRODUCT_COUNT: "size",
20
23
  PRODUCT_IN_ROW: "cardsInRow",
21
- SHUFFLE_PRODUCTS: "shuffleProducts",
22
- RESPONSIVE: "unresponsive"
24
+ SHUFFLE_PRODUCTS: "shuffleProducts"
23
25
  };
24
- class p extends m {
26
+ class Y extends U {
25
27
  constructor() {
26
28
  super(...arguments);
27
- r(this, "store", S());
28
- r(this, "storeUnsubscription", () => {
29
+ u(this, "store", N());
30
+ u(this, "storeUnsubscription", () => {
29
31
  });
30
- r(this, "addFilterListener", () => {
32
+ u(this, "addFilterListener", () => {
31
33
  });
32
- r(this, "addFilterButton", null);
34
+ u(this, "addFilterButton", null);
35
+ u(this, "_debouncedRegenerateProductRows", T(() => {
36
+ this._regenerateProductRows();
37
+ }, 500));
33
38
  }
34
39
  getId() {
35
- return g;
40
+ return f;
36
41
  }
37
42
  getTemplate() {
38
43
  return `
@@ -43,7 +48,6 @@ class p extends m {
43
48
  ${this._getFilterStatus()}
44
49
  ${this._getProductLayout()}
45
50
  ${this._getShuffleProducts()}
46
- ${this._getResponsive()}
47
51
  </div>
48
52
  `;
49
53
  }
@@ -73,27 +77,25 @@ class p extends m {
73
77
  [t.CURRENCY_DECIMAL_COUNT]: e.currencySettings.decimalCount,
74
78
  [t.PRODUCT_COUNT]: e.size,
75
79
  [t.PRODUCT_IN_ROW]: e.cardsInRow,
76
- [t.SHUFFLE_PRODUCTS]: e.shuffleProducts,
77
- [t.RESPONSIVE]: !e.unresponsive
80
+ [t.SHUFFLE_PRODUCTS]: e.shuffleProducts
78
81
  });
79
82
  }
80
83
  _initializeSelectItems() {
81
- const { store: e } = this, s = e.getActivePredictiveAlgorithms, i = e.getLanguages, C = {
82
- [t.ALGORITHM]: s,
84
+ const { store: e } = this, o = e.getActivePredictiveAlgorithms, i = e.getLanguages, n = {
85
+ [t.ALGORITHM]: o,
83
86
  [t.LOCALE]: i,
84
87
  [t.CURRENCY]: e.currencyList,
85
- [t.CURRENCY_LOCATION]: l,
88
+ [t.CURRENCY_LOCATION]: R,
86
89
  [t.CURRENCY_SYMBOL]: e.getCurrencySymbolList,
87
- [t.CURRENCY_THOUSAND_SEPARATOR]: a,
88
- [t.CURRENCY_DECIMAL_SEPARATOR]: a,
89
- [t.CURRENCY_DECIMAL_COUNT]: c,
90
+ [t.CURRENCY_THOUSAND_SEPARATOR]: C,
91
+ [t.CURRENCY_DECIMAL_SEPARATOR]: C,
92
+ [t.CURRENCY_DECIMAL_COUNT]: _,
90
93
  [t.PRODUCT_COUNT]: Number(e.recommendationConfigs.size),
91
94
  [t.PRODUCT_IN_ROW]: e.recommendationConfigs.cardsInRow,
92
- [t.SHUFFLE_PRODUCTS]: e.recommendationConfigs.shuffleProducts,
93
- [t.RESPONSIVE]: !e.recommendationConfigs.unresponsive
95
+ [t.SHUFFLE_PRODUCTS]: e.recommendationConfigs.shuffleProducts
94
96
  };
95
- Object.entries(C).forEach(([u, h]) => {
96
- this.api.setUIEAttribute(u, d.SELECTPICKER.items, h);
97
+ Object.entries(n).forEach(([r, l]) => {
98
+ this.api.setUIEAttribute(r, O.SELECTPICKER.items, l);
97
99
  });
98
100
  }
99
101
  _getAlgorithms() {
@@ -139,7 +141,7 @@ class p extends m {
139
141
  this._GuSelect({
140
142
  name: t.CURRENCY_LOCATION,
141
143
  placeholder: "Select Currency Location",
142
- options: l
144
+ options: R
143
145
  }),
144
146
  this._GuLabel({ text: "Currency Symbol" }),
145
147
  this._GuSelect({
@@ -151,19 +153,19 @@ class p extends m {
151
153
  this._GuSelect({
152
154
  name: t.CURRENCY_THOUSAND_SEPARATOR,
153
155
  placeholder: "Select Thousand Separator",
154
- options: a
156
+ options: C
155
157
  }),
156
158
  this._GuLabel({ text: "Decimal Separator" }),
157
159
  this._GuSelect({
158
160
  name: t.CURRENCY_DECIMAL_SEPARATOR,
159
161
  placeholder: "Select Decimal Separator",
160
- options: a
162
+ options: C
161
163
  }),
162
164
  this._GuLabel({ text: "Decimal Count" }),
163
165
  this._GuSelect({
164
166
  name: t.CURRENCY_DECIMAL_COUNT,
165
167
  placeholder: "Select Decimal Count",
166
- options: c
168
+ options: _
167
169
  })
168
170
  ])}
169
171
  `;
@@ -198,58 +200,100 @@ class p extends m {
198
200
  ])}
199
201
  `;
200
202
  }
201
- _getResponsive() {
202
- return `
203
- ${this._GuTwoColumns([
204
- this._GuLabel({ text: "Responsive Block" }),
205
- this._GuToggle(t.RESPONSIVE)
206
- ])}
207
- `;
208
- }
209
- _onFilterChange(e) {
210
- this.currentNode && this.store.$patch({
211
- filterStatus: e,
212
- filterSelectionDrawerStatus: e
213
- });
214
- }
215
203
  _onFilterSelectClick() {
216
204
  this.store.$patch({
217
205
  filterSelectionDrawerStatus: !0
218
206
  });
219
207
  }
220
- _onDataChange(e, s) {
221
- this.currentNode && this.store.$patch({
208
+ _onDataChange(e, o) {
209
+ this.currentNode && (this.store.$patch({
222
210
  recommendationConfigs: {
223
- [e]: s
211
+ [e]: o
224
212
  }
225
- });
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"));
226
270
  }
227
- _onCurrencyConfigChange(e, s) {
271
+ _onCurrencyConfigChange(e, o) {
228
272
  this.currentNode && this.store.$patch({
229
273
  recommendationConfigs: {
230
274
  currencySettings: {
231
- [e]: s
275
+ [e]: o
232
276
  }
233
277
  }
234
278
  });
235
279
  }
236
280
  _onCurrencyChange(e) {
237
- const [, s] = e.split(".");
281
+ const [, o] = e.split(".");
238
282
  this.store.$patch({
239
283
  recommendationConfigs: {
240
284
  currencySettings: {
241
- name: s,
242
- value: s
285
+ name: o,
286
+ value: o
243
287
  }
244
288
  }
245
289
  });
246
290
  }
247
291
  _setProductIdsVisibility() {
248
- const { recommendationConfigs: e } = this.store, s = e.strategy === "manualMerchandising";
249
- this.api.setVisibility(t.PRODUCT_IDS, s), this.api.setVisibility(`${t.PRODUCT_IDS}_label`, s);
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);
250
294
  }
251
295
  _listenToFormUpdates() {
252
- var s;
296
+ var o;
253
297
  this.api.onValueChanged(t.ALGORITHM, (i) => {
254
298
  this._onDataChange(t.ALGORITHM, i), this._setProductIdsVisibility();
255
299
  }), this.api.onValueChanged(t.PRODUCT_IDS, (i) => this._onDataChange(t.PRODUCT_IDS, i.split(",") || [])), this.api.onValueChanged(t.LOCALE, (i) => this._onDataChange(t.LOCALE, i)), this.api.onValueChanged(t.CURRENCY, (i) => this._onCurrencyChange(i)), [
@@ -259,19 +303,19 @@ class p extends m {
259
303
  t.CURRENCY_DECIMAL_SEPARATOR,
260
304
  t.CURRENCY_DECIMAL_COUNT
261
305
  ].forEach((i) => {
262
- this.api.onValueChanged(i, (C) => this._onCurrencyConfigChange(i, C));
263
- }), this.api.onValueChanged(t.PRODUCT_COUNT, (i) => this._onDataChange(t.PRODUCT_COUNT, i.toString())), this.api.onValueChanged(t.PRODUCT_IN_ROW, (i) => this._onDataChange(t.PRODUCT_IN_ROW, i)), this.api.onValueChanged(t.SHUFFLE_PRODUCTS, (i) => this._onDataChange(t.SHUFFLE_PRODUCTS, i)), this.api.onValueChanged(t.RESPONSIVE, (i) => this._onDataChange(t.RESPONSIVE, i)), this.addFilterListener = this._onFilterSelectClick.bind(this), this.addFilterButton = this.getContainer().querySelector("#guido__btn-add-filter"), (s = this.addFilterButton) == null || s.addEventListener("click", this.addFilterListener);
306
+ this.api.onValueChanged(i, (n) => this._onCurrencyConfigChange(i, n));
307
+ }), this.api.onValueChanged(t.PRODUCT_COUNT, (i) => this._onDataChange(t.PRODUCT_COUNT, i.toString())), this.api.onValueChanged(t.PRODUCT_IN_ROW, (i) => this._onDataChange(t.PRODUCT_IN_ROW, i)), this.api.onValueChanged(t.SHUFFLE_PRODUCTS, (i) => this._onDataChange(t.SHUFFLE_PRODUCTS, i)), this.addFilterListener = this._onFilterSelectClick.bind(this), this.addFilterButton = this.getContainer().querySelector("#guido__btn-add-filter"), (o = this.addFilterButton) == null || o.addEventListener("click", this.addFilterListener);
264
308
  }
265
309
  _listenStateUpdates() {
266
310
  this.storeUnsubscription = this.store.$subscribe((e) => {
267
311
  if ("payload" in e) {
268
- const s = e.payload.recommendationConfigs;
269
- s && (this.api.updateValues(s), this.store.fetchRecommendationProducts());
312
+ const o = e.payload.recommendationConfigs;
313
+ o && (this.api.updateValues(o), this.store.fetchRecommendationProducts());
270
314
  }
271
315
  });
272
316
  }
273
317
  }
274
318
  export {
275
- g as CONTROL_BLOCK_ID,
276
- p as RecommendationBlockControl
319
+ f as CONTROL_BLOCK_ID,
320
+ Y as RecommendationBlockControl
277
321
  };
@@ -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
+ };