@useinsider/guido 2.0.0-beta.a4f9fa2 → 2.0.0-beta.a7d687e

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 (296) hide show
  1. package/dist/@types/config/schemas.js +53 -39
  2. package/dist/components/organisms/email-preview/PreviewContainer.vue.js +3 -3
  3. package/dist/components/organisms/email-preview/amp/AmpErrorModal.vue.js +6 -6
  4. package/dist/components/organisms/email-preview/amp/AmpErrorModal.vue2.js +17 -13
  5. package/dist/components/organisms/email-preview/amp/AmpToggle.vue.js +6 -6
  6. package/dist/components/organisms/email-preview/amp/AmpToggle.vue2.js +14 -12
  7. package/dist/components/organisms/email-preview/desktop-preview/DesktopBrowserHeader.vue.js +18 -0
  8. package/dist/components/organisms/email-preview/desktop-preview/DesktopBrowserHeader.vue2.js +15 -0
  9. package/dist/components/organisms/email-preview/desktop-preview/DesktopPreview.vue.js +10 -14
  10. package/dist/components/organisms/email-preview/desktop-preview/DesktopPreview.vue2.js +14 -22
  11. package/dist/components/organisms/email-preview/desktop-preview/EmailSizeIndicator.vue.js +3 -3
  12. package/dist/components/organisms/email-preview/mobile-preview/ContentView.vue.js +12 -11
  13. package/dist/components/organisms/email-preview/mobile-preview/InboxView.vue.js +12 -10
  14. package/dist/components/organisms/email-preview/mobile-preview/MobilePreview.vue.js +11 -10
  15. package/dist/components/organisms/email-preview/mobile-preview/MobilePreview.vue2.js +15 -14
  16. package/dist/components/organisms/header/EditorActions.vue.js +21 -0
  17. package/dist/components/organisms/header/EditorActions.vue2.js +41 -0
  18. package/dist/components/organisms/header/EditorToolbar.vue.js +18 -0
  19. package/dist/components/organisms/header/EditorToolbar.vue2.js +17 -0
  20. package/dist/components/organisms/header/HeaderWrapper.vue.js +6 -5
  21. package/dist/components/organisms/header/LeftSlot.vue.js +9 -9
  22. package/dist/components/organisms/header/LeftSlot.vue2.js +13 -14
  23. package/dist/components/organisms/header/MiddleSlot.vue.js +7 -7
  24. package/dist/components/organisms/header/MiddleSlot.vue2.js +11 -15
  25. package/dist/components/organisms/header/RightSlot.vue.js +11 -14
  26. package/dist/components/organisms/header/RightSlot.vue2.js +13 -30
  27. package/dist/components/organisms/header/version-history/VersionHistory.vue.js +5 -5
  28. package/dist/components/organisms/onboarding/NewVersionPopup.vue2.js +15 -15
  29. package/dist/components/organisms/unsubscribe/UnsubscribeTypeSelection.vue.js +1 -1
  30. package/dist/components/organisms/unsubscribe/UnsubscribeTypeSelection.vue2.js +20 -19
  31. package/dist/composables/useActionsApi.js +33 -30
  32. package/dist/composables/useConfig.js +29 -27
  33. package/dist/composables/useSave.js +13 -11
  34. package/dist/config/migrator/index.js +8 -9
  35. package/dist/config/migrator/recommendationMigrator.js +2 -2
  36. package/dist/enums/academy.js +8 -0
  37. package/dist/enums/onboarding.js +1 -2
  38. package/dist/enums/unsubscribe.js +20 -21
  39. package/dist/extensions/Blocks/Items/block.js +40 -39
  40. package/dist/extensions/Blocks/Items/controls/button/link.js +29 -22
  41. package/dist/extensions/Blocks/Items/controls/cardComposition.js +59 -70
  42. package/dist/extensions/Blocks/Items/controls/image/link.js +30 -23
  43. package/dist/extensions/Blocks/Items/controls/name/trimming.js +25 -25
  44. package/dist/extensions/Blocks/Items/controls/price/currencyLocation.js +17 -19
  45. package/dist/extensions/Blocks/Items/controls/price/currencySymbol.js +29 -31
  46. package/dist/extensions/Blocks/Items/controls/price/formattedPrice.js +36 -36
  47. package/dist/extensions/Blocks/Items/controls/price/hideDiscount.js +19 -21
  48. package/dist/extensions/Blocks/Items/controls/price/priceOrientation.js +27 -29
  49. package/dist/extensions/Blocks/Items/controls/settingsControl.js +143 -152
  50. package/dist/extensions/Blocks/Items/enums/controlEnums.js +2 -2
  51. package/dist/extensions/Blocks/Items/enums/productEnums.js +45 -43
  52. package/dist/extensions/Blocks/Items/enums/settingsEnums.js +3 -4
  53. package/dist/extensions/Blocks/Items/extension.js +6 -7
  54. package/dist/extensions/Blocks/Items/layouts/horizontal.html.js +49 -58
  55. package/dist/extensions/Blocks/Items/layouts/vertical.html.js +59 -48
  56. package/dist/extensions/Blocks/Items/settingsPanel.js +26 -27
  57. package/dist/extensions/Blocks/Items/store/items-block.js +7 -11
  58. package/dist/extensions/Blocks/Items/template.js +129 -366
  59. package/dist/extensions/Blocks/Items/utils/configBlockUtils.js +17 -0
  60. package/dist/extensions/Blocks/Items/utils/syncAttributeFromConfigBlock.js +28 -0
  61. package/dist/extensions/Blocks/Items/utils/syncAttributesFromConfigBlock.js +76 -0
  62. package/dist/extensions/Blocks/Items/utils/updateAttributes.js +46 -0
  63. package/dist/extensions/Blocks/Recommendation/block.js +40 -6
  64. package/dist/extensions/Blocks/Recommendation/constants/blockIds.js +4 -0
  65. package/dist/extensions/Blocks/Recommendation/constants/controlIds.js +4 -0
  66. package/dist/extensions/Blocks/Recommendation/constants/defaultConfig.js +64 -0
  67. package/dist/extensions/Blocks/Recommendation/constants/layout.js +20 -0
  68. package/dist/extensions/Blocks/Recommendation/constants/selectors.js +19 -0
  69. package/dist/extensions/Blocks/Recommendation/controls/button/index.js +64 -0
  70. package/dist/extensions/Blocks/Recommendation/controls/cardBackground/index.js +80 -0
  71. package/dist/extensions/Blocks/Recommendation/controls/cardComposition/index.js +232 -0
  72. package/dist/extensions/Blocks/Recommendation/controls/image/index.js +19 -0
  73. package/dist/extensions/Blocks/Recommendation/controls/layout/index.js +94 -0
  74. package/dist/extensions/Blocks/Recommendation/controls/main/algorithm.js +110 -0
  75. package/dist/extensions/Blocks/Recommendation/controls/main/currency.js +204 -0
  76. package/dist/extensions/Blocks/Recommendation/controls/main/filters.js +54 -0
  77. package/dist/extensions/Blocks/Recommendation/controls/main/index.js +201 -0
  78. package/dist/extensions/Blocks/Recommendation/controls/main/locale.js +74 -0
  79. package/dist/extensions/Blocks/Recommendation/controls/main/productLayout.js +118 -0
  80. package/dist/extensions/Blocks/Recommendation/controls/main/shuffle.js +71 -0
  81. package/dist/extensions/Blocks/Recommendation/controls/main/utils.js +282 -0
  82. package/dist/extensions/Blocks/Recommendation/controls/name/index.js +46 -0
  83. package/dist/extensions/Blocks/Recommendation/controls/name/textTrim.js +76 -0
  84. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/index.js +44 -0
  85. package/dist/extensions/Blocks/Recommendation/controls/omnibusDiscount/index.js +48 -0
  86. package/dist/extensions/Blocks/Recommendation/controls/omnibusDiscount/textAfter.js +73 -0
  87. package/dist/extensions/Blocks/Recommendation/controls/omnibusDiscount/textBefore.js +73 -0
  88. package/dist/extensions/Blocks/Recommendation/controls/omnibusPrice/index.js +48 -0
  89. package/dist/extensions/Blocks/Recommendation/controls/omnibusPrice/textAfter.js +73 -0
  90. package/dist/extensions/Blocks/Recommendation/controls/omnibusPrice/textBefore.js +73 -0
  91. package/dist/extensions/Blocks/Recommendation/controls/price/index.js +44 -0
  92. package/dist/extensions/Blocks/Recommendation/controls/spacing/index.js +222 -0
  93. package/dist/extensions/Blocks/Recommendation/extension.js +40 -43
  94. package/dist/extensions/Blocks/Recommendation/recommendation.css.js +13 -4
  95. package/dist/extensions/Blocks/Recommendation/services/configService.js +239 -0
  96. package/dist/extensions/Blocks/Recommendation/settingsPanel.js +128 -72
  97. package/dist/extensions/Blocks/Recommendation/store/recommendation.js +40 -35
  98. package/dist/extensions/Blocks/Recommendation/templates/horizontal/elementRenderer.js +174 -0
  99. package/dist/extensions/Blocks/Recommendation/templates/horizontal/template.js +73 -0
  100. package/dist/extensions/Blocks/Recommendation/templates/index.js +12 -0
  101. package/dist/extensions/Blocks/Recommendation/templates/utils.js +121 -0
  102. package/dist/extensions/Blocks/Recommendation/templates/vertical/elementRenderer.js +233 -0
  103. package/dist/extensions/Blocks/Recommendation/templates/vertical/migration.js +251 -0
  104. package/dist/extensions/Blocks/Recommendation/templates/vertical/template.js +69 -0
  105. package/dist/extensions/Blocks/Recommendation/types/nodeConfig.js +6 -0
  106. package/dist/extensions/Blocks/Recommendation/utils/filterUtil.js +9 -9
  107. package/dist/extensions/Blocks/Recommendation/utils/preserveTextStyles.js +36 -0
  108. package/dist/extensions/Blocks/Recommendation/utils/priceFormatter.js +29 -0
  109. package/dist/extensions/Blocks/Recommendation/utils/tagName.js +46 -0
  110. package/dist/extensions/Blocks/Unsubscribe/extension.js +9 -9
  111. package/dist/extensions/Blocks/common-control.js +28 -28
  112. package/dist/extensions/Blocks/controlFactories.js +130 -106
  113. package/dist/guido.css +1 -1
  114. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js +221 -173
  115. package/dist/services/recommendationApi.js +10 -9
  116. package/dist/src/@types/config/index.d.ts +2 -2
  117. package/dist/src/@types/config/schemas.d.ts +26 -0
  118. package/dist/src/@types/config/types.d.ts +7 -1
  119. package/dist/src/components/organisms/email-preview/desktop-preview/DesktopBrowserHeader.vue.d.ts +2 -0
  120. package/dist/src/components/organisms/header/EditorActions.vue.d.ts +4 -0
  121. package/dist/src/components/organisms/header/EditorToolbar.vue.d.ts +2 -0
  122. package/dist/src/components/organisms/header/RightSlot.vue.d.ts +1 -1
  123. package/dist/src/components/wrappers/WpDrawer.vue.d.ts +1 -1
  124. package/dist/src/composables/useActionsApi.d.ts +1 -0
  125. package/dist/src/composables/useConfig.d.ts +6 -0
  126. package/dist/src/enums/academy.d.ts +12 -0
  127. package/dist/src/enums/onboarding.d.ts +0 -1
  128. package/dist/src/enums/unsubscribe.d.ts +0 -1
  129. package/dist/src/extensions/Blocks/Items/controls/button/link.d.ts +2 -0
  130. package/dist/src/extensions/Blocks/Items/controls/cardComposition.d.ts +0 -9
  131. package/dist/src/extensions/Blocks/Items/controls/image/link.d.ts +2 -0
  132. package/dist/src/extensions/Blocks/Items/controls/price/priceOrientation.d.ts +1 -1
  133. package/dist/src/extensions/Blocks/Items/controls/settingsControl.d.ts +4 -0
  134. package/dist/src/extensions/Blocks/Items/enums/controlEnums.d.ts +0 -1
  135. package/dist/src/extensions/Blocks/Items/enums/productEnums.d.ts +26 -24
  136. package/dist/src/extensions/Blocks/Items/enums/settingsEnums.d.ts +0 -1
  137. package/dist/src/extensions/Blocks/Items/store/items-block.d.ts +0 -2
  138. package/dist/src/extensions/Blocks/Items/template.d.ts +1 -22
  139. package/dist/src/extensions/Blocks/Items/utils/configBlockUtils.d.ts +23 -0
  140. package/dist/src/extensions/Blocks/Items/utils/syncAttributeFromConfigBlock.d.ts +32 -0
  141. package/dist/src/extensions/Blocks/Items/utils/syncAttributesFromConfigBlock.d.ts +50 -0
  142. package/dist/src/extensions/Blocks/Items/utils/updateAttributes.d.ts +8 -0
  143. package/dist/src/extensions/Blocks/Recommendation/block.d.ts +34 -0
  144. package/dist/src/extensions/Blocks/Recommendation/constants/blockIds.d.ts +13 -0
  145. package/dist/src/extensions/Blocks/Recommendation/{constants.d.ts → constants/controlIds.d.ts} +19 -11
  146. package/dist/src/extensions/Blocks/Recommendation/constants/defaultConfig.d.ts +49 -0
  147. package/dist/src/extensions/Blocks/Recommendation/constants/index.d.ts +13 -0
  148. package/dist/src/extensions/Blocks/Recommendation/constants/layout.d.ts +35 -0
  149. package/dist/src/extensions/Blocks/Recommendation/constants/selectors.d.ts +31 -0
  150. package/dist/src/extensions/Blocks/Recommendation/controls/button/index.d.ts +143 -0
  151. package/dist/src/extensions/Blocks/Recommendation/controls/cardBackground/index.d.ts +31 -0
  152. package/dist/src/extensions/Blocks/Recommendation/controls/cardComposition/index.d.ts +95 -0
  153. package/dist/src/extensions/Blocks/Recommendation/controls/image/index.d.ts +35 -0
  154. package/dist/src/extensions/Blocks/Recommendation/controls/index.d.ts +24 -0
  155. package/dist/src/extensions/Blocks/Recommendation/controls/layout/index.d.ts +36 -0
  156. package/dist/src/extensions/Blocks/Recommendation/controls/main/algorithm.d.ts +29 -0
  157. package/dist/src/extensions/Blocks/Recommendation/controls/main/currency.d.ts +45 -0
  158. package/dist/src/extensions/Blocks/Recommendation/controls/main/filters.d.ts +22 -0
  159. package/dist/src/extensions/Blocks/Recommendation/controls/main/index.d.ts +56 -0
  160. package/dist/src/extensions/Blocks/Recommendation/controls/main/locale.d.ts +24 -0
  161. package/dist/src/extensions/Blocks/Recommendation/controls/main/productLayout.d.ts +42 -0
  162. package/dist/src/extensions/Blocks/Recommendation/controls/main/shuffle.d.ts +23 -0
  163. package/dist/src/extensions/Blocks/Recommendation/controls/main/utils.d.ts +209 -0
  164. package/dist/src/extensions/Blocks/Recommendation/controls/name/index.d.ts +97 -0
  165. package/dist/src/extensions/Blocks/Recommendation/controls/name/textTrim.d.ts +16 -0
  166. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/index.d.ts +95 -0
  167. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscount/index.d.ts +100 -0
  168. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscount/textAfter.d.ts +15 -0
  169. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscount/textBefore.d.ts +15 -0
  170. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPrice/index.d.ts +100 -0
  171. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPrice/textAfter.d.ts +15 -0
  172. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPrice/textBefore.d.ts +15 -0
  173. package/dist/src/extensions/Blocks/Recommendation/controls/price/index.d.ts +95 -0
  174. package/dist/src/extensions/Blocks/Recommendation/controls/spacing/index.d.ts +83 -0
  175. package/dist/src/extensions/Blocks/Recommendation/extension.d.ts +9 -0
  176. package/dist/src/extensions/Blocks/Recommendation/services/configService.d.ts +151 -0
  177. package/dist/src/extensions/Blocks/Recommendation/services/index.d.ts +6 -0
  178. package/dist/src/extensions/Blocks/Recommendation/store/recommendation.d.ts +17 -16
  179. package/dist/src/extensions/Blocks/Recommendation/templates/horizontal/elementRenderer.d.ts +8 -0
  180. package/dist/src/extensions/Blocks/Recommendation/templates/horizontal/migration.d.ts +25 -0
  181. package/dist/src/extensions/Blocks/Recommendation/templates/horizontal/template.d.ts +18 -0
  182. package/dist/src/extensions/Blocks/Recommendation/templates/index.d.ts +39 -0
  183. package/dist/src/extensions/Blocks/Recommendation/templates/utils.d.ts +54 -0
  184. package/dist/src/extensions/Blocks/Recommendation/templates/vertical/elementRenderer.d.ts +20 -0
  185. package/dist/src/extensions/Blocks/Recommendation/templates/{migrationTemplate.d.ts → vertical/migration.d.ts} +11 -4
  186. package/dist/src/extensions/Blocks/Recommendation/templates/vertical/template.d.ts +33 -0
  187. package/dist/src/extensions/Blocks/Recommendation/types/index.d.ts +7 -0
  188. package/dist/src/extensions/Blocks/Recommendation/types/nodeConfig.d.ts +154 -0
  189. package/dist/src/extensions/Blocks/Recommendation/utils/preserveTextStyles.d.ts +19 -0
  190. package/dist/src/extensions/Blocks/Recommendation/utils/priceFormatter.d.ts +33 -0
  191. package/dist/src/extensions/Blocks/Recommendation/utils/stylePreserver.d.ts +113 -0
  192. package/dist/src/extensions/Blocks/Recommendation/utils/tagName.d.ts +77 -0
  193. package/dist/src/extensions/Blocks/common-control.d.ts +11 -10
  194. package/dist/src/stores/config.d.ts +147 -1
  195. package/dist/src/stores/editor.d.ts +21 -0
  196. package/dist/static/assets/desktop/desktop-mockup-center.svg.js +4 -0
  197. package/dist/static/assets/desktop/desktop-mockup-left.svg.js +4 -0
  198. package/dist/static/assets/desktop/desktop-mockup-right.svg.js +4 -0
  199. package/dist/static/assets/mobile/email-mockup.svg.js +4 -0
  200. package/dist/static/assets/mobile/inbox-mockup.svg.js +4 -0
  201. package/dist/static/styles/components/button.css.js +1 -1
  202. package/dist/static/styles/components/wide-panel.css.js +1 -5
  203. package/dist/static/styles/customEditorStyle.css.js +38 -2
  204. package/dist/stores/config.js +7 -0
  205. package/dist/stores/editor.js +1 -0
  206. package/dist/utils/pairProductVariables.js +58 -61
  207. package/dist/utils/templatePreparation.js +17 -17
  208. package/package.json +1 -1
  209. package/dist/components/organisms/email-preview/desktop-preview/EmailHeaderInfo.vue.js +0 -17
  210. package/dist/components/organisms/email-preview/desktop-preview/EmailHeaderInfo.vue2.js +0 -20
  211. package/dist/config/migrator/itemsBlockMigrator.js +0 -342
  212. package/dist/extensions/Blocks/Items/controls/price/singlePrice.js +0 -93
  213. package/dist/extensions/Blocks/Items/utils/nodeConfigUtils.js +0 -184
  214. package/dist/extensions/Blocks/Recommendation/cardCompositionControl.js +0 -103
  215. package/dist/extensions/Blocks/Recommendation/constants.js +0 -5
  216. package/dist/extensions/Blocks/Recommendation/control.js +0 -306
  217. package/dist/extensions/Blocks/Recommendation/controls/button/align.js +0 -13
  218. package/dist/extensions/Blocks/Recommendation/controls/button/border.js +0 -13
  219. package/dist/extensions/Blocks/Recommendation/controls/button/borderRadius.js +0 -13
  220. package/dist/extensions/Blocks/Recommendation/controls/button/color.js +0 -13
  221. package/dist/extensions/Blocks/Recommendation/controls/button/fitToContent.js +0 -13
  222. package/dist/extensions/Blocks/Recommendation/controls/button/fontFamily.js +0 -13
  223. package/dist/extensions/Blocks/Recommendation/controls/button/margins.js +0 -13
  224. package/dist/extensions/Blocks/Recommendation/controls/button/paddings.js +0 -13
  225. package/dist/extensions/Blocks/Recommendation/controls/button/text.js +0 -13
  226. package/dist/extensions/Blocks/Recommendation/controls/button/textSize.js +0 -13
  227. package/dist/extensions/Blocks/Recommendation/controls/button/textStyleAndFontColor.js +0 -13
  228. package/dist/extensions/Blocks/Recommendation/controls/image/margins.js +0 -13
  229. package/dist/extensions/Blocks/Recommendation/controls/image/size.js +0 -13
  230. package/dist/extensions/Blocks/Recommendation/controls/name/align.js +0 -13
  231. package/dist/extensions/Blocks/Recommendation/controls/name/background.js +0 -13
  232. package/dist/extensions/Blocks/Recommendation/controls/name/color.js +0 -13
  233. package/dist/extensions/Blocks/Recommendation/controls/name/fontFamily.js +0 -13
  234. package/dist/extensions/Blocks/Recommendation/controls/name/paddings.js +0 -13
  235. package/dist/extensions/Blocks/Recommendation/controls/name/size.js +0 -13
  236. package/dist/extensions/Blocks/Recommendation/controls/name/style.js +0 -13
  237. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/align.js +0 -13
  238. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/background.js +0 -13
  239. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/color.js +0 -13
  240. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/fontFamily.js +0 -13
  241. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/paddings.js +0 -13
  242. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/size.js +0 -13
  243. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/style.js +0 -13
  244. package/dist/extensions/Blocks/Recommendation/controls/price/align.js +0 -13
  245. package/dist/extensions/Blocks/Recommendation/controls/price/background.js +0 -13
  246. package/dist/extensions/Blocks/Recommendation/controls/price/color.js +0 -13
  247. package/dist/extensions/Blocks/Recommendation/controls/price/fontFamily.js +0 -13
  248. package/dist/extensions/Blocks/Recommendation/controls/price/paddings.js +0 -13
  249. package/dist/extensions/Blocks/Recommendation/controls/price/size.js +0 -13
  250. package/dist/extensions/Blocks/Recommendation/controls/price/style.js +0 -13
  251. package/dist/extensions/Blocks/Recommendation/templates/blockTemplate.js +0 -160
  252. package/dist/extensions/Blocks/Recommendation/templates/migrationTemplate.js +0 -152
  253. package/dist/extensions/Blocks/Recommendation/templates/templateUtils.js +0 -180
  254. package/dist/src/config/migrator/itemsBlockMigrator.d.ts +0 -6
  255. package/dist/src/extensions/Blocks/Items/controls/price/singlePrice.d.ts +0 -18
  256. package/dist/src/extensions/Blocks/Items/utils/nodeConfigUtils.d.ts +0 -73
  257. package/dist/src/extensions/Blocks/Recommendation/cardCompositionControl.d.ts +0 -28
  258. package/dist/src/extensions/Blocks/Recommendation/control.d.ts +0 -35
  259. package/dist/src/extensions/Blocks/Recommendation/controls/button/align.d.ts +0 -5
  260. package/dist/src/extensions/Blocks/Recommendation/controls/button/border.d.ts +0 -5
  261. package/dist/src/extensions/Blocks/Recommendation/controls/button/borderRadius.d.ts +0 -5
  262. package/dist/src/extensions/Blocks/Recommendation/controls/button/color.d.ts +0 -5
  263. package/dist/src/extensions/Blocks/Recommendation/controls/button/fitToContent.d.ts +0 -5
  264. package/dist/src/extensions/Blocks/Recommendation/controls/button/fontFamily.d.ts +0 -5
  265. package/dist/src/extensions/Blocks/Recommendation/controls/button/margins.d.ts +0 -5
  266. package/dist/src/extensions/Blocks/Recommendation/controls/button/paddings.d.ts +0 -5
  267. package/dist/src/extensions/Blocks/Recommendation/controls/button/text.d.ts +0 -5
  268. package/dist/src/extensions/Blocks/Recommendation/controls/button/textSize.d.ts +0 -5
  269. package/dist/src/extensions/Blocks/Recommendation/controls/button/textStyleAndFontColor.d.ts +0 -5
  270. package/dist/src/extensions/Blocks/Recommendation/controls/image/margins.d.ts +0 -5
  271. package/dist/src/extensions/Blocks/Recommendation/controls/image/size.d.ts +0 -5
  272. package/dist/src/extensions/Blocks/Recommendation/controls/name/align.d.ts +0 -5
  273. package/dist/src/extensions/Blocks/Recommendation/controls/name/background.d.ts +0 -5
  274. package/dist/src/extensions/Blocks/Recommendation/controls/name/color.d.ts +0 -5
  275. package/dist/src/extensions/Blocks/Recommendation/controls/name/fontFamily.d.ts +0 -5
  276. package/dist/src/extensions/Blocks/Recommendation/controls/name/paddings.d.ts +0 -5
  277. package/dist/src/extensions/Blocks/Recommendation/controls/name/size.d.ts +0 -5
  278. package/dist/src/extensions/Blocks/Recommendation/controls/name/style.d.ts +0 -5
  279. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/align.d.ts +0 -5
  280. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/background.d.ts +0 -5
  281. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/color.d.ts +0 -5
  282. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/fontFamily.d.ts +0 -5
  283. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/paddings.d.ts +0 -5
  284. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/size.d.ts +0 -5
  285. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/style.d.ts +0 -5
  286. package/dist/src/extensions/Blocks/Recommendation/controls/price/align.d.ts +0 -5
  287. package/dist/src/extensions/Blocks/Recommendation/controls/price/background.d.ts +0 -5
  288. package/dist/src/extensions/Blocks/Recommendation/controls/price/color.d.ts +0 -5
  289. package/dist/src/extensions/Blocks/Recommendation/controls/price/fontFamily.d.ts +0 -5
  290. package/dist/src/extensions/Blocks/Recommendation/controls/price/paddings.d.ts +0 -5
  291. package/dist/src/extensions/Blocks/Recommendation/controls/price/size.d.ts +0 -5
  292. package/dist/src/extensions/Blocks/Recommendation/controls/price/style.d.ts +0 -5
  293. package/dist/src/extensions/Blocks/Recommendation/templates/blockTemplate.d.ts +0 -16
  294. package/dist/src/extensions/Blocks/Recommendation/templates/templateUtils.d.ts +0 -44
  295. package/dist/static/assets/inbox-mockup.svg.js +0 -4
  296. package/dist/static/assets/phone-mockup.svg.js +0 -4
@@ -0,0 +1,222 @@
1
+ var G = Object.defineProperty;
2
+ var I = (o, n, t) => n in o ? G(o, n, { enumerable: !0, configurable: !0, writable: !0, value: t }) : o[n] = t;
3
+ var p = (o, n, t) => I(o, typeof n != "symbol" ? n + "" : n, t);
4
+ import { ModificationDescription as g } from "../../../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
5
+ import { CommonControl as L } from "../../../common-control.js";
6
+ import { SPACING_STEP as b, MAX_SPACING as y, MIN_SPACING as A, DEFAULT_COLUMN_SPACING as s, DEFAULT_ROW_SPACING as m } from "../../constants/layout.js";
7
+ import { RecommendationConfigService as d } from "../../services/configService.js";
8
+ import { useRecommendationExtensionStore as w } from "../../store/recommendation.js";
9
+ import { safeGetStyle as S, safeGetParent as V } from "../../utils/tagName.js";
10
+ import { getCurrentLayout as C } from "../main/utils.js";
11
+ import { useDebounceFn as O } from "../../../../../node_modules/@vueuse/shared/index.js";
12
+ const R = "recommendation-spacing-control", a = {
13
+ COLUMN_SPACING: "columnSpacing",
14
+ COLUMN_SPACING_LABEL: "columnSpacingLabel",
15
+ ROW_SPACING: "rowSpacing"
16
+ }, P = {
17
+ COLUMN_SPACING: "data-column-spacing",
18
+ ROW_SPACING: "data-row-spacing"
19
+ };
20
+ function N(o, n) {
21
+ if (!o)
22
+ return n;
23
+ const t = parseFloat(o);
24
+ return Number.isNaN(t) ? n : t;
25
+ }
26
+ class $ extends L {
27
+ constructor() {
28
+ super(...arguments);
29
+ p(this, "store", w());
30
+ p(this, "unsubscribeOrientation", null);
31
+ /**
32
+ * Debounced version of _onColumnSpacingChange
33
+ * Prevents excessive DOM updates when user rapidly adjusts the counter
34
+ */
35
+ p(this, "_debouncedOnColumnSpacingChange", O((t) => {
36
+ this._onColumnSpacingChange(t);
37
+ }, 300));
38
+ /**
39
+ * Debounced version of _onRowSpacingChange
40
+ * Prevents excessive DOM updates when user rapidly adjusts the counter
41
+ */
42
+ p(this, "_debouncedOnRowSpacingChange", O((t) => {
43
+ this._onRowSpacingChange(t);
44
+ }, 300));
45
+ }
46
+ getId() {
47
+ return R;
48
+ }
49
+ getTemplate() {
50
+ return `
51
+ <div class="spacing-control-container">
52
+ ${this._GuTwoColumns([
53
+ this._GuLabel({ text: "Column Spacing (px)", name: a.COLUMN_SPACING_LABEL }),
54
+ this._GuCounter({
55
+ name: a.COLUMN_SPACING,
56
+ minValue: A,
57
+ maxValue: y,
58
+ step: b
59
+ }),
60
+ this._GuLabel({ text: "Row Spacing (px)" }),
61
+ this._GuCounter({
62
+ name: a.ROW_SPACING,
63
+ minValue: A,
64
+ maxValue: y,
65
+ step: b
66
+ })
67
+ ])}
68
+ </div>
69
+ `;
70
+ }
71
+ onRender() {
72
+ this._setFormValues(), this._updateColumnSpacingVisibility(), this._listenToFormUpdates(), this._subscribeToOrientationChanges();
73
+ }
74
+ onTemplateNodeUpdated(t) {
75
+ super.onTemplateNodeUpdated(t), this._setFormValues(), this._updateColumnSpacingVisibility();
76
+ }
77
+ onDestroy() {
78
+ this.unsubscribeOrientation && (this.unsubscribeOrientation(), this.unsubscribeOrientation = null);
79
+ }
80
+ /**
81
+ * Updates column spacing visibility based on layout orientation
82
+ * Column spacing is hidden for horizontal layout (products are stacked vertically)
83
+ * Reads from node config first, falls back to store then DOM
84
+ */
85
+ _updateColumnSpacingVisibility() {
86
+ if (!this.api)
87
+ return;
88
+ const t = d.getConfig(this.currentNode), e = this.store.recommendationConfigs.orientation, i = (t.layout || e || C(this.currentNode)) === "vertical";
89
+ this.api.setVisibility(a.COLUMN_SPACING, i), this.api.setVisibility(a.COLUMN_SPACING_LABEL, i);
90
+ }
91
+ /**
92
+ * Reads spacing values from node config first, falls back to DOM styles
93
+ */
94
+ _setFormValues() {
95
+ if (!this.api)
96
+ return;
97
+ const t = d.getConfig(this.currentNode), e = t.columnSpacing !== s ? t.columnSpacing : this._getStoredColumnSpacing(), r = t.rowSpacing !== m ? t.rowSpacing : this._getStoredRowSpacing();
98
+ this.api.updateValues({
99
+ [a.COLUMN_SPACING]: e,
100
+ [a.ROW_SPACING]: r
101
+ });
102
+ }
103
+ /**
104
+ * Gets stored column spacing from the first attribute row cell's padding.
105
+ * For vertical layout: cells inside .recommendation-attribute-row have padding applied.
106
+ * For horizontal layout: the parent of .product-card-wrapper has the padding.
107
+ * The padding is applied as "0 {halfSpacing}px", so we extract and multiply by 2.
108
+ */
109
+ _getStoredColumnSpacing() {
110
+ if (!this.currentNode)
111
+ return s;
112
+ if (C(this.currentNode) === "vertical") {
113
+ const l = this.currentNode.querySelector(".recommendation-attribute-row"), c = l == null ? void 0 : l.querySelector("td"), f = S(c, "padding");
114
+ if (!f)
115
+ return s;
116
+ const _ = f.trim().split(/\s+/);
117
+ return _.length < 2 ? s : N(_[1], s / 2) * 2;
118
+ }
119
+ const e = this.currentNode.querySelector(".product-card-wrapper"), r = V(e), i = S(r, "padding");
120
+ if (!i)
121
+ return s;
122
+ const u = i.trim().split(/\s+/);
123
+ return u.length < 2 ? s : N(u[1], s / 2) * 2;
124
+ }
125
+ /**
126
+ * Gets stored row spacing from the first spacer element's height style
127
+ */
128
+ _getStoredRowSpacing() {
129
+ if (!this.currentNode)
130
+ return m;
131
+ const t = this.currentNode.querySelector(".spacer"), e = S(t, "height");
132
+ return N(e, m);
133
+ }
134
+ /**
135
+ * Handles column spacing changes.
136
+ * For vertical layout: applies horizontal padding to all cells inside attribute rows.
137
+ * For horizontal layout: applies padding to parent of product card wrappers.
138
+ */
139
+ _onColumnSpacingChange(t) {
140
+ if (!this.currentNode)
141
+ return;
142
+ d.updateConfig(
143
+ this.api,
144
+ this.currentNode,
145
+ { columnSpacing: t },
146
+ `Changed column spacing to ${t}px`
147
+ ), this._storeColumnSpacing(t);
148
+ const r = d.getConfig(this.currentNode).layout || C(this.currentNode), i = this.api.getDocumentModifier(), h = `0 ${t / 2}px`;
149
+ r === "vertical" ? Array.from(
150
+ this.currentNode.querySelectorAll(".attribute-cell")
151
+ ).forEach((c) => {
152
+ i.modifyHtml(c).setStyle("padding", h);
153
+ }) : Array.from(
154
+ this.currentNode.querySelectorAll(".product-card-wrapper")
155
+ ).forEach((c) => {
156
+ "parent" in c && c.parent() && i.modifyHtml(c.parent()).setStyle("padding", h);
157
+ }), i.apply(new g(`Update column spacing to ${t}px`));
158
+ }
159
+ /**
160
+ * Handles row spacing changes
161
+ * Applies height to all spacer elements between product rows
162
+ */
163
+ _onRowSpacingChange(t) {
164
+ if (!this.currentNode)
165
+ return;
166
+ d.updateConfig(
167
+ this.api,
168
+ this.currentNode,
169
+ { rowSpacing: t },
170
+ `Changed row spacing to ${t}px`
171
+ ), this._storeRowSpacing(t);
172
+ const e = Array.from(
173
+ this.currentNode.querySelectorAll(".spacer")
174
+ );
175
+ if (!e.length)
176
+ return;
177
+ const r = this.api.getDocumentModifier(), i = `${t}px`;
178
+ e.forEach((u) => {
179
+ r.modifyHtml(u).setStyle("height", i);
180
+ }), r.apply(new g(`Update row spacing to ${t}px`));
181
+ }
182
+ /**
183
+ * Stores column spacing value in block data attribute
184
+ */
185
+ _storeColumnSpacing(t) {
186
+ if (!this.currentNode)
187
+ return;
188
+ const e = this.currentNode.querySelector(".ins-recommendation-v3-block-v2");
189
+ e && this.api.getDocumentModifier().modifyHtml(e).setAttribute(P.COLUMN_SPACING, t.toString()).apply(new g("Store column spacing"));
190
+ }
191
+ /**
192
+ * Stores row spacing value in block data attribute
193
+ */
194
+ _storeRowSpacing(t) {
195
+ if (!this.currentNode)
196
+ return;
197
+ const e = this.currentNode.querySelector(".ins-recommendation-v3-block-v2");
198
+ e && this.api.getDocumentModifier().modifyHtml(e).setAttribute(P.ROW_SPACING, t.toString()).apply(new g("Store row spacing"));
199
+ }
200
+ _listenToFormUpdates() {
201
+ this.api.onValueChanged(a.COLUMN_SPACING, (t) => {
202
+ const e = parseInt(t);
203
+ Number.isNaN(e) || this._debouncedOnColumnSpacingChange(e);
204
+ }), this.api.onValueChanged(a.ROW_SPACING, (t) => {
205
+ const e = parseInt(t);
206
+ Number.isNaN(e) || this._debouncedOnRowSpacingChange(e);
207
+ });
208
+ }
209
+ /**
210
+ * Subscribe to store orientation changes
211
+ * Updates column spacing visibility when layout changes via the layout control
212
+ */
213
+ _subscribeToOrientationChanges() {
214
+ this.unsubscribeOrientation && this.unsubscribeOrientation(), this.unsubscribeOrientation = this.store.$subscribe((t) => {
215
+ t.type === "patch object" && this._updateColumnSpacingVisibility();
216
+ });
217
+ }
218
+ }
219
+ export {
220
+ R as SPACING_CONTROL_ID,
221
+ $ as SpacingControl
222
+ };
@@ -1,45 +1,42 @@
1
- import { ExtensionBuilder as o } from "../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
2
- import { RecommendationBlock as r } from "./block.js";
3
- import { RecommendationCardCompositionControl as t } from "./cardCompositionControl.js";
4
- import { RecommendationBlockControl as n } from "./control.js";
5
- import { ButtonAlignControl as d } from "./controls/button/align.js";
6
- import { ButtonBorderControl as l } from "./controls/button/border.js";
7
- import { ButtonBorderRadiusControl as m } from "./controls/button/borderRadius.js";
8
- import { ButtonColorControl as i } from "./controls/button/color.js";
9
- import { ButtonFitToContentControl as C } from "./controls/button/fitToContent.js";
10
- import { ButtonFontFamilyControl as a } from "./controls/button/fontFamily.js";
11
- import { ButtonMarginsControl as e } from "./controls/button/margins.js";
12
- import { ButtonPaddingsControl as p } from "./controls/button/paddings.js";
13
- import { ButtonTextControl as f } from "./controls/button/text.js";
14
- import { ButtonTextSizeControl as c } from "./controls/button/textSize.js";
15
- import { ButtonTextStyleAndFontColorControl as s } from "./controls/button/textStyleAndFontColor.js";
16
- import { ImageMarginsControl as g } from "./controls/image/margins.js";
17
- import { ImageSizeControl as B } from "./controls/image/size.js";
18
- import { NameAlignControl as P } from "./controls/name/align.js";
19
- import { NameBackgroundControl as u } from "./controls/name/background.js";
20
- import { NameColorControl as y } from "./controls/name/color.js";
21
- import { NameFontFamilyControl as S } from "./controls/name/fontFamily.js";
22
- import { NamePaddingsControl as F } from "./controls/name/paddings.js";
23
- import { NameSizeControl as R } from "./controls/name/size.js";
24
- import { NameStyleControl as N } from "./controls/name/style.js";
25
- import { OldPriceAlignControl as O } from "./controls/oldPrice/align.js";
26
- import { OldPriceBackgroundControl as k } from "./controls/oldPrice/background.js";
27
- import { OldPriceColorControl as x } from "./controls/oldPrice/color.js";
28
- import { OldPriceFontFamilyControl as z } from "./controls/oldPrice/fontFamily.js";
29
- import { OldPricePaddingsControl as A } from "./controls/oldPrice/paddings.js";
30
- import { OldPriceSizeControl as I } from "./controls/oldPrice/size.js";
31
- import { OldPriceStyleControl as T } from "./controls/oldPrice/style.js";
32
- import { PriceAlignControl as w } from "./controls/price/align.js";
33
- import { PriceBackgroundControl as h } from "./controls/price/background.js";
34
- import { PriceColorControl as M } from "./controls/price/color.js";
35
- import { PriceFontFamilyControl as b } from "./controls/price/fontFamily.js";
36
- import { PricePaddingsControl as E } from "./controls/price/paddings.js";
37
- import { PriceSizeControl as j } from "./controls/price/size.js";
38
- import { PriceStyleControl as q } from "./controls/price/style.js";
39
- import { RecommendationIconsRegistry as v } from "./iconsRegistry.js";
40
- import D from "./recommendation.css.js";
41
- import { SettingsPanel as G } from "./settingsPanel.js";
42
- const Io = new o().addBlock(r).withSettingsPanelRegistry(G).addControl(n).addControl(d).addControl(l).addControl(m).addControl(i).addControl(C).addControl(a).addControl(e).addControl(p).addControl(f).addControl(c).addControl(s).addControl(g).addControl(B).addControl(P).addControl(u).addControl(y).addControl(S).addControl(F).addControl(R).addControl(N).addControl(O).addControl(k).addControl(x).addControl(z).addControl(A).addControl(I).addControl(T).addControl(w).addControl(h).addControl(M).addControl(b).addControl(E).addControl(j).addControl(q).addControl(t).addStyles(D).withIconsRegistry(v).build();
1
+ import { ExtensionBuilder as r } from "../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
2
+ import { RecommendationBlock as m } from "./block.js";
3
+ import { RecommendationBlockControl as n } from "./controls/main/index.js";
4
+ import "./store/recommendation.js";
5
+ import { NameControls as i } from "./controls/name/index.js";
6
+ import { PriceControls as e } from "./controls/price/index.js";
7
+ import { OldPriceControls as l } from "./controls/oldPrice/index.js";
8
+ import { OmnibusPriceControls as s } from "./controls/omnibusPrice/index.js";
9
+ import { OmnibusDiscountControls as a } from "./controls/omnibusDiscount/index.js";
10
+ import { ButtonControls as p } from "./controls/button/index.js";
11
+ import { ImageControls as c } from "./controls/image/index.js";
12
+ import { SpacingControl as C } from "./controls/spacing/index.js";
13
+ import { CardBackgroundColorControl as d } from "./controls/cardBackground/index.js";
14
+ import { LayoutControl as f } from "./controls/layout/index.js";
15
+ import { RecommendationCardCompositionControl as u } from "./controls/cardComposition/index.js";
16
+ import { RecommendationIconsRegistry as g } from "./iconsRegistry.js";
17
+ import R from "./recommendation.css.js";
18
+ import { SettingsPanel as y } from "./settingsPanel.js";
19
+ const B = [
20
+ i,
21
+ e,
22
+ l,
23
+ s,
24
+ a,
25
+ p,
26
+ c
27
+ ], P = [
28
+ n,
29
+ d,
30
+ f,
31
+ C,
32
+ u
33
+ ], b = [
34
+ ...P,
35
+ ...B.flatMap((o) => Object.values(o))
36
+ ], F = b.reduce(
37
+ (o, t) => o.addControl(t),
38
+ new r().addBlock(m).withSettingsPanelRegistry(y)
39
+ ).addStyles(R).withIconsRegistry(g).build();
43
40
  export {
44
- Io as default
41
+ F as default
45
42
  };
@@ -1,18 +1,27 @@
1
1
  const n = `/* Utils */
2
2
  .es-180w { width: 180px; }
3
3
 
4
- /* Recommendation Controls */
5
- .recommendation-controls-container > .container {
6
- padding: 16px;
4
+ /* Recommendation Controls - Main settings panel separators */
5
+ .recommendation-controls-container > div {
6
+ border-bottom: 1px solid #e0e0e0;
7
7
  }
8
8
 
9
- .recommendation-controls-container > .container:first-child {
9
+ .recommendation-controls-container > div:first-child {
10
10
  padding-top: 0;
11
11
  }
12
12
 
13
+ .recommendation-controls-container > div:last-child {
14
+ border-bottom: none;
15
+ }
16
+
13
17
  .container:has(.recommendation-controls-container) {
14
18
  padding: 0
15
19
  }
20
+
21
+ /* Hide drag icon for horizontal layout (ordering disabled) */
22
+ ue-orderable.orderable-disabled .droppable-icon {
23
+ display: none;
24
+ }
16
25
  `;
17
26
  export {
18
27
  n as default
@@ -0,0 +1,239 @@
1
+ import { ModificationDescription as f } from "../../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
2
+ import { CURRENT_CONFIG_VERSION as u, DEFAULT_NODE_CONFIG as e } from "../constants/defaultConfig.js";
3
+ import { setCurrencyAttributes as g } from "../controls/main/utils.js";
4
+ import { hasMinimalConfig as a } from "../types/nodeConfig.js";
5
+ class y {
6
+ // ========================================================================
7
+ // Read Operations
8
+ // ========================================================================
9
+ /**
10
+ * Get configuration from a node, with defaults for missing values
11
+ *
12
+ * This is the primary way to read configuration from a block.
13
+ * Always returns a complete config object with defaults merged in.
14
+ * @example
15
+ * const config = RecommendationConfigService.getConfig(this.currentNode);
16
+ * console.log(config.strategy); // 'mostPopular'
17
+ * @param node - The immutable HTML node to read config from
18
+ * @returns Complete configuration with defaults for missing values
19
+ */
20
+ static getConfig(i) {
21
+ if (!i)
22
+ return this.cloneDefaults();
23
+ if (!("getNodeConfig" in i) || typeof i.getNodeConfig != "function")
24
+ return this.cloneDefaults();
25
+ try {
26
+ const t = i.getNodeConfig();
27
+ return t ? this.mergeWithDefaults(t) : this.cloneDefaults();
28
+ } catch {
29
+ return this.cloneDefaults();
30
+ }
31
+ }
32
+ /**
33
+ * Check if a node has valid configuration stored
34
+ *
35
+ * Used for migration detection - returns false for legacy templates
36
+ * that need their configuration migrated.
37
+ * @param node - The immutable HTML node to check
38
+ * @returns True if node has valid config with version number
39
+ */
40
+ static hasConfig(i) {
41
+ if (!i || !("getNodeConfig" in i) || typeof i.getNodeConfig != "function")
42
+ return !1;
43
+ try {
44
+ const t = i.getNodeConfig();
45
+ return a(t);
46
+ } catch {
47
+ return !1;
48
+ }
49
+ }
50
+ /**
51
+ * Get the configuration version from a node
52
+ * @param node - The immutable HTML node to check
53
+ * @returns Config version number, or 0 if no config exists
54
+ */
55
+ static getConfigVersion(i) {
56
+ return this.hasConfig(i) && this.getConfig(i).configVersion || 0;
57
+ }
58
+ // ========================================================================
59
+ // Write Operations
60
+ // ========================================================================
61
+ /**
62
+ * Update specific configuration values
63
+ *
64
+ * Merges the updates with existing config and persists to node.
65
+ * This is the primary way to update configuration from controls.
66
+ * @example
67
+ * RecommendationConfigService.updateConfig(
68
+ * this.api,
69
+ * this.currentNode,
70
+ * { strategy: 'complementaryItems' },
71
+ * 'Changed recommendation algorithm'
72
+ * );
73
+ * @param api - Stripo extension API with document modifier
74
+ * @param node - The immutable HTML node to update
75
+ * @param updates - Partial config with values to update
76
+ * @param description - Human-readable description for undo/redo
77
+ * @returns The new complete configuration
78
+ */
79
+ static updateConfig(i, t, o, n) {
80
+ const s = this.getConfig(t), c = this.deepMerge(s, o);
81
+ return this.saveConfig(i, t, c, n), c;
82
+ }
83
+ /**
84
+ * Initialize configuration for a new block
85
+ *
86
+ * Called when a block is first created (dropped into template).
87
+ * Can optionally merge in partial config from migration.
88
+ * @example
89
+ * // In Block.onCreated lifecycle
90
+ * RecommendationConfigService.initializeConfig(this.api, node);
91
+ * @param api - Stripo extension API with document modifier
92
+ * @param node - The immutable HTML node to initialize
93
+ * @param partialConfig - Optional partial config to merge with defaults
94
+ * @returns The initialized configuration
95
+ */
96
+ static initializeConfig(i, t, o) {
97
+ const n = o ? this.mergeWithDefaults(o) : this.cloneDefaults();
98
+ return this.saveConfig(i, t, n, "Initialize recommendation block"), g({
99
+ currentNode: t,
100
+ documentModifier: i.getDocumentModifier(),
101
+ currency: n.currency
102
+ }), n;
103
+ }
104
+ /**
105
+ * Save complete configuration to a node
106
+ *
107
+ * Low-level method - prefer `updateConfig` or `initializeConfig` in most cases.
108
+ * @param api - Stripo extension API with document modifier
109
+ * @param node - The immutable HTML node to save to
110
+ * @param config - Complete configuration to save
111
+ * @param description - Human-readable description for undo/redo
112
+ */
113
+ static saveConfig(i, t, o, n) {
114
+ try {
115
+ i.getDocumentModifier().modifyHtml(t).setNodeConfig(o).apply(new f(n));
116
+ } catch (s) {
117
+ console.warn("[RecommendationConfigService] Failed to save config:", s);
118
+ }
119
+ }
120
+ // ========================================================================
121
+ // Migration Helpers
122
+ // ========================================================================
123
+ /**
124
+ * Migrate configuration from legacy data-attributes
125
+ *
126
+ * Reads existing data-attributes and creates a proper node config.
127
+ * Used when loading templates created before node config was implemented.
128
+ * @param api - Stripo extension API with document modifier
129
+ * @param node - The block node to migrate
130
+ * @returns The migrated configuration
131
+ */
132
+ static migrateFromDataAttributes(i, t) {
133
+ const o = {
134
+ configVersion: u
135
+ };
136
+ if ("getAttribute" in t && typeof t.getAttribute == "function") {
137
+ const n = t.getAttribute("data-layout");
138
+ (n === "horizontal" || n === "vertical") && (o.layout = n);
139
+ const s = t.getAttribute("data-card-composition");
140
+ s && (o.composition = s.split(",").filter(Boolean));
141
+ const c = t.getAttribute("data-column-spacing");
142
+ c && (o.columnSpacing = parseInt(c) || e.columnSpacing);
143
+ const r = t.getAttribute("data-row-spacing");
144
+ r && (o.rowSpacing = parseInt(r) || e.rowSpacing);
145
+ }
146
+ return this.initializeConfig(i, t, o);
147
+ }
148
+ /**
149
+ * Check if configuration needs migration
150
+ * @param node - The block node to check
151
+ * @returns True if migration is needed
152
+ */
153
+ static needsMigration(i) {
154
+ return i ? this.hasConfig(i) ? this.getConfigVersion(i) < u : !0 : !1;
155
+ }
156
+ // ========================================================================
157
+ // Internal Helpers
158
+ // ========================================================================
159
+ /**
160
+ * Clone default config to avoid mutations
161
+ */
162
+ static cloneDefaults() {
163
+ return {
164
+ ...e,
165
+ currency: { ...e.currency },
166
+ omnibusPrice: { ...e.omnibusPrice },
167
+ omnibusDiscount: { ...e.omnibusDiscount },
168
+ composition: [...e.composition],
169
+ visibility: { ...e.visibility },
170
+ filters: [],
171
+ productIds: []
172
+ };
173
+ }
174
+ /**
175
+ * Merge partial config with defaults
176
+ *
177
+ * Deep merges nested objects like currency, omnibus settings.
178
+ */
179
+ static mergeWithDefaults(i) {
180
+ const t = this.cloneDefaults();
181
+ return {
182
+ ...t,
183
+ ...i,
184
+ currency: {
185
+ ...t.currency,
186
+ ...i.currency || {}
187
+ },
188
+ omnibusPrice: {
189
+ ...t.omnibusPrice,
190
+ ...i.omnibusPrice || {}
191
+ },
192
+ omnibusDiscount: {
193
+ ...t.omnibusDiscount,
194
+ ...i.omnibusDiscount || {}
195
+ },
196
+ visibility: {
197
+ ...t.visibility,
198
+ ...i.visibility || {}
199
+ },
200
+ composition: i.composition || t.composition,
201
+ filters: i.filters || [],
202
+ productIds: i.productIds || []
203
+ };
204
+ }
205
+ /**
206
+ * Deep merge for nested objects
207
+ *
208
+ * Recursively merges source into target, preserving existing values
209
+ * that aren't explicitly overwritten.
210
+ */
211
+ static deepMerge(i, t) {
212
+ return {
213
+ ...i,
214
+ ...t,
215
+ currency: {
216
+ ...i.currency,
217
+ ...t.currency || {}
218
+ },
219
+ omnibusPrice: {
220
+ ...i.omnibusPrice,
221
+ ...t.omnibusPrice || {}
222
+ },
223
+ omnibusDiscount: {
224
+ ...i.omnibusDiscount,
225
+ ...t.omnibusDiscount || {}
226
+ },
227
+ visibility: {
228
+ ...i.visibility,
229
+ ...t.visibility || {}
230
+ },
231
+ composition: t.composition ?? i.composition,
232
+ filters: t.filters ?? i.filters,
233
+ productIds: t.productIds ?? i.productIds
234
+ };
235
+ }
236
+ }
237
+ export {
238
+ y as RecommendationConfigService
239
+ };