@useinsider/guido 3.2.0-beta.570fb6d → 3.2.0-beta.5ac6ac6

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 (319) hide show
  1. package/README.md +92 -0
  2. package/dist/@types/config/schemas.js +150 -94
  3. package/dist/@types/config/validator.js +34 -27
  4. package/dist/components/Guido.vue.js +1 -1
  5. package/dist/components/Guido.vue2.js +94 -88
  6. package/dist/components/organisms/base/Toaster.vue2.js +11 -10
  7. package/dist/components/organisms/email-preview/desktop-preview/DesktopPreview.vue2.js +12 -12
  8. package/dist/components/organisms/email-preview/mobile-preview/ContentView.vue2.js +6 -6
  9. package/dist/components/organisms/email-preview/mobile-preview/InboxView.vue2.js +15 -9
  10. package/dist/components/organisms/extensions/recommendation/FilterItem.vue2.js +40 -31
  11. package/dist/components/organisms/extensions/recommendation/FilterSelectionDrawer.vue2.js +20 -19
  12. package/dist/components/organisms/extensions/recommendation/Filters.vue2.js +14 -11
  13. package/dist/components/organisms/header/EditorActions.vue.js +12 -11
  14. package/dist/components/organisms/header/EditorActions.vue2.js +22 -18
  15. package/dist/components/organisms/header/HeaderWrapper.vue2.js +15 -12
  16. package/dist/components/organisms/header/LeftSlot.vue2.js +19 -16
  17. package/dist/components/organisms/header/MiddleSlot.vue2.js +11 -14
  18. package/dist/components/organisms/header/RightSlot.vue2.js +17 -14
  19. package/dist/components/organisms/onboarding/AMPOnboarding.vue.js +12 -11
  20. package/dist/components/organisms/onboarding/AMPOnboarding.vue2.js +51 -29
  21. package/dist/components/organisms/onboarding/GenericOnboarding.vue.js +13 -12
  22. package/dist/components/organisms/onboarding/GenericOnboarding.vue2.js +44 -40
  23. package/dist/components/organisms/onboarding/ItemsOnboarding.vue.js +13 -12
  24. package/dist/components/organisms/onboarding/ItemsOnboarding.vue2.js +50 -47
  25. package/dist/components/organisms/onboarding/NewVersionPopup.vue2.js +21 -18
  26. package/dist/components/organisms/onboarding/OnboardingWrapper.vue2.js +31 -27
  27. package/dist/components/organisms/onboarding/TextBlockOnboarding.vue.js +13 -12
  28. package/dist/components/organisms/onboarding/TextBlockOnboarding.vue2.js +35 -44
  29. package/dist/components/organisms/onboarding/VersionHistoryOnboarding.vue.js +12 -11
  30. package/dist/components/organisms/onboarding/VersionHistoryOnboarding.vue2.js +23 -20
  31. package/dist/components/organisms/save-as-template/SaveAsTemplateDrawer.vue2.js +9 -8
  32. package/dist/components/organisms/unsubscribe/UnsubscribeWrapper.vue.js +10 -9
  33. package/dist/composables/useActionsApi.js +38 -37
  34. package/dist/composables/useBlocksConfig.js +26 -26
  35. package/dist/composables/useFullStoryBridge.js +9 -8
  36. package/dist/composables/useHtmlCompiler.js +26 -34
  37. package/dist/composables/useHtmlValidator.js +109 -101
  38. package/dist/composables/useHttp.js +30 -30
  39. package/dist/composables/usePartner.js +1 -1
  40. package/dist/composables/useRecommendation.js +46 -25
  41. package/dist/composables/useRibbonOffset.js +21 -0
  42. package/dist/composables/useSave.js +23 -19
  43. package/dist/composables/useStripo.js +48 -53
  44. package/dist/composables/useSyncModuleExtractor.js +29 -31
  45. package/dist/composables/useTimerClone.js +25 -24
  46. package/dist/composables/useTranslations.js +16 -23
  47. package/dist/composables/useValidation.js +8 -7
  48. package/dist/composables/validators/useCouponBlockValidator.js +24 -0
  49. package/dist/composables/validators/useLiquidValidator.js +13 -13
  50. package/dist/config/compiler/recommendationCompilerRules.js +27 -27
  51. package/dist/config/compiler/unsubscribeCompilerRules.js +19 -17
  52. package/dist/config/compiler/utils/recommendationCompilerUtils.js +11 -10
  53. package/dist/config/migrator/checkboxMigrator.js +21 -20
  54. package/dist/config/migrator/couponBlockMigrator.js +19 -18
  55. package/dist/config/migrator/index.js +9 -9
  56. package/dist/config/migrator/itemsBlockMigrator.js +89 -87
  57. package/dist/config/migrator/radioButtonMigrator.js +63 -42
  58. package/dist/config/migrator/recommendation/compositionMapper.js +98 -0
  59. package/dist/config/migrator/recommendation/extractors.js +27 -0
  60. package/dist/config/migrator/recommendation/htmlBuilder.js +496 -0
  61. package/dist/config/migrator/recommendation/parseLegacyConfig.js +33 -0
  62. package/dist/config/migrator/recommendation/settingsMapper.js +78 -0
  63. package/dist/config/migrator/recommendation/themeMapper.js +93 -0
  64. package/dist/config/migrator/recommendationMigrator.js +74 -287
  65. package/dist/config/migrator/unsubscribeMigrator.js +11 -10
  66. package/dist/enums/extensions/recommendationBlock.js +2 -1
  67. package/dist/enums/onboarding.js +7 -2
  68. package/dist/enums/unsubscribe.js +19 -18
  69. package/dist/extensions/Blocks/Items/block.js +9 -9
  70. package/dist/extensions/Blocks/Items/controls/button/link.js +14 -14
  71. package/dist/extensions/Blocks/Items/controls/cardComposition.js +97 -89
  72. package/dist/extensions/Blocks/Items/controls/image/link.js +14 -14
  73. package/dist/extensions/Blocks/Items/controls/name/trimming.js +24 -23
  74. package/dist/extensions/Blocks/Items/controls/price/currencyLocation.js +14 -13
  75. package/dist/extensions/Blocks/Items/controls/price/currencySymbol.js +47 -44
  76. package/dist/extensions/Blocks/Items/controls/price/formattedPrice.js +38 -38
  77. package/dist/extensions/Blocks/Items/controls/price/hideDiscount.js +11 -11
  78. package/dist/extensions/Blocks/Items/controls/price/priceOrientation.js +40 -38
  79. package/dist/extensions/Blocks/Items/controls/price/singlePrice.js +35 -35
  80. package/dist/extensions/Blocks/Items/controls/settingsControl.js +162 -155
  81. package/dist/extensions/Blocks/Items/enums/productEnums.js +14 -9
  82. package/dist/extensions/Blocks/Items/template.js +210 -210
  83. package/dist/extensions/Blocks/RadioButton/template.js +1 -1
  84. package/dist/extensions/Blocks/Recommendation/block.js +35 -32
  85. package/dist/extensions/Blocks/Recommendation/constants/defaultConfig.js +5 -5
  86. package/dist/extensions/Blocks/Recommendation/controls/button/index.js +36 -36
  87. package/dist/extensions/Blocks/Recommendation/controls/cardComposition/index.js +133 -128
  88. package/dist/extensions/Blocks/Recommendation/controls/customAttribute/index.js +9 -9
  89. package/dist/extensions/Blocks/Recommendation/controls/customAttribute/textTrim.js +10 -10
  90. package/dist/extensions/Blocks/Recommendation/controls/image/index.js +9 -9
  91. package/dist/extensions/Blocks/Recommendation/controls/main/algorithm.js +18 -17
  92. package/dist/extensions/Blocks/Recommendation/controls/main/filters.js +6 -4
  93. package/dist/extensions/Blocks/Recommendation/controls/main/index.js +90 -82
  94. package/dist/extensions/Blocks/Recommendation/controls/main/layoutOrientation.js +18 -18
  95. package/dist/extensions/Blocks/Recommendation/controls/main/productCount.js +4 -4
  96. package/dist/extensions/Blocks/Recommendation/controls/main/productLayout.js +36 -35
  97. package/dist/extensions/Blocks/Recommendation/controls/main/utils.js +240 -192
  98. package/dist/extensions/Blocks/Recommendation/controls/name/index.js +24 -24
  99. package/dist/extensions/Blocks/Recommendation/controls/name/textTrim.js +10 -10
  100. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/index.js +24 -24
  101. package/dist/extensions/Blocks/Recommendation/controls/omnibusDiscount/index.js +24 -24
  102. package/dist/extensions/Blocks/Recommendation/controls/omnibusDiscount/textAfter.js +4 -4
  103. package/dist/extensions/Blocks/Recommendation/controls/omnibusDiscount/textBefore.js +4 -4
  104. package/dist/extensions/Blocks/Recommendation/controls/omnibusPrice/index.js +24 -24
  105. package/dist/extensions/Blocks/Recommendation/controls/omnibusPrice/textAfter.js +4 -4
  106. package/dist/extensions/Blocks/Recommendation/controls/omnibusPrice/textBefore.js +4 -4
  107. package/dist/extensions/Blocks/Recommendation/controls/price/index.js +24 -24
  108. package/dist/extensions/Blocks/Recommendation/controls/spacing/index.js +32 -32
  109. package/dist/extensions/Blocks/Recommendation/controls/syncInfoMessage.js +20 -18
  110. package/dist/extensions/Blocks/Recommendation/extension.js +32 -31
  111. package/dist/extensions/Blocks/Recommendation/services/configService.js +65 -29
  112. package/dist/extensions/Blocks/Recommendation/settingsPanel.js +16 -8
  113. package/dist/extensions/Blocks/Recommendation/store/recommendation.js +150 -109
  114. package/dist/extensions/Blocks/Recommendation/templates/grid/elementRenderer.js +23 -22
  115. package/dist/extensions/Blocks/Recommendation/templates/grid/template.js +10 -10
  116. package/dist/extensions/Blocks/Recommendation/templates/index.js +6 -6
  117. package/dist/extensions/Blocks/Recommendation/templates/list/elementRenderer.js +25 -24
  118. package/dist/extensions/Blocks/Recommendation/templates/list/template.js +1 -1
  119. package/dist/extensions/Blocks/Recommendation/templates/utils.js +47 -45
  120. package/dist/extensions/Blocks/Recommendation/utils/preserveTextStyles.js +13 -22
  121. package/dist/extensions/Blocks/Recommendation/validation/filterSchema.js +16 -13
  122. package/dist/extensions/Blocks/Unsubscribe/control.js +13 -11
  123. package/dist/extensions/Blocks/Unsubscribe/elements/preview.js +18 -16
  124. package/dist/extensions/Blocks/common-control.js +26 -25
  125. package/dist/extensions/DynamicContent/dynamic-content.js +58 -53
  126. package/dist/guido.css +1 -1
  127. package/dist/library.js +12 -11
  128. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js +286 -262
  129. package/dist/node_modules/lodash-es/_DataView.js +6 -0
  130. package/dist/node_modules/lodash-es/_Hash.js +20 -0
  131. package/dist/node_modules/lodash-es/_ListCache.js +20 -0
  132. package/dist/node_modules/lodash-es/_Map.js +6 -0
  133. package/dist/node_modules/lodash-es/_MapCache.js +20 -0
  134. package/dist/node_modules/lodash-es/_Promise.js +6 -0
  135. package/dist/node_modules/lodash-es/_Set.js +6 -0
  136. package/dist/node_modules/lodash-es/_SetCache.js +13 -0
  137. package/dist/node_modules/lodash-es/_Stack.js +18 -0
  138. package/dist/node_modules/lodash-es/_Symbol.js +5 -0
  139. package/dist/node_modules/lodash-es/_Uint8Array.js +5 -0
  140. package/dist/node_modules/lodash-es/_WeakMap.js +6 -0
  141. package/dist/node_modules/lodash-es/_arrayFilter.js +10 -0
  142. package/dist/node_modules/lodash-es/_arrayLikeKeys.js +20 -0
  143. package/dist/node_modules/lodash-es/_arrayMap.js +8 -0
  144. package/dist/node_modules/lodash-es/_arrayPush.js +8 -0
  145. package/dist/node_modules/lodash-es/_arraySome.js +9 -0
  146. package/dist/node_modules/lodash-es/_assocIndexOf.js +10 -0
  147. package/dist/node_modules/lodash-es/_baseEach.js +6 -0
  148. package/dist/node_modules/lodash-es/_baseFlatten.js +13 -0
  149. package/dist/node_modules/lodash-es/_baseFor.js +5 -0
  150. package/dist/node_modules/lodash-es/_baseForOwn.js +8 -0
  151. package/dist/node_modules/lodash-es/_baseGet.js +11 -0
  152. package/dist/node_modules/lodash-es/_baseGetAllKeys.js +9 -0
  153. package/dist/node_modules/lodash-es/_baseGetTag.js +10 -0
  154. package/dist/node_modules/lodash-es/_baseHasIn.js +6 -0
  155. package/dist/node_modules/lodash-es/_baseIsArguments.js +9 -0
  156. package/dist/node_modules/lodash-es/_baseIsEqual.js +8 -0
  157. package/dist/node_modules/lodash-es/_baseIsEqualDeep.js +32 -0
  158. package/dist/node_modules/lodash-es/_baseIsMatch.js +29 -0
  159. package/dist/node_modules/lodash-es/_baseIsNative.js +16 -0
  160. package/dist/node_modules/lodash-es/_baseIsTypedArray.js +12 -0
  161. package/dist/node_modules/lodash-es/_baseIteratee.js +11 -0
  162. package/dist/node_modules/lodash-es/_baseKeys.js +14 -0
  163. package/dist/node_modules/lodash-es/_baseMap.js +11 -0
  164. package/dist/node_modules/lodash-es/_baseMatches.js +12 -0
  165. package/dist/node_modules/lodash-es/_baseMatchesProperty.js +17 -0
  166. package/dist/node_modules/lodash-es/_baseProperty.js +8 -0
  167. package/dist/node_modules/lodash-es/_basePropertyDeep.js +9 -0
  168. package/dist/node_modules/lodash-es/_baseRange.js +9 -0
  169. package/dist/node_modules/lodash-es/_baseTimes.js +8 -0
  170. package/dist/node_modules/lodash-es/_baseToString.js +18 -0
  171. package/dist/node_modules/lodash-es/_baseTrim.js +8 -0
  172. package/dist/node_modules/lodash-es/_baseUnary.js +8 -0
  173. package/dist/node_modules/lodash-es/_cacheHas.js +6 -0
  174. package/dist/node_modules/lodash-es/_castPath.js +10 -0
  175. package/dist/node_modules/lodash-es/_coreJsData.js +5 -0
  176. package/dist/node_modules/lodash-es/_createBaseEach.js +15 -0
  177. package/dist/node_modules/lodash-es/_createBaseFor.js +13 -0
  178. package/dist/node_modules/lodash-es/_createRange.js +11 -0
  179. package/dist/node_modules/lodash-es/_equalArrays.js +40 -0
  180. package/dist/node_modules/lodash-es/_equalByTag.js +45 -0
  181. package/dist/node_modules/lodash-es/_equalObjects.js +36 -0
  182. package/dist/node_modules/lodash-es/_freeGlobal.js +4 -0
  183. package/dist/node_modules/lodash-es/_getAllKeys.js +9 -0
  184. package/dist/node_modules/lodash-es/_getMapData.js +8 -0
  185. package/dist/node_modules/lodash-es/_getMatchData.js +12 -0
  186. package/dist/node_modules/lodash-es/_getNative.js +9 -0
  187. package/dist/node_modules/lodash-es/_getRawTag.js +15 -0
  188. package/dist/node_modules/lodash-es/_getSymbols.js +10 -0
  189. package/dist/node_modules/lodash-es/_getTag.js +28 -0
  190. package/dist/node_modules/lodash-es/_getValue.js +6 -0
  191. package/dist/node_modules/lodash-es/_hasPath.js +19 -0
  192. package/dist/node_modules/lodash-es/_hashClear.js +7 -0
  193. package/dist/node_modules/lodash-es/_hashDelete.js +7 -0
  194. package/dist/node_modules/lodash-es/_hashGet.js +13 -0
  195. package/dist/node_modules/lodash-es/_hashHas.js +9 -0
  196. package/dist/node_modules/lodash-es/_hashSet.js +9 -0
  197. package/dist/node_modules/lodash-es/_isFlattenable.js +10 -0
  198. package/dist/node_modules/lodash-es/_isIndex.js +8 -0
  199. package/dist/node_modules/lodash-es/_isIterateeCall.js +13 -0
  200. package/dist/node_modules/lodash-es/_isKey.js +12 -0
  201. package/dist/node_modules/lodash-es/_isKeyable.js +7 -0
  202. package/dist/node_modules/lodash-es/_isMasked.js +11 -0
  203. package/dist/node_modules/lodash-es/_isPrototype.js +8 -0
  204. package/dist/node_modules/lodash-es/_isStrictComparable.js +7 -0
  205. package/dist/node_modules/lodash-es/_listCacheClear.js +6 -0
  206. package/dist/node_modules/lodash-es/_listCacheDelete.js +12 -0
  207. package/dist/node_modules/lodash-es/_listCacheGet.js +8 -0
  208. package/dist/node_modules/lodash-es/_listCacheHas.js +7 -0
  209. package/dist/node_modules/lodash-es/_listCacheSet.js +8 -0
  210. package/dist/node_modules/lodash-es/_mapCacheClear.js +13 -0
  211. package/dist/node_modules/lodash-es/_mapCacheDelete.js +8 -0
  212. package/dist/node_modules/lodash-es/_mapCacheGet.js +7 -0
  213. package/dist/node_modules/lodash-es/_mapCacheHas.js +7 -0
  214. package/dist/node_modules/lodash-es/_mapCacheSet.js +8 -0
  215. package/dist/node_modules/lodash-es/_mapToArray.js +9 -0
  216. package/dist/node_modules/lodash-es/_matchesStrictComparable.js +8 -0
  217. package/dist/node_modules/lodash-es/_memoizeCapped.js +11 -0
  218. package/dist/node_modules/lodash-es/_nativeCreate.js +5 -0
  219. package/dist/node_modules/lodash-es/_nativeKeys.js +5 -0
  220. package/dist/node_modules/lodash-es/_nodeUtil.js +11 -0
  221. package/dist/node_modules/lodash-es/_objectToString.js +7 -0
  222. package/dist/node_modules/lodash-es/_overArg.js +8 -0
  223. package/dist/node_modules/lodash-es/_root.js +5 -0
  224. package/dist/node_modules/lodash-es/_setCacheAdd.js +7 -0
  225. package/dist/node_modules/lodash-es/_setCacheHas.js +6 -0
  226. package/dist/node_modules/lodash-es/_setToArray.js +9 -0
  227. package/dist/node_modules/lodash-es/_stackClear.js +7 -0
  228. package/dist/node_modules/lodash-es/_stackDelete.js +7 -0
  229. package/dist/node_modules/lodash-es/_stackGet.js +6 -0
  230. package/dist/node_modules/lodash-es/_stackHas.js +6 -0
  231. package/dist/node_modules/lodash-es/_stackSet.js +17 -0
  232. package/dist/node_modules/lodash-es/_stringToPath.js +10 -0
  233. package/dist/node_modules/lodash-es/_toKey.js +10 -0
  234. package/dist/node_modules/lodash-es/_toSource.js +17 -0
  235. package/dist/node_modules/lodash-es/_trimmedEndIndex.js +9 -0
  236. package/dist/node_modules/lodash-es/eq.js +6 -0
  237. package/dist/node_modules/lodash-es/flatMap.js +8 -0
  238. package/dist/node_modules/lodash-es/get.js +8 -0
  239. package/dist/node_modules/lodash-es/hasIn.js +8 -0
  240. package/dist/node_modules/lodash-es/identity.js +6 -0
  241. package/dist/node_modules/lodash-es/isArguments.js +10 -0
  242. package/dist/node_modules/lodash-es/isArray.js +4 -0
  243. package/dist/node_modules/lodash-es/isArrayLike.js +8 -0
  244. package/dist/node_modules/lodash-es/isBuffer.js +6 -0
  245. package/dist/node_modules/lodash-es/isFunction.js +12 -0
  246. package/dist/node_modules/lodash-es/isLength.js +7 -0
  247. package/dist/node_modules/lodash-es/isObject.js +7 -0
  248. package/dist/node_modules/lodash-es/isObjectLike.js +6 -0
  249. package/dist/node_modules/lodash-es/isSymbol.js +9 -0
  250. package/dist/node_modules/lodash-es/isTypedArray.js +7 -0
  251. package/dist/node_modules/lodash-es/keys.js +9 -0
  252. package/dist/node_modules/lodash-es/map.js +11 -0
  253. package/dist/node_modules/lodash-es/memoize.js +18 -0
  254. package/dist/node_modules/lodash-es/property.js +10 -0
  255. package/dist/node_modules/lodash-es/range.js +5 -0
  256. package/dist/node_modules/lodash-es/stubArray.js +6 -0
  257. package/dist/node_modules/lodash-es/stubFalse.js +6 -0
  258. package/dist/node_modules/lodash-es/toFinite.js +14 -0
  259. package/dist/node_modules/lodash-es/toNumber.js +22 -0
  260. package/dist/node_modules/lodash-es/toString.js +7 -0
  261. package/dist/node_modules/valibot/dist/index.js +458 -239
  262. package/dist/package.json.js +1 -1
  263. package/dist/services/recommendationApi.js +17 -14
  264. package/dist/services/templateLibraryApi.js +40 -38
  265. package/dist/src/@types/config/defaults.d.ts +5 -1
  266. package/dist/src/@types/config/index.d.ts +3 -3
  267. package/dist/src/@types/config/schemas.d.ts +213 -0
  268. package/dist/src/@types/config/types.d.ts +9 -1
  269. package/dist/src/components/wrappers/WpModal.vue.d.ts +2 -2
  270. package/dist/src/composables/useConfig.d.ts +56 -0
  271. package/dist/src/composables/useHtmlCompiler.d.ts +2 -1
  272. package/dist/src/composables/useRecommendation.d.ts +10 -1
  273. package/dist/src/composables/useRecommendation.test.d.ts +1 -0
  274. package/dist/src/composables/useRibbonOffset.d.ts +4 -0
  275. package/dist/src/composables/useTranslations.d.ts +1 -1
  276. package/dist/src/composables/validators/useCouponBlockValidator.d.ts +3 -0
  277. package/dist/src/config/migrator/index.d.ts +2 -1
  278. package/dist/src/config/migrator/recommendation/compositionMapper.d.ts +2 -0
  279. package/dist/src/config/migrator/recommendation/compositionMapper.test.d.ts +1 -0
  280. package/dist/src/config/migrator/recommendation/extractors.d.ts +7 -0
  281. package/dist/src/config/migrator/recommendation/extractors.test.d.ts +1 -0
  282. package/dist/src/config/migrator/recommendation/htmlBuilder.d.ts +11 -0
  283. package/dist/src/config/migrator/recommendation/parseLegacyConfig.d.ts +15 -0
  284. package/dist/src/config/migrator/recommendation/parseLegacyConfig.test.d.ts +1 -0
  285. package/dist/src/config/migrator/recommendation/settingsMapper.d.ts +7 -0
  286. package/dist/src/config/migrator/recommendation/settingsMapper.test.d.ts +1 -0
  287. package/dist/src/config/migrator/recommendation/themeMapper.d.ts +5 -0
  288. package/dist/src/config/migrator/recommendation/themeMapper.test.d.ts +1 -0
  289. package/dist/src/config/migrator/recommendation/types.d.ts +205 -0
  290. package/dist/src/config/migrator/recommendationMigrator.d.ts +13 -1
  291. package/dist/src/config/migrator/recommendationMigrator.test.d.ts +1 -0
  292. package/dist/src/enums/onboarding.d.ts +6 -0
  293. package/dist/src/extensions/Blocks/RadioButton/template.d.ts +1 -1
  294. package/dist/src/extensions/Blocks/Recommendation/controls/main/utils.test.d.ts +1 -0
  295. package/dist/src/extensions/Blocks/Recommendation/services/configService.d.ts +10 -0
  296. package/dist/src/extensions/Blocks/Recommendation/services/configService.test.d.ts +1 -0
  297. package/dist/src/extensions/Blocks/Recommendation/store/recommendation.d.ts +34 -0
  298. package/dist/src/extensions/Blocks/Recommendation/types/nodeConfig.d.ts +1 -1
  299. package/dist/src/extensions/Blocks/Recommendation/utils/preserveTextStyles.d.ts +0 -3
  300. package/dist/src/library.d.ts +1 -1
  301. package/dist/src/stores/config.d.ts +504 -0
  302. package/dist/src/stores/dynamic-content.d.ts +3 -3
  303. package/dist/src/stores/onboarding.d.ts +4 -0
  304. package/dist/src/utils/htmlEscape.d.ts +5 -0
  305. package/dist/src/utils/htmlEscape.test.d.ts +1 -0
  306. package/dist/stores/config.js +81 -25
  307. package/dist/stores/dynamic-content.js +11 -6
  308. package/dist/stores/onboarding.js +9 -5
  309. package/dist/stores/preview.js +9 -6
  310. package/dist/stores/unsubscribe.js +4 -1
  311. package/dist/utils/dateUtil.js +10 -7
  312. package/dist/utils/genericUtil.js +13 -10
  313. package/dist/utils/htmlEscape.js +13 -0
  314. package/dist/utils/pairProductVariables.js +89 -87
  315. package/dist/utils/templatePreparation.js +72 -32
  316. package/package.json +9 -8
  317. package/dist/enums/displayConditions.js +0 -80
  318. package/dist/extensions/Blocks/Recommendation/templates/grid/migration.js +0 -251
  319. package/dist/src/enums/displayConditions.d.ts +0 -2
@@ -1,17 +1,17 @@
1
- import { RecommendationFeedSourceMaps as p, getOperatorOptions as I, PriceAttributes as R } from "../../../../enums/extensions/recommendationBlock.js";
2
- import { useRecommendationApi as k } from "../../../../services/recommendationApi.js";
3
- import { useConfigStore as C } from "../../../../stores/config.js";
4
- import { defineStore as y } from "pinia";
5
- import { generateCompleteFilterQuery as g } from "../utils/filterUtil.js";
6
- import { isFilterValid as G } from "../validation/filterSchema.js";
7
- import { getDefaultProducts as S } from "../templates/utils.js";
8
- import { EXCLUDED_ALGORITHM_IDS as F } from "../constants/defaultConfig.js";
9
- import { DEFAULT_CARDS_IN_ROW as w } from "../constants/layout.js";
10
- const h = k();
11
- let m = null, u = null, d = null;
12
- function b() {
1
+ import { RecommendationFeedSourceMaps as S, getOperatorOptions as R, PriceAttributes as y } from "../../../../enums/extensions/recommendationBlock.js";
2
+ import { useRecommendationApi as C } from "../../../../services/recommendationApi.js";
3
+ import { useConfigStore as G } from "../../../../stores/config.js";
4
+ import { defineStore as P } from "pinia";
5
+ import { DEFAULT_CARDS_IN_ROW as F } from "../constants/layout.js";
6
+ import { EXCLUDED_ALGORITHM_IDS as D } from "../constants/defaultConfig.js";
7
+ import { getDefaultProducts as g } from "../templates/utils.js";
8
+ import { generateCompleteFilterQuery as b } from "../utils/filterUtil.js";
9
+ import { isFilterValid as w } from "../validation/filterSchema.js";
10
+ const h = C();
11
+ let u = null, m = null, d = null;
12
+ function k() {
13
13
  return {
14
- cardsInRow: w,
14
+ cardsInRow: F,
15
15
  currencySettings: {
16
16
  name: "USD",
17
17
  value: "USD",
@@ -37,9 +37,9 @@ function b() {
37
37
  customAttributes: []
38
38
  };
39
39
  }
40
- function D() {
40
+ function I() {
41
41
  return {
42
- recommendationConfigs: b(),
42
+ recommendationConfigs: k(),
43
43
  recommendationProducts: [],
44
44
  filterStatus: !1,
45
45
  filterSelectionDrawerStatus: !1,
@@ -48,7 +48,7 @@ function D() {
48
48
  filterSnapshot: null
49
49
  };
50
50
  }
51
- const P = () => ({
51
+ const v = () => ({
52
52
  recommendationCampaignUrls: {},
53
53
  activePredictiveAlgorithms: [],
54
54
  languages: {},
@@ -57,8 +57,8 @@ const P = () => ({
57
57
  blockStates: {},
58
58
  currentRecommendationId: null,
59
59
  configVersion: 0
60
- }), _ = y("guidoRecommendationExtension", {
61
- state: () => P(),
60
+ }), _ = P("guidoRecommendationExtension", {
61
+ state: () => v(),
62
62
  getters: {
63
63
  // ====================================================================
64
64
  // Proxy Getters — Backward Compatible Access to Current Block State
@@ -68,7 +68,7 @@ const P = () => ({
68
68
  * This allows all existing code that reads `store.recommendationConfigs` to work unchanged.
69
69
  */
70
70
  recommendationConfigs(t) {
71
- return t.currentRecommendationId !== null && t.blockStates[t.currentRecommendationId] ? t.blockStates[t.currentRecommendationId].recommendationConfigs : b();
71
+ return t.currentRecommendationId !== null && t.blockStates[t.currentRecommendationId] ? t.blockStates[t.currentRecommendationId].recommendationConfigs : k();
72
72
  },
73
73
  /**
74
74
  * Proxy getter: delegates to blockStates[currentRecommendationId].recommendationProducts
@@ -102,45 +102,45 @@ const P = () => ({
102
102
  },
103
103
  hasValidFilters() {
104
104
  const { filters: t } = this.recommendationConfigs;
105
- return t.length ? t.every((r) => r.isValid) : !1;
105
+ return t.length ? t.every((e) => e.isValid) : !1;
106
106
  },
107
107
  getFilterGroupCount() {
108
108
  const { filters: t } = this.recommendationConfigs;
109
- return t.length ? new Set(t.map((r) => r.filterGroup)).size : 0;
109
+ return t.length ? new Set(t.map((e) => e.filterGroup)).size : 0;
110
110
  },
111
111
  getUniqueFilterGroups() {
112
112
  const { filters: t } = this.recommendationConfigs;
113
- return [...new Set(t.map((r) => r.filterGroup))].sort((r, e) => r - e);
113
+ return [...new Set(t.map((e) => e.filterGroup))].sort((e, r) => e - r);
114
114
  },
115
115
  getActivePredictiveAlgorithms: (t) => {
116
- const r = [];
117
- return t.activePredictiveAlgorithms.filter((e) => !F.includes(e)).forEach((e) => {
118
- r.push(...p.filter((i) => i.id === e));
119
- }), r.map((e) => ({
120
- text: e.name,
121
- value: e.key
116
+ const e = [];
117
+ return t.activePredictiveAlgorithms.filter((r) => !D.includes(r)).forEach((r) => {
118
+ e.push(...S.filter((n) => n.id === r));
119
+ }), e.map((r) => ({
120
+ text: r.name,
121
+ value: r.key
122
122
  }));
123
123
  },
124
- getLanguages: (t) => Object.entries(t.languages).map(([r, e]) => ({
125
- text: e,
126
- value: r
124
+ getLanguages: (t) => Object.entries(t.languages).map(([e, r]) => ({
125
+ text: r,
126
+ value: e
127
127
  })),
128
- getCurrencySymbolList: (t) => t.currencyList.map((r) => ({
129
- text: r.text,
130
- value: r.text
128
+ getCurrencySymbolList: (t) => t.currencyList.map((e) => ({
129
+ text: e.text,
130
+ value: e.text
131
131
  })),
132
132
  getFilterList() {
133
133
  return Object.values(this.filterList).map((t) => {
134
- let r;
135
- return t.type === "productAttribute" ? r = `product_attributes.${t.attributeName}` : R.includes(t.attributeName) ? r = `${t.attributeName}.${this.recommendationConfigs.currencySettings.value}` : r = t.attributeName, {
134
+ let e;
135
+ return t.type === "productAttribute" ? e = `product_attributes.${t.attributeName}` : y.includes(t.attributeName) ? e = `${t.attributeName}.${this.recommendationConfigs.currencySettings.value}` : e = t.attributeName, {
136
136
  text: t.displayName,
137
- value: r,
137
+ value: e,
138
138
  type: t.attributeType
139
139
  };
140
140
  });
141
141
  },
142
142
  getSelectedFilterGroup() {
143
- return (t) => [...this.recommendationConfigs.filters].filter((r) => r.filterGroup === t);
143
+ return (t) => [...this.recommendationConfigs.filters].filter((e) => e.filterGroup === t);
144
144
  }
145
145
  },
146
146
  actions: {
@@ -154,7 +154,7 @@ const P = () => ({
154
154
  setCurrentBlock(t) {
155
155
  this.blockStates[t] || (this.blockStates = {
156
156
  ...this.blockStates,
157
- [t]: D()
157
+ [t]: I()
158
158
  }), this.currentRecommendationId = t;
159
159
  },
160
160
  /**
@@ -162,15 +162,15 @@ const P = () => ({
162
162
  * Resets currentRecommendationId if it was the deleted block.
163
163
  */
164
164
  removeBlockState(t) {
165
- const r = t.toString();
166
- if (this.recommendationCampaignUrls[r]) {
167
- const i = { ...this.recommendationCampaignUrls };
168
- delete i[r], this.recommendationCampaignUrls = i;
165
+ const e = t.toString();
166
+ if (this.recommendationCampaignUrls[e]) {
167
+ const n = { ...this.recommendationCampaignUrls };
168
+ delete n[e], this.recommendationCampaignUrls = n;
169
169
  }
170
- const e = { ...this.blockStates };
171
- if (delete e[t], this.blockStates = e, this.currentRecommendationId === t) {
172
- const i = Object.keys(this.blockStates).map(Number);
173
- this.currentRecommendationId = i.length > 0 ? i[0] : null;
170
+ const r = { ...this.blockStates };
171
+ if (delete r[t], this.blockStates = r, this.currentRecommendationId === t) {
172
+ const n = Object.keys(this.blockStates).map(Number);
173
+ this.currentRecommendationId = n.length > 0 ? n[0] : null;
174
174
  }
175
175
  },
176
176
  /**
@@ -180,37 +180,75 @@ const P = () => ({
180
180
  markBlockInitialized(t) {
181
181
  this.blockStates[t] && (this.blockStates[t].isInitialized = !0);
182
182
  },
183
+ /**
184
+ * Seeds the URL-relevant fields of a block from a persisted node config.
185
+ *
186
+ * Used at save-time to ensure the campaign URL is built from the
187
+ * persisted truth (the `esd-ext-config` blob in the raw HTML) even when
188
+ * the user never selected the block in this editor session — without
189
+ * this seed, `_syncNodeConfigToStore` would never have run for that
190
+ * block and the store would hold default values (USD/en_US/mostPopular)
191
+ * instead of the real config.
192
+ *
193
+ * Creates the block entry if missing; otherwise patches only the URL-
194
+ * relevant subset and leaves runtime fields (e.g., `recommendedProducts`,
195
+ * `isInitialized`) alone.
196
+ */
197
+ seedBlockUrlConfig(t, e) {
198
+ const r = (o, s) => o === "." || o === "," || o === " " ? o : s, n = {
199
+ name: e.currencyCode,
200
+ value: e.currencyCode,
201
+ symbol: e.currencyCode,
202
+ alignment: e.currencyAlignment === "before" ? "0" : "1",
203
+ decimalCount: String(e.currencyDecimalCount),
204
+ decimalSeparator: r(e.currencyDecimalSeparator, ","),
205
+ thousandSeparator: r(e.currencyThousandSeparator, ".")
206
+ }, c = !this.blockStates[t], i = c ? I() : this.blockStates[t];
207
+ i.recommendationConfigs = {
208
+ ...i.recommendationConfigs,
209
+ strategy: e.strategy,
210
+ language: e.language,
211
+ size: e.size,
212
+ productIds: e.productIds,
213
+ filters: e.filters,
214
+ shuffleProducts: e.shuffleProducts,
215
+ currencySettings: n
216
+ }, c && (this.blockStates = {
217
+ ...this.blockStates,
218
+ [t]: i
219
+ });
220
+ },
183
221
  /**
184
222
  * Patches the current block's recommendationConfigs.
185
223
  * Replaces `store.$patch({ recommendationConfigs: { ... } })` pattern.
186
224
  */
187
- patchCurrentBlockConfig(t, r = {}) {
225
+ patchCurrentBlockConfig(t, e = {}) {
188
226
  if (this.currentRecommendationId === null || !this.blockStates[this.currentRecommendationId])
189
227
  return;
190
- const e = this.blockStates[this.currentRecommendationId];
191
- e.recommendationConfigs = {
192
- ...e.recommendationConfigs,
228
+ const r = this.blockStates[this.currentRecommendationId];
229
+ r.recommendationConfigs = {
230
+ ...r.recommendationConfigs,
193
231
  ...t,
194
232
  currencySettings: {
195
- ...e.recommendationConfigs.currencySettings,
233
+ ...r.recommendationConfigs.currencySettings,
196
234
  ...t.currencySettings || {}
197
235
  }
198
236
  };
199
- const { triggerRefetch: i = !0 } = r;
200
- i && this.configVersion++;
237
+ const { triggerRefetch: n = !0 } = e;
238
+ n && this.configVersion++;
201
239
  },
202
240
  /**
203
241
  * Creates a filter with the first available attribute and operator pre-selected.
204
242
  */
205
- createDefaultFilter(t, r) {
206
- const [e] = this.getFilterList, [i] = I(e?.type);
243
+ createDefaultFilter(t, e) {
244
+ const [r] = this.getFilterList, [n] = R(r == null ? void 0 : r.type);
207
245
  return {
208
246
  type: "standardFilter",
209
- attribute: e?.value ?? "",
210
- operator: i?.value ?? "",
247
+ attribute: (r == null ? void 0 : r.value) ?? "",
248
+ operator: (n == null ? void 0 : n.value) ?? "",
211
249
  innerGroupOperator: "*",
212
250
  outerGroupOperator: "*",
213
- filterNumber: r,
251
+ filterNumber: e,
214
252
  filterGroup: t,
215
253
  isValid: !1,
216
254
  value: ""
@@ -255,43 +293,43 @@ const P = () => ({
255
293
  // ====================================================================
256
294
  async fetchRecommendationCreateData() {
257
295
  if (!this.activePredictiveAlgorithms.length) {
258
- if (m) {
259
- await m;
296
+ if (u) {
297
+ await u;
260
298
  return;
261
299
  }
262
- m = (async () => {
300
+ u = (async () => {
263
301
  const {
264
302
  activePredictiveAlgorithms: t,
265
- languages: r,
266
- currencies: e
303
+ languages: e,
304
+ currencies: r
267
305
  } = await h.fetchRecommendationCreateData();
268
- if (this.activePredictiveAlgorithms = t, this.languages = r, this.currentRecommendationId !== null && this.blockStates[this.currentRecommendationId]) {
269
- const i = this.blockStates[this.currentRecommendationId];
270
- i.filterStatus = !!i.recommendationConfigs.filters.length;
306
+ if (this.activePredictiveAlgorithms = t, this.languages = e, this.currentRecommendationId !== null && this.blockStates[this.currentRecommendationId]) {
307
+ const n = this.blockStates[this.currentRecommendationId];
308
+ n.filterStatus = !!n.recommendationConfigs.filters.length;
271
309
  }
272
- this.currencyList = e;
310
+ this.currencyList = r;
273
311
  })();
274
312
  try {
275
- await m;
313
+ await u;
276
314
  } finally {
277
- m = null;
315
+ u = null;
278
316
  }
279
317
  }
280
318
  },
281
319
  async fetchRecommendationFilters() {
282
320
  if (!Object.keys(this.filterList).length) {
283
- if (u) {
284
- await u;
321
+ if (m) {
322
+ await m;
285
323
  return;
286
324
  }
287
- u = (async () => {
325
+ m = (async () => {
288
326
  const t = await h.fetchRecommendationFilters();
289
327
  this.filterList = t;
290
328
  })();
291
329
  try {
292
- await u;
330
+ await m;
293
331
  } finally {
294
- u = null;
332
+ m = null;
295
333
  }
296
334
  }
297
335
  },
@@ -306,59 +344,59 @@ const P = () => ({
306
344
  deleteFilterGroup(t) {
307
345
  if (this.currentRecommendationId === null || !this.blockStates[this.currentRecommendationId])
308
346
  return;
309
- const r = this.blockStates[this.currentRecommendationId], e = r.recommendationConfigs.filters.filter((n) => n.filterGroup !== t), i = [...new Set(e.map((n) => n.filterGroup))].sort((n, o) => n - o), c = new Map(i.map((n, o) => [n, o + 1]));
310
- r.recommendationConfigs.filters = e.map((n) => ({
311
- ...n,
312
- filterGroup: c.get(n.filterGroup) ?? n.filterGroup
347
+ const e = this.blockStates[this.currentRecommendationId], r = e.recommendationConfigs.filters.filter((i) => i.filterGroup !== t), n = [...new Set(r.map((i) => i.filterGroup))].sort((i, o) => i - o), c = new Map(n.map((i, o) => [i, o + 1]));
348
+ e.recommendationConfigs.filters = r.map((i) => ({
349
+ ...i,
350
+ filterGroup: c.get(i.filterGroup) ?? i.filterGroup
313
351
  }));
314
352
  },
315
353
  updateFilter(t) {
316
354
  if (this.currentRecommendationId === null || !this.blockStates[this.currentRecommendationId])
317
355
  return;
318
- const r = this.blockStates[this.currentRecommendationId], e = r.recommendationConfigs.filters.findIndex((i) => i.filterNumber === t.filterNumber && i.filterGroup === t.filterGroup);
319
- if (e !== -1) {
320
- const i = [...r.recommendationConfigs.filters];
321
- i[e] = {
356
+ const e = this.blockStates[this.currentRecommendationId], r = e.recommendationConfigs.filters.findIndex((n) => n.filterNumber === t.filterNumber && n.filterGroup === t.filterGroup);
357
+ if (r !== -1) {
358
+ const n = [...e.recommendationConfigs.filters];
359
+ n[r] = {
322
360
  ...t,
323
- isValid: G(t)
324
- }, r.recommendationConfigs.filters = i;
361
+ isValid: w(t)
362
+ }, e.recommendationConfigs.filters = n;
325
363
  }
326
364
  },
327
365
  deleteFilter(t) {
328
366
  if (this.currentRecommendationId === null || !this.blockStates[this.currentRecommendationId])
329
367
  return;
330
- const r = this.blockStates[this.currentRecommendationId], e = [...r.recommendationConfigs.filters].findIndex((i) => i.filterNumber === t.filterNumber && i.filterGroup === t.filterGroup);
331
- if (e !== -1) {
332
- let i = [...r.recommendationConfigs.filters];
333
- if (i.splice(e, 1), i.some((n) => n.filterGroup === t.filterGroup)) {
334
- let n = 1;
335
- i = i.map((o) => o.filterGroup === t.filterGroup ? { ...o, filterNumber: n++ } : o);
368
+ const e = this.blockStates[this.currentRecommendationId], r = [...e.recommendationConfigs.filters].findIndex((n) => n.filterNumber === t.filterNumber && n.filterGroup === t.filterGroup);
369
+ if (r !== -1) {
370
+ let n = [...e.recommendationConfigs.filters];
371
+ if (n.splice(r, 1), n.some((i) => i.filterGroup === t.filterGroup)) {
372
+ let i = 1;
373
+ n = n.map((o) => o.filterGroup === t.filterGroup ? { ...o, filterNumber: i++ } : o);
336
374
  } else {
337
- const n = [...new Set(i.map((s) => s.filterGroup))].sort((s, l) => s - l), o = new Map(n.map((s, l) => [s, l + 1]));
338
- i = i.map((s) => ({
375
+ const i = [...new Set(n.map((s) => s.filterGroup))].sort((s, a) => s - a), o = new Map(i.map((s, a) => [s, a + 1]));
376
+ n = n.map((s) => ({
339
377
  ...s,
340
378
  filterGroup: o.get(s.filterGroup) ?? s.filterGroup
341
379
  }));
342
380
  }
343
- r.recommendationConfigs.filters = i;
381
+ e.recommendationConfigs.filters = n;
344
382
  }
345
383
  },
346
384
  addFilter(t) {
347
385
  if (this.currentRecommendationId === null || !this.blockStates[this.currentRecommendationId])
348
386
  return;
349
- const r = this.blockStates[this.currentRecommendationId], e = [...r.recommendationConfigs.filters], c = e.filter(
387
+ const e = this.blockStates[this.currentRecommendationId], r = [...e.recommendationConfigs.filters], c = r.filter(
350
388
  (o) => o.filterGroup === t.filterGroup
351
- ).length + 1, n = e.findLastIndex((o) => o.filterGroup === t.filterGroup);
352
- n !== -1 ? e.splice(n + 1, 0, {
389
+ ).length + 1, i = r.findLastIndex((o) => o.filterGroup === t.filterGroup);
390
+ i !== -1 ? r.splice(i + 1, 0, {
353
391
  ...t,
354
392
  filterNumber: c
355
- }) : e.push({
393
+ }) : r.push({
356
394
  ...t,
357
395
  filterNumber: c
358
- }), r.recommendationConfigs.filters = e;
396
+ }), e.recommendationConfigs.filters = r;
359
397
  },
360
398
  generateFilterQuery() {
361
- return g(this.recommendationConfigs.filters);
399
+ return b(this.recommendationConfigs.filters);
362
400
  },
363
401
  // ====================================================================
364
402
  // Per-Block Product Fetching
@@ -378,25 +416,28 @@ const P = () => ({
378
416
  }
379
417
  },
380
418
  async _doFetchProducts() {
381
- const t = this.currentRecommendationId, r = this.blockStates[t], { recommendationConfigs: e } = r, i = e.filters.filter((a) => a.isValid), c = g(i), n = p.find((a) => a.key === e.strategy)?.path || "", o = C(), s = {
382
- locale: e.language,
383
- currency: e.currencySettings.value,
419
+ var p;
420
+ const t = this.currentRecommendationId, e = this.blockStates[t], { recommendationConfigs: r } = e, n = r.filters.filter((l) => l.isValid), c = b(n), i = ((p = S.find((l) => l.key === r.strategy)) == null ? void 0 : p.path) || "", o = G(), s = parseInt(r.size) || 6, a = {
421
+ locale: r.language,
422
+ currency: r.currencySettings.value,
384
423
  partnerName: o.partnerName,
385
- size: e.size,
424
+ size: r.size,
386
425
  details: !0,
387
426
  campaignId: o.variationId
388
427
  };
389
- e.strategy === "manualMerchandising" ? s.productId = e.productIds.join(",") : e.strategy === "similarViewed" && (s.productId = "{itemId}"), e.strategy === "userBased" && (s.userId = "{user_id}"), c && (s.filter = c), e.shuffleProducts && (s.shuffle = !0);
390
- const l = parseInt(e.size) || 6;
428
+ r.strategy === "manualMerchandising" ? a.productId = r.productIds.slice(0, s).join(",") : r.strategy === "similarViewed" && (a.productId = "{itemId}"), r.strategy === "userBased" && (a.userId = "{user_id}"), c && (a.filter = c), r.shuffleProducts && (a.shuffle = !0);
391
429
  let f;
392
430
  try {
393
- f = await h.fetchRecommendationProducts(n, s);
431
+ f = await h.fetchRecommendationProducts(i, a);
394
432
  } catch {
395
433
  f = [];
396
434
  }
397
435
  if (this.blockStates[t]) {
398
- const a = f.length > 0 ? f : S(l);
399
- this.blockStates[t].recommendationProducts = a.length < l ? [...a, ...S(l - a.length)] : a;
436
+ const l = f.length > 0 ? f : g(s);
437
+ l.length < s ? this.blockStates[t].recommendationProducts = [
438
+ ...l,
439
+ ...g(s - l.length)
440
+ ] : l.length > s ? this.blockStates[t].recommendationProducts = l.slice(0, s) : this.blockStates[t].recommendationProducts = l;
400
441
  }
401
442
  }
402
443
  }
@@ -1,11 +1,11 @@
1
- import { useRecommendationExtensionStore as p } from "../../store/recommendation.js";
2
- import { formatPrice as b } from "../../utils/priceFormatter.js";
3
- import { sanitizeImageUrl as g, CUSTOM_CELL_HTML as u } from "../utils.js";
4
- import { ATTR_PRODUCT_ATTR as m, ATTR_PRODUCT_BUTTON as h, ATTR_PRODUCT_OMNIBUS_DISCOUNT as y, ATTR_PRODUCT_OMNIBUS_PRICE as T, ATTR_PRODUCT_OLD_PRICE as f, ATTR_PRODUCT_PRICE as x, ATTR_PRODUCT_NAME as _, ATTR_PRODUCT_IMAGE as $ } from "../../constants/selectors.js";
5
1
  import { RecommendationBlockId as s } from "../../constants/blockIds.js";
2
+ import { ATTR_PRODUCT_ATTR as g, ATTR_PRODUCT_BUTTON as u, ATTR_PRODUCT_OMNIBUS_DISCOUNT as m, ATTR_PRODUCT_OMNIBUS_PRICE as h, ATTR_PRODUCT_OLD_PRICE as y, ATTR_PRODUCT_PRICE as T, ATTR_PRODUCT_NAME as f, ATTR_PRODUCT_IMAGE as x } from "../../constants/selectors.js";
3
+ import { useRecommendationExtensionStore as _ } from "../../store/recommendation.js";
4
+ import { formatPrice as $ } from "../../utils/priceFormatter.js";
5
+ import { sanitizeImageUrl as C, CUSTOM_CELL_HTML as R } from "../utils.js";
6
6
  const a = "0 5px", l = "attribute-cell";
7
- function c() {
8
- const t = p(), { currencySettings: e } = t.recommendationConfigs;
7
+ function p() {
8
+ const t = _(), { currencySettings: e } = t.recommendationConfigs;
9
9
  return {
10
10
  code: e.value,
11
11
  symbol: e.symbol,
@@ -16,14 +16,14 @@ function c() {
16
16
  };
17
17
  }
18
18
  function r(t, e = "price") {
19
- const o = c(), n = t[e], d = n?.[o.code] ?? Object.values(n ?? {})[0] ?? 0;
20
- return b({
19
+ const o = p(), n = t[e], d = (n == null ? void 0 : n[o.code]) ?? Object.values(n ?? {})[0] ?? 0;
20
+ return $({
21
21
  price: d,
22
22
  currency: o
23
23
  });
24
24
  }
25
- const U = {
26
- [$]: (t) => `
25
+ const I = {
26
+ [x]: (t) => `
27
27
  <td class="${l}" style="padding: ${a}; height: 100%;" valign="top">
28
28
  <table
29
29
  class="product-card-segment"
@@ -40,7 +40,7 @@ const U = {
40
40
  esd-extension-block-id="${s.IMAGE}">
41
41
  <a target="_blank" href="${t.url}">
42
42
  <img
43
- src="${g(t.image_url)}"
43
+ src="${C(t.image_url)}"
44
44
  alt="${t.name}"
45
45
  style="display: block; max-width: 100%; height: auto;"
46
46
  class="adapt-img">
@@ -51,7 +51,7 @@ const U = {
51
51
  </table>
52
52
  </td>
53
53
  `,
54
- [_]: (t) => `
54
+ [f]: (t) => `
55
55
  <td class="${l}" style="padding: ${a}; height: 100%;" valign="middle">
56
56
  <table
57
57
  class="product-card-segment"
@@ -76,7 +76,7 @@ const U = {
76
76
  </table>
77
77
  </td>
78
78
  `,
79
- [x]: (t) => `
79
+ [T]: (t) => `
80
80
  <td class="${l}" style="padding: ${a}; height: 100%;" valign="top">
81
81
  <table
82
82
  class="product-card-segment"
@@ -100,7 +100,7 @@ const U = {
100
100
  </table>
101
101
  </td>
102
102
  `,
103
- [f]: (t) => `
103
+ [y]: (t) => `
104
104
  <td class="${l}" style="padding: ${a}; height: 100%;" valign="top">
105
105
  <table
106
106
  class="product-card-segment"
@@ -124,7 +124,7 @@ const U = {
124
124
  </table>
125
125
  </td>
126
126
  `,
127
- [T]: (t) => `
127
+ [h]: (t) => `
128
128
  <td class="${l}" style="padding: ${a}; height: 100%;" valign="top">
129
129
  <table
130
130
  class="product-card-segment"
@@ -152,8 +152,9 @@ const U = {
152
152
  </table>
153
153
  </td>
154
154
  `,
155
- [y]: (t) => {
156
- const e = c(), o = t.original_price?.[e.code] ?? Object.values(t.original_price ?? {})[0] ?? 0, n = t.price?.[e.code] ?? Object.values(t.price ?? {})[0] ?? 0, d = o > 0 ? Math.round((o - n) / o * 100) : 0, i = d > 0 ? `-${d}%` : "0%";
155
+ [m]: (t) => {
156
+ var c, i;
157
+ const e = p(), o = ((c = t.original_price) == null ? void 0 : c[e.code]) ?? Object.values(t.original_price ?? {})[0] ?? 0, n = ((i = t.price) == null ? void 0 : i[e.code]) ?? Object.values(t.price ?? {})[0] ?? 0, d = o > 0 ? Math.round((o - n) / o * 100) : 0, b = d > 0 ? `-${d}%` : "0%";
157
158
  return `
158
159
  <td class="${l}" style="padding: ${a}; height: 100%;" valign="top">
159
160
  <table
@@ -173,7 +174,7 @@ const U = {
173
174
  esd-extension-block-id="${s.OMNIBUS_DISCOUNT}">
174
175
  <p contenteditable="false" style="font-size: 12px; color: #666666;">
175
176
  <span class="omnibus-text-before"></span>
176
- <span class="omnibus-discount-value">${i}</span>
177
+ <span class="omnibus-discount-value">${b}</span>
177
178
  <span class="omnibus-text-after"></span>
178
179
  </p>
179
180
  </td>
@@ -183,7 +184,7 @@ const U = {
183
184
  </td>
184
185
  `;
185
186
  },
186
- [h]: () => `
187
+ [u]: () => `
187
188
  <td class="${l}" style="padding: ${a}; height: 100%;" valign="top">
188
189
  <table
189
190
  class="product-card-segment"
@@ -226,7 +227,7 @@ const U = {
226
227
  * @param productAttrValue - Resolved product-attr value (e.g., "brand" for default, "product_attribute.rating_star" for custom)
227
228
  * @param content - Display content for the cell
228
229
  */
229
- [u]: (t, e) => `
230
+ [R]: (t, e) => `
230
231
  <td class="${l}" style="padding: ${a}; height: 100%;" valign="middle">
231
232
  <table
232
233
  class="product-card-segment"
@@ -239,7 +240,7 @@ const U = {
239
240
  <tbody>
240
241
  <tr valign="top">
241
242
  <td
242
- ${m}="${t}"
243
+ ${g}="${t}"
243
244
  class="esd-block-text product-custom-attribute es-p0t es-p0b es-p15l es-p15r"
244
245
  align="center"
245
246
  esd-extension-block-id="${s.CUSTOM_ATTRIBUTE}">
@@ -254,5 +255,5 @@ const U = {
254
255
  export {
255
256
  l as ATTRIBUTE_CELL_CLASS,
256
257
  a as DEFAULT_CELL_PADDING,
257
- U as gridElementRenderer
258
+ I as gridElementRenderer
258
259
  };
@@ -1,6 +1,6 @@
1
- import { DEFAULT_CARD_COMPOSITION as L, spacer as E, getDefaultProducts as I, createBlockTemplate as _, DEFAULTS as S, buildElementRenderer as b, DEFAULT_CARD_VISIBILITY as A } from "../utils.js";
2
- import { gridElementRenderer as f, ATTRIBUTE_CELL_CLASS as w, DEFAULT_CELL_PADDING as D } from "./elementRenderer.js";
3
- import { DEFAULT_PRODUCTS_PER_ROW as C } from "../../constants/layout.js";
1
+ import { DEFAULT_PRODUCTS_PER_ROW as L } from "../../constants/layout.js";
2
+ import { getDefaultProducts as E, createBlockTemplate as I, DEFAULTS as _, DEFAULT_CARD_COMPOSITION as S, spacer as b, buildElementRenderer as A, DEFAULT_CARD_VISIBILITY as f } from "../utils.js";
3
+ import { ATTRIBUTE_CELL_CLASS as w, DEFAULT_CELL_PADDING as D, gridElementRenderer as C } from "./elementRenderer.js";
4
4
  const O = `
5
5
  <tr class="recommendation-product-row">
6
6
  <td>
@@ -27,10 +27,10 @@ const O = `
27
27
  {-{-CELLS-}-}
28
28
  </tr>
29
29
  `;
30
- function P(t, e, o, r = L, n = {}) {
31
- const c = (100 / e).toFixed(2), i = e - t.length, l = `<td class="${w}" style="padding: ${D};" width="${c}%"></td>`, d = i > 0 ? l.repeat(i) : "", a = b(o, r, n);
30
+ function P(t, e, o, r = S, n = {}) {
31
+ const c = (100 / e).toFixed(2), i = e - t.length, l = `<td class="${w}" style="padding: ${D};" width="${c}%"></td>`, d = i > 0 ? l.repeat(i) : "", a = A(o, r, n);
32
32
  return r.filter((s) => a[s]).map((s) => {
33
- const T = A[s] ?? !0, u = T ? "" : 'style="display: none;"', R = t.map((m) => a[s](m).replace("<td", `<td width="${c}%"`)).join("");
33
+ const T = f[s] ?? !0, u = T ? "" : 'style="display: none;"', R = t.map((m) => a[s](m).replace("<td", `<td width="${c}%"`)).join("");
34
34
  return g.replace("{-{-ATTR_TYPE-}-}", s).replace("{-{-VISIBILITY-}-}", T ? "1" : "0").replace("{-{-DISPLAY_STYLE-}-}", u).replace("{-{-CELLS-}-}", R + d);
35
35
  }).join("");
36
36
  }
@@ -46,15 +46,15 @@ function U(t, e, o, r, n = {}) {
46
46
  r,
47
47
  n
48
48
  ), p = O.replace("{-{-ATTRIBUTE_ROWS-}-}", a);
49
- return d > 0 ? E + p : p;
49
+ return d > 0 ? b + p : p;
50
50
  }).join("");
51
51
  }
52
52
  function h(t, e, o, r = {}) {
53
- return U(t, e, f, o, r);
53
+ return U(t, e, C, o, r);
54
54
  }
55
55
  function F(t) {
56
- const e = t ? `ins-recommendation-v3-block-${t}` : void 0, o = _("grid", e), r = I(), n = h(r, C);
57
- return o.replace("{-{-TITLE-}-}", S.TITLE).replace("{-{-PRODUCT_ROWS-}-}", n).replace("{-{-MOBILE_PRODUCT_ROWS-}-}", "");
56
+ const e = t ? `ins-recommendation-v3-block-${t}` : void 0, o = I("grid", e), r = E(), n = h(r, L);
57
+ return o.replace("{-{-TITLE-}-}", _.TITLE).replace("{-{-PRODUCT_ROWS-}-}", n).replace("{-{-MOBILE_PRODUCT_ROWS-}-}", "");
58
58
  }
59
59
  export {
60
60
  F as getDefaultTemplate,
@@ -1,11 +1,11 @@
1
- import { prepareProductRows as s } from "./grid/template.js";
2
- import { prepareProductRows as c } from "./list/template.js";
3
- import { DEFAULT_PRODUCTS_PER_ROW as R } from "../constants/layout.js";
1
+ import { DEFAULT_PRODUCTS_PER_ROW as s } from "../constants/layout.js";
2
+ import { prepareProductRows as c } from "./grid/template.js";
3
+ import { prepareProductRows as R } from "./list/template.js";
4
4
  function a(o, t, r = {}) {
5
5
  if (t === "list")
6
- return c(o, r.composition, r.filterList);
7
- const { productsPerRow: e = R, composition: p, filterList: i } = r;
8
- return s(o, e, p, i);
6
+ return R(o, r.composition, r.filterList);
7
+ const { productsPerRow: e = s, composition: p, filterList: i } = r;
8
+ return c(o, e, p, i);
9
9
  }
10
10
  export {
11
11
  a as prepareProductRows