@useinsider/guido 2.1.0 → 2.2.0-beta.071f000

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 (294) hide show
  1. package/README.md +36 -0
  2. package/dist/@types/config/schemas.js +71 -66
  3. package/dist/components/Guido.vue.js +1 -1
  4. package/dist/components/Guido.vue2.js +69 -58
  5. package/dist/components/organisms/base/Toaster.vue.js +4 -4
  6. package/dist/components/organisms/base/Toaster.vue2.js +12 -9
  7. package/dist/components/organisms/email-preview/desktop-preview/EmailSizeIndicator.vue.js +5 -5
  8. package/dist/components/organisms/email-preview/desktop-preview/EmailSizeIndicator.vue2.js +2 -2
  9. package/dist/components/organisms/extensions/recommendation/FilterItem.vue.js +11 -13
  10. package/dist/components/organisms/extensions/recommendation/FilterItem.vue2.js +54 -23
  11. package/dist/components/organisms/extensions/recommendation/FilterSelectionDrawer.vue.js +7 -5
  12. package/dist/components/organisms/extensions/recommendation/FilterSelectionDrawer.vue2.js +37 -23
  13. package/dist/components/organisms/extensions/recommendation/Filters.vue.js +11 -11
  14. package/dist/components/organisms/extensions/recommendation/Filters.vue2.js +48 -36
  15. package/dist/components/organisms/extensions/recommendation/LogicAdapter.vue2.js +11 -9
  16. package/dist/components/organisms/header/HeaderWrapper.vue.js +9 -9
  17. package/dist/components/organisms/unsubscribe/UnsubscribePageSelection.vue.js +1 -1
  18. package/dist/components/organisms/unsubscribe/UnsubscribePageSelection.vue2.js +19 -19
  19. package/dist/composables/useActionsApi.js +15 -13
  20. package/dist/composables/useBlocksConfig.js +26 -16
  21. package/dist/composables/useHtmlValidator.js +114 -104
  22. package/dist/composables/useRecommendation.js +54 -21
  23. package/dist/composables/useStripo.js +25 -23
  24. package/dist/composables/useVersionHistoryApi.js +1 -1
  25. package/dist/config/compiler/recommendationCompilerRules.js +45 -39
  26. package/dist/config/compiler/utils/recommendationCompilerUtils.js +121 -0
  27. package/dist/config/i18n/en/index.js +11 -0
  28. package/dist/config/i18n/en/labels.json.js +7 -0
  29. package/dist/config/i18n/en/toasters.json.js +56 -0
  30. package/dist/config/i18n/en/tooltips.json.js +82 -0
  31. package/dist/config/i18n/index.js +7 -0
  32. package/dist/config/migrator/itemsBlockMigrator.js +142 -120
  33. package/dist/config/migrator/recommendationMigrator.js +3 -3
  34. package/dist/enums/defaults.js +8 -4
  35. package/dist/enums/extensions/recommendationBlock.js +1 -1
  36. package/dist/enums/recommendation.js +16 -15
  37. package/dist/extensions/Blocks/Items/block.js +19 -28
  38. package/dist/extensions/Blocks/Items/controls/button/link.js +19 -31
  39. package/dist/extensions/Blocks/Items/controls/cardComposition.js +137 -89
  40. package/dist/extensions/Blocks/Items/controls/image/link.js +19 -31
  41. package/dist/extensions/Blocks/Items/controls/name/trimming.js +28 -40
  42. package/dist/extensions/Blocks/Items/controls/price/currencyLocation.js +35 -47
  43. package/dist/extensions/Blocks/Items/controls/price/currencySymbol.js +49 -54
  44. package/dist/extensions/Blocks/Items/controls/price/formattedPrice.js +42 -51
  45. package/dist/extensions/Blocks/Items/controls/price/hideDiscount.js +23 -36
  46. package/dist/extensions/Blocks/Items/controls/price/priceOrientation.js +45 -57
  47. package/dist/extensions/Blocks/Items/controls/price/singlePrice.js +42 -60
  48. package/dist/extensions/Blocks/Items/controls/settingsControl.js +189 -196
  49. package/dist/extensions/Blocks/Items/enums/settingsEnums.js +0 -2
  50. package/dist/extensions/Blocks/Items/extension.js +8 -9
  51. package/dist/extensions/Blocks/Items/settingsPanel.js +10 -15
  52. package/dist/extensions/Blocks/Items/template.js +181 -175
  53. package/dist/extensions/Blocks/Items/utils/nodeConfigUtils.js +65 -65
  54. package/dist/extensions/Blocks/Recommendation/block.js +133 -9
  55. package/dist/extensions/Blocks/Recommendation/constants/blockIds.js +4 -0
  56. package/dist/extensions/Blocks/Recommendation/constants/controlIds.js +4 -0
  57. package/dist/extensions/Blocks/Recommendation/constants/defaultConfig.js +69 -0
  58. package/dist/extensions/Blocks/Recommendation/constants/layout.js +24 -0
  59. package/dist/extensions/Blocks/Recommendation/constants/selectors.js +23 -0
  60. package/dist/extensions/Blocks/Recommendation/controls/button/index.js +64 -0
  61. package/dist/extensions/Blocks/Recommendation/controls/cardBackground/index.js +80 -0
  62. package/dist/extensions/Blocks/Recommendation/controls/cardComposition/index.js +232 -0
  63. package/dist/extensions/Blocks/Recommendation/controls/image/index.js +19 -0
  64. package/dist/extensions/Blocks/Recommendation/controls/layout/index.js +104 -0
  65. package/dist/extensions/Blocks/Recommendation/controls/main/algorithm.js +102 -0
  66. package/dist/extensions/Blocks/Recommendation/controls/main/currency.js +207 -0
  67. package/dist/extensions/Blocks/Recommendation/controls/main/filters.js +52 -0
  68. package/dist/extensions/Blocks/Recommendation/controls/main/index.js +340 -0
  69. package/dist/extensions/Blocks/Recommendation/controls/main/locale.js +70 -0
  70. package/dist/extensions/Blocks/Recommendation/controls/main/productLayout.js +168 -0
  71. package/dist/extensions/Blocks/Recommendation/controls/main/shuffle.js +67 -0
  72. package/dist/extensions/Blocks/Recommendation/controls/main/utils.js +381 -0
  73. package/dist/extensions/Blocks/Recommendation/controls/mobileLayout/cssRules.js +21 -0
  74. package/dist/extensions/Blocks/Recommendation/controls/name/index.js +46 -0
  75. package/dist/extensions/Blocks/Recommendation/controls/name/textTrim.js +108 -0
  76. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/index.js +44 -0
  77. package/dist/extensions/Blocks/Recommendation/controls/omnibusDiscount/index.js +48 -0
  78. package/dist/extensions/Blocks/Recommendation/controls/omnibusDiscount/textAfter.js +73 -0
  79. package/dist/extensions/Blocks/Recommendation/controls/omnibusDiscount/textBefore.js +73 -0
  80. package/dist/extensions/Blocks/Recommendation/controls/omnibusPrice/index.js +48 -0
  81. package/dist/extensions/Blocks/Recommendation/controls/omnibusPrice/textAfter.js +73 -0
  82. package/dist/extensions/Blocks/Recommendation/controls/omnibusPrice/textBefore.js +73 -0
  83. package/dist/extensions/Blocks/Recommendation/controls/price/index.js +44 -0
  84. package/dist/extensions/Blocks/Recommendation/controls/spacing/index.js +346 -0
  85. package/dist/extensions/Blocks/Recommendation/extension.js +40 -43
  86. package/dist/extensions/Blocks/Recommendation/iconsRegistry.js +19 -3
  87. package/dist/extensions/Blocks/Recommendation/recommendation.css.js +13 -4
  88. package/dist/extensions/Blocks/Recommendation/services/configService.js +240 -0
  89. package/dist/extensions/Blocks/Recommendation/settingsPanel.js +128 -72
  90. package/dist/extensions/Blocks/Recommendation/store/recommendation.js +353 -219
  91. package/dist/extensions/Blocks/Recommendation/templates/grid/elementRenderer.js +228 -0
  92. package/dist/extensions/Blocks/Recommendation/templates/grid/migration.js +251 -0
  93. package/dist/extensions/Blocks/Recommendation/templates/grid/template.js +66 -0
  94. package/dist/extensions/Blocks/Recommendation/templates/index.js +12 -0
  95. package/dist/extensions/Blocks/Recommendation/templates/list/elementRenderer.js +169 -0
  96. package/dist/extensions/Blocks/Recommendation/templates/list/template.js +73 -0
  97. package/dist/extensions/Blocks/Recommendation/templates/utils.js +134 -0
  98. package/dist/extensions/Blocks/Recommendation/types/nodeConfig.js +6 -0
  99. package/dist/extensions/Blocks/Recommendation/utils/filterUtil.js +12 -12
  100. package/dist/extensions/Blocks/Recommendation/utils/preserveTextStyles.js +36 -0
  101. package/dist/extensions/Blocks/Recommendation/utils/priceFormatter.js +29 -0
  102. package/dist/extensions/Blocks/Recommendation/utils/tagName.js +46 -0
  103. package/dist/extensions/Blocks/Recommendation/validation/filterSchema.js +29 -0
  104. package/dist/extensions/Blocks/Unsubscribe/block.js +29 -29
  105. package/dist/extensions/Blocks/Unsubscribe/control.js +12 -9
  106. package/dist/extensions/Blocks/Unsubscribe/elements/preview.js +13 -11
  107. package/dist/extensions/Blocks/Unsubscribe/styles.css.js +31 -1
  108. package/dist/extensions/Blocks/common-control.js +91 -92
  109. package/dist/extensions/Blocks/controlFactories.js +125 -93
  110. package/dist/extensions/ModulesTabIcons/extension.js +17 -0
  111. package/dist/guido.css +1 -1
  112. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js +317 -198
  113. package/dist/package.json.js +1 -1
  114. package/dist/services/recommendationApi.js +11 -8
  115. package/dist/services/stripoApi.js +20 -17
  116. package/dist/services/templateLibraryApi.js +16 -13
  117. package/dist/src/@types/config/schemas.d.ts +10 -2
  118. package/dist/src/components/organisms/extensions/recommendation/FilterItem.vue.d.ts +1 -0
  119. package/dist/src/components/organisms/extensions/recommendation/Filters.vue.d.ts +17 -1
  120. package/dist/src/components/wrappers/WpDrawer.vue.d.ts +1 -1
  121. package/dist/src/composables/useConfig.d.ts +4 -0
  122. package/dist/src/composables/useRecommendation.d.ts +1 -0
  123. package/dist/src/config/compiler/utils/recommendationCompilerUtils.d.ts +17 -0
  124. package/dist/src/config/i18n/en/index.d.ts +1 -0
  125. package/dist/src/config/i18n/index.d.ts +16 -0
  126. package/dist/src/enums/defaults.d.ts +4 -0
  127. package/dist/src/extensions/Blocks/Items/block.d.ts +0 -1
  128. package/dist/src/extensions/Blocks/Items/controls/button/link.d.ts +0 -1
  129. package/dist/src/extensions/Blocks/Items/controls/cardComposition.d.ts +5 -5
  130. package/dist/src/extensions/Blocks/Items/controls/image/link.d.ts +0 -1
  131. package/dist/src/extensions/Blocks/Items/controls/name/trimming.d.ts +0 -1
  132. package/dist/src/extensions/Blocks/Items/controls/price/currencyLocation.d.ts +0 -1
  133. package/dist/src/extensions/Blocks/Items/controls/price/currencySymbol.d.ts +0 -1
  134. package/dist/src/extensions/Blocks/Items/controls/price/formattedPrice.d.ts +0 -1
  135. package/dist/src/extensions/Blocks/Items/controls/price/hideDiscount.d.ts +0 -1
  136. package/dist/src/extensions/Blocks/Items/controls/price/priceOrientation.d.ts +0 -1
  137. package/dist/src/extensions/Blocks/Items/controls/price/singlePrice.d.ts +0 -5
  138. package/dist/src/extensions/Blocks/Items/controls/settingsControl.d.ts +10 -12
  139. package/dist/src/extensions/Blocks/Items/utils/nodeConfigUtils.d.ts +2 -1
  140. package/dist/src/extensions/Blocks/Recommendation/block.d.ts +67 -0
  141. package/dist/src/extensions/Blocks/Recommendation/constants/blockIds.d.ts +13 -0
  142. package/dist/src/extensions/Blocks/Recommendation/{constants.d.ts → constants/controlIds.d.ts} +19 -11
  143. package/dist/src/extensions/Blocks/Recommendation/constants/defaultConfig.d.ts +55 -0
  144. package/dist/src/extensions/Blocks/Recommendation/constants/index.d.ts +13 -0
  145. package/dist/src/extensions/Blocks/Recommendation/constants/layout.d.ts +45 -0
  146. package/dist/src/extensions/Blocks/Recommendation/constants/selectors.d.ts +42 -0
  147. package/dist/src/extensions/Blocks/Recommendation/controls/button/index.d.ts +143 -0
  148. package/dist/src/extensions/Blocks/Recommendation/controls/cardBackground/index.d.ts +31 -0
  149. package/dist/src/extensions/Blocks/Recommendation/controls/cardBackgroundColorControl.d.ts +25 -0
  150. package/dist/src/extensions/Blocks/Recommendation/controls/cardComposition/index.d.ts +95 -0
  151. package/dist/src/extensions/Blocks/Recommendation/controls/image/index.d.ts +35 -0
  152. package/dist/src/extensions/Blocks/Recommendation/controls/index.d.ts +24 -0
  153. package/dist/src/extensions/Blocks/Recommendation/controls/layout/index.d.ts +37 -0
  154. package/dist/src/extensions/Blocks/Recommendation/controls/main/algorithm.d.ts +29 -0
  155. package/dist/src/extensions/Blocks/Recommendation/controls/main/currency.d.ts +52 -0
  156. package/dist/src/extensions/Blocks/Recommendation/controls/main/filters.d.ts +22 -0
  157. package/dist/src/extensions/Blocks/Recommendation/controls/main/index.d.ts +107 -0
  158. package/dist/src/extensions/Blocks/Recommendation/controls/main/locale.d.ts +24 -0
  159. package/dist/src/extensions/Blocks/Recommendation/controls/main/productLayout.d.ts +60 -0
  160. package/dist/src/extensions/Blocks/Recommendation/controls/main/shuffle.d.ts +23 -0
  161. package/dist/src/extensions/Blocks/Recommendation/controls/main/utils.d.ts +234 -0
  162. package/dist/src/extensions/Blocks/Recommendation/controls/mobileLayout/cssRules.d.ts +29 -0
  163. package/dist/src/extensions/Blocks/Recommendation/controls/name/index.d.ts +97 -0
  164. package/dist/src/extensions/Blocks/Recommendation/controls/name/textTrim.d.ts +34 -0
  165. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/index.d.ts +95 -0
  166. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscount/index.d.ts +100 -0
  167. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscount/textAfter.d.ts +15 -0
  168. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscount/textBefore.d.ts +15 -0
  169. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscountTextAfterControl.d.ts +15 -0
  170. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscountTextBeforeControl.d.ts +15 -0
  171. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPrice/index.d.ts +100 -0
  172. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPrice/textAfter.d.ts +15 -0
  173. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPrice/textBefore.d.ts +15 -0
  174. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPriceTextAfterControl.d.ts +15 -0
  175. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPriceTextBeforeControl.d.ts +15 -0
  176. package/dist/src/extensions/Blocks/Recommendation/controls/price/index.d.ts +95 -0
  177. package/dist/src/extensions/Blocks/Recommendation/controls/spacing/index.d.ts +116 -0
  178. package/dist/src/extensions/Blocks/Recommendation/controls/spacingControl.d.ts +60 -0
  179. package/dist/src/extensions/Blocks/Recommendation/extension.d.ts +9 -0
  180. package/dist/src/extensions/Blocks/Recommendation/services/configService.d.ts +151 -0
  181. package/dist/src/extensions/Blocks/Recommendation/services/index.d.ts +6 -0
  182. package/dist/src/extensions/Blocks/Recommendation/store/recommendation.d.ts +155 -468
  183. package/dist/src/extensions/Blocks/Recommendation/templates/grid/elementRenderer.d.ts +20 -0
  184. package/dist/src/extensions/Blocks/Recommendation/templates/grid/migration.d.ts +23 -0
  185. package/dist/src/extensions/Blocks/Recommendation/templates/grid/template.d.ts +33 -0
  186. package/dist/src/extensions/Blocks/Recommendation/templates/index.d.ts +43 -0
  187. package/dist/src/extensions/Blocks/Recommendation/templates/list/elementRenderer.d.ts +8 -0
  188. package/dist/src/extensions/Blocks/Recommendation/templates/list/migration.d.ts +25 -0
  189. package/dist/src/extensions/Blocks/Recommendation/templates/list/template.d.ts +18 -0
  190. package/dist/src/extensions/Blocks/Recommendation/templates/utils.d.ts +66 -0
  191. package/dist/src/extensions/Blocks/Recommendation/types/index.d.ts +7 -0
  192. package/dist/src/extensions/Blocks/Recommendation/types/nodeConfig.d.ts +174 -0
  193. package/dist/src/extensions/Blocks/Recommendation/utils/preserveTextStyles.d.ts +19 -0
  194. package/dist/src/extensions/Blocks/Recommendation/utils/priceFormatter.d.ts +33 -0
  195. package/dist/src/extensions/Blocks/Recommendation/utils/stylePreserver.d.ts +113 -0
  196. package/dist/src/extensions/Blocks/Recommendation/utils/tagName.d.ts +77 -0
  197. package/dist/src/extensions/Blocks/Recommendation/validation/filterSchema.d.ts +15 -0
  198. package/dist/src/extensions/Blocks/Unsubscribe/control.d.ts +1 -0
  199. package/dist/src/extensions/Blocks/common-control.d.ts +4 -5
  200. package/dist/src/extensions/ModulesTabIcons/extension.d.ts +2 -0
  201. package/dist/src/stores/config.d.ts +36 -0
  202. package/dist/static/styles/components/notification.css.js +19 -0
  203. package/dist/static/styles/components/tools.css.js +6 -2
  204. package/dist/static/styles/components/version-history.css.js +10 -2
  205. package/dist/static/styles/components/wide-panel.css.js +18 -6
  206. package/dist/static/styles/customEditorStyle.css.js +66 -2
  207. package/dist/static/styles/variables.css.js +2 -0
  208. package/dist/static/templates/empty/index.html.js +74 -0
  209. package/dist/static/templates/empty/style.css.js +779 -0
  210. package/dist/stores/unsubscribe.js +37 -34
  211. package/dist/utils/pairProductVariables.js +57 -56
  212. package/dist/utils/templatePreparation.js +15 -14
  213. package/package.json +3 -3
  214. package/dist/extensions/Blocks/Items/store/items-block.js +0 -79
  215. package/dist/extensions/Blocks/Recommendation/cardCompositionControl.js +0 -103
  216. package/dist/extensions/Blocks/Recommendation/constants.js +0 -5
  217. package/dist/extensions/Blocks/Recommendation/control.js +0 -306
  218. package/dist/extensions/Blocks/Recommendation/controls/button/align.js +0 -13
  219. package/dist/extensions/Blocks/Recommendation/controls/button/border.js +0 -13
  220. package/dist/extensions/Blocks/Recommendation/controls/button/borderRadius.js +0 -13
  221. package/dist/extensions/Blocks/Recommendation/controls/button/color.js +0 -13
  222. package/dist/extensions/Blocks/Recommendation/controls/button/fitToContent.js +0 -13
  223. package/dist/extensions/Blocks/Recommendation/controls/button/fontFamily.js +0 -13
  224. package/dist/extensions/Blocks/Recommendation/controls/button/margins.js +0 -13
  225. package/dist/extensions/Blocks/Recommendation/controls/button/paddings.js +0 -13
  226. package/dist/extensions/Blocks/Recommendation/controls/button/text.js +0 -13
  227. package/dist/extensions/Blocks/Recommendation/controls/button/textSize.js +0 -13
  228. package/dist/extensions/Blocks/Recommendation/controls/button/textStyleAndFontColor.js +0 -13
  229. package/dist/extensions/Blocks/Recommendation/controls/image/margins.js +0 -13
  230. package/dist/extensions/Blocks/Recommendation/controls/image/size.js +0 -13
  231. package/dist/extensions/Blocks/Recommendation/controls/name/align.js +0 -13
  232. package/dist/extensions/Blocks/Recommendation/controls/name/background.js +0 -13
  233. package/dist/extensions/Blocks/Recommendation/controls/name/color.js +0 -13
  234. package/dist/extensions/Blocks/Recommendation/controls/name/fontFamily.js +0 -13
  235. package/dist/extensions/Blocks/Recommendation/controls/name/paddings.js +0 -13
  236. package/dist/extensions/Blocks/Recommendation/controls/name/size.js +0 -13
  237. package/dist/extensions/Blocks/Recommendation/controls/name/style.js +0 -13
  238. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/align.js +0 -13
  239. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/background.js +0 -13
  240. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/color.js +0 -13
  241. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/fontFamily.js +0 -13
  242. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/paddings.js +0 -13
  243. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/size.js +0 -13
  244. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/style.js +0 -13
  245. package/dist/extensions/Blocks/Recommendation/controls/price/align.js +0 -13
  246. package/dist/extensions/Blocks/Recommendation/controls/price/background.js +0 -13
  247. package/dist/extensions/Blocks/Recommendation/controls/price/color.js +0 -13
  248. package/dist/extensions/Blocks/Recommendation/controls/price/fontFamily.js +0 -13
  249. package/dist/extensions/Blocks/Recommendation/controls/price/paddings.js +0 -13
  250. package/dist/extensions/Blocks/Recommendation/controls/price/size.js +0 -13
  251. package/dist/extensions/Blocks/Recommendation/controls/price/style.js +0 -13
  252. package/dist/extensions/Blocks/Recommendation/templates/blockTemplate.js +0 -160
  253. package/dist/extensions/Blocks/Recommendation/templates/migrationTemplate.js +0 -152
  254. package/dist/extensions/Blocks/Recommendation/templates/templateUtils.js +0 -180
  255. package/dist/src/extensions/Blocks/Items/store/items-block.d.ts +0 -45
  256. package/dist/src/extensions/Blocks/Recommendation/cardCompositionControl.d.ts +0 -28
  257. package/dist/src/extensions/Blocks/Recommendation/control.d.ts +0 -35
  258. package/dist/src/extensions/Blocks/Recommendation/controls/button/align.d.ts +0 -5
  259. package/dist/src/extensions/Blocks/Recommendation/controls/button/border.d.ts +0 -5
  260. package/dist/src/extensions/Blocks/Recommendation/controls/button/borderRadius.d.ts +0 -5
  261. package/dist/src/extensions/Blocks/Recommendation/controls/button/color.d.ts +0 -5
  262. package/dist/src/extensions/Blocks/Recommendation/controls/button/fitToContent.d.ts +0 -5
  263. package/dist/src/extensions/Blocks/Recommendation/controls/button/fontFamily.d.ts +0 -5
  264. package/dist/src/extensions/Blocks/Recommendation/controls/button/margins.d.ts +0 -5
  265. package/dist/src/extensions/Blocks/Recommendation/controls/button/paddings.d.ts +0 -5
  266. package/dist/src/extensions/Blocks/Recommendation/controls/button/text.d.ts +0 -5
  267. package/dist/src/extensions/Blocks/Recommendation/controls/button/textSize.d.ts +0 -5
  268. package/dist/src/extensions/Blocks/Recommendation/controls/button/textStyleAndFontColor.d.ts +0 -5
  269. package/dist/src/extensions/Blocks/Recommendation/controls/image/margins.d.ts +0 -5
  270. package/dist/src/extensions/Blocks/Recommendation/controls/image/size.d.ts +0 -5
  271. package/dist/src/extensions/Blocks/Recommendation/controls/name/align.d.ts +0 -5
  272. package/dist/src/extensions/Blocks/Recommendation/controls/name/background.d.ts +0 -5
  273. package/dist/src/extensions/Blocks/Recommendation/controls/name/color.d.ts +0 -5
  274. package/dist/src/extensions/Blocks/Recommendation/controls/name/fontFamily.d.ts +0 -5
  275. package/dist/src/extensions/Blocks/Recommendation/controls/name/paddings.d.ts +0 -5
  276. package/dist/src/extensions/Blocks/Recommendation/controls/name/size.d.ts +0 -5
  277. package/dist/src/extensions/Blocks/Recommendation/controls/name/style.d.ts +0 -5
  278. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/align.d.ts +0 -5
  279. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/background.d.ts +0 -5
  280. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/color.d.ts +0 -5
  281. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/fontFamily.d.ts +0 -5
  282. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/paddings.d.ts +0 -5
  283. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/size.d.ts +0 -5
  284. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/style.d.ts +0 -5
  285. package/dist/src/extensions/Blocks/Recommendation/controls/price/align.d.ts +0 -5
  286. package/dist/src/extensions/Blocks/Recommendation/controls/price/background.d.ts +0 -5
  287. package/dist/src/extensions/Blocks/Recommendation/controls/price/color.d.ts +0 -5
  288. package/dist/src/extensions/Blocks/Recommendation/controls/price/fontFamily.d.ts +0 -5
  289. package/dist/src/extensions/Blocks/Recommendation/controls/price/paddings.d.ts +0 -5
  290. package/dist/src/extensions/Blocks/Recommendation/controls/price/size.d.ts +0 -5
  291. package/dist/src/extensions/Blocks/Recommendation/controls/price/style.d.ts +0 -5
  292. package/dist/src/extensions/Blocks/Recommendation/templates/blockTemplate.d.ts +0 -16
  293. package/dist/src/extensions/Blocks/Recommendation/templates/migrationTemplate.d.ts +0 -16
  294. package/dist/src/extensions/Blocks/Recommendation/templates/templateUtils.d.ts +0 -44
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Currency Settings Control
3
+ *
4
+ * Handles all currency-related configuration for recommendation products:
5
+ * - Currency type
6
+ * - Currency location (before/after)
7
+ * - Currency symbol
8
+ * - Thousand separator
9
+ * - Decimal separator
10
+ * - Decimal count
11
+ *
12
+ * Configuration is stored via node config (persists with template).
13
+ * Currency options are fetched from API and cached in Pinia store.
14
+ */
15
+ import type { CurrencyConfig } from '../../types/nodeConfig';
16
+ import type { ImmutableHtmlNode } from '@stripoinc/ui-editor-extensions';
17
+ import { CommonControl } from '../../../common-control';
18
+ export declare const CURRENCY_CONTROL_ID = "recommendation-currency-control";
19
+ /**
20
+ * Control for managing currency display settings in recommendation blocks
21
+ */
22
+ export declare class CurrencyControl extends CommonControl {
23
+ private store;
24
+ private storeUnsubscription;
25
+ getId(): string;
26
+ getTemplate(): string;
27
+ onRender(): void;
28
+ onTemplateNodeUpdated(node: ImmutableHtmlNode): void;
29
+ onDestroy(): void;
30
+ _setFormValues(): void;
31
+ _initializeSelectItems(): void;
32
+ /**
33
+ * Applies currency updates to node config, HTML attributes, Pinia store, and DOM.
34
+ * @param updates - Partial currency config to merge
35
+ * @param triggerRefetch - Whether to trigger a product API refetch.
36
+ * true for currency code changes (different prices from API),
37
+ * false for display-only changes (symbol, separators, alignment, decimal count).
38
+ */
39
+ _updateCurrency(updates: Partial<CurrencyConfig>, triggerRefetch?: boolean): void;
40
+ _onCurrencyChange(value: string): void;
41
+ _onCurrencyLocationChange(value: string): void;
42
+ _onCurrencySymbolChange(value: string): void;
43
+ _onThousandSeparatorChange(value: string): void;
44
+ _onDecimalSeparatorChange(value: string): void;
45
+ _onDecimalCountChange(value: string): void;
46
+ _listenToFormUpdates(): void;
47
+ /**
48
+ * Subscribe to store changes to update currency selects when API data arrives
49
+ * This handles the case where the control renders before currency list is loaded
50
+ */
51
+ _subscribeToStoreChanges(): void;
52
+ }
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Filters Control
3
+ *
4
+ * Handles the filter selection UI for recommendation products
5
+ * Opens filter selection drawer when button is clicked
6
+ */
7
+ import { CommonControl } from '../../../common-control';
8
+ export declare const FILTERS_CONTROL_ID = "recommendation-filters-control";
9
+ /**
10
+ * Control for managing recommendation product filters
11
+ */
12
+ export declare class FiltersControl extends CommonControl {
13
+ private store;
14
+ private addFilterListener;
15
+ private addFilterButton;
16
+ getId(): string;
17
+ getTemplate(): string;
18
+ onRender(): void;
19
+ onDestroy(): void;
20
+ _onFilterSelectClick(): void;
21
+ _setupButtonListener(): void;
22
+ }
@@ -0,0 +1,107 @@
1
+ import { ImmutableHtmlNode } from '@stripoinc/ui-editor-extensions';
2
+ import { CommonControl } from '../../../common-control';
3
+ import { AlgorithmControl, ALGORITHM_CONTROL_ID } from './algorithm';
4
+ import { CurrencyControl, CURRENCY_CONTROL_ID } from './currency';
5
+ import { FiltersControl, FILTERS_CONTROL_ID } from './filters';
6
+ import { LocaleControl, LOCALE_CONTROL_ID } from './locale';
7
+ import { ProductLayoutControl, PRODUCT_LAYOUT_CONTROL_ID } from './productLayout';
8
+ import { ShuffleControl, SHUFFLE_CONTROL_ID } from './shuffle';
9
+ export declare const CONTROL_BLOCK_ID = "ui-elements-recommendation-block";
10
+ export { AlgorithmControl, ALGORITHM_CONTROL_ID, LocaleControl, LOCALE_CONTROL_ID, CurrencyControl, CURRENCY_CONTROL_ID, ProductLayoutControl, PRODUCT_LAYOUT_CONTROL_ID, FiltersControl, FILTERS_CONTROL_ID, ShuffleControl, SHUFFLE_CONTROL_ID, };
11
+ export * from './utils';
12
+ /**
13
+ * Main recommendation block control that composes all sub-controls
14
+ * Registered in the Settings tab of the block's settings panel
15
+ */
16
+ export declare class RecommendationBlockControl extends CommonControl {
17
+ private store;
18
+ private storeUnsubscription;
19
+ private algorithmControl;
20
+ private localeControl;
21
+ private currencyControl;
22
+ private productLayoutControl;
23
+ private filtersControl;
24
+ private shuffleControl;
25
+ getId(): string;
26
+ getTemplate(): string;
27
+ onRender(): Promise<void>;
28
+ onTemplateNodeUpdated(node: ImmutableHtmlNode): void;
29
+ onDestroy(): void;
30
+ /**
31
+ * Initialize all sub-controls with the shared API context
32
+ * Each sub-control manages its own form values and event listeners
33
+ */
34
+ private _initializeSubControls;
35
+ /**
36
+ * Syncs persisted node config into the Pinia store's block state.
37
+ *
38
+ * setCurrentBlock() creates a default entry (USD, en_US, mostPopular).
39
+ * For saved templates, the real config lives in the node (e.g., TRY, tr_TR).
40
+ * This method reads it and patches the store so fetchRecommendationProducts()
41
+ * uses the correct values.
42
+ *
43
+ * Uses triggerRefetch: false because the fetch hasn't happened yet —
44
+ * values are being prepared for the upcoming initial fetch.
45
+ */
46
+ private _syncNodeConfigToStore;
47
+ /**
48
+ * Fetches initial data for a block in three phases:
49
+ * 1. Shared reference data (algorithms, currencies, filters) — parallel
50
+ * 2. Smart defaults for new blocks (currency, algorithm) — sequential
51
+ * 3. Product data with correct defaults — sequential
52
+ *
53
+ * Shared by onRender() and onTemplateNodeUpdated() to avoid duplication.
54
+ * Marks the block as initialized to prevent redundant fetches on re-selection.
55
+ */
56
+ private _fetchBlockData;
57
+ /**
58
+ * Applies smart defaults for newly dropped blocks.
59
+ *
60
+ * For new blocks (config still matches hardcoded defaults), validates that
61
+ * the default currency and algorithm are available from the API response.
62
+ * If not, falls back to the first available option.
63
+ *
64
+ * Saved templates with user-customized config are left unchanged because
65
+ * their values won't match the hardcoded defaults.
66
+ */
67
+ private _applySmartDefaults;
68
+ /**
69
+ * Reads the recommendation-id attribute from the block element within the node
70
+ */
71
+ private _getRecommendationIdFromNode;
72
+ /**
73
+ * Debounced product fetch to prevent rapid API calls during config changes
74
+ */
75
+ private _debouncedFetchProducts;
76
+ /**
77
+ * Debounced content update when products arrive from API.
78
+ *
79
+ * Tries in-place update first (preserves user-applied styles) — this succeeds
80
+ * when the product count matches the DOM (algorithm/locale/currency changes).
81
+ *
82
+ * Falls back to full regeneration when product count differs from DOM — this
83
+ * happens after "Number of Products" changes where the DOM still has the old
84
+ * count. The store pads products to the configured size, so in-place only
85
+ * fails when the size actually changed.
86
+ */
87
+ private _debouncedRegenerateWithProducts;
88
+ /**
89
+ * Listen to store changes that require product refresh or regeneration.
90
+ *
91
+ * Uses configVersion counter (incremented only by patchCurrentBlockConfig)
92
+ * to distinguish user-initiated config changes from internal mutations
93
+ * (e.g., fetchRecommendationCreateData setting preferred currency).
94
+ *
95
+ * Tracks currentRecommendationId to detect block switches. When the user
96
+ * selects a different recommendation block, the proxy getters (e.g.,
97
+ * recommendationProducts) return the new block's data — a different array
98
+ * reference that would be falsely detected as "new products arrived".
99
+ * We skip that tick and update tracking references instead.
100
+ */
101
+ private _listenStateUpdates;
102
+ /**
103
+ * Persists the current filter state from Pinia store to the Stripo node config.
104
+ * This ensures filters survive template save/reload cycles.
105
+ */
106
+ private _persistFiltersToNodeConfig;
107
+ }
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Locale Selection Control
3
+ *
4
+ * Handles locale/language selection for recommendation products.
5
+ * Configuration is stored via node config (persists with template).
6
+ * Language options are fetched from API and cached in Pinia store.
7
+ */
8
+ import type { ImmutableHtmlNode } from '@stripoinc/ui-editor-extensions';
9
+ import { CommonControl } from '../../../common-control';
10
+ export declare const LOCALE_CONTROL_ID = "recommendation-locale-control";
11
+ /**
12
+ * Control for selecting recommendation content locale/language
13
+ */
14
+ export declare class LocaleControl extends CommonControl {
15
+ private store;
16
+ getId(): string;
17
+ getTemplate(): string;
18
+ onRender(): void;
19
+ onTemplateNodeUpdated(node: ImmutableHtmlNode): void;
20
+ _setFormValues(): void;
21
+ _initializeSelectItems(): void;
22
+ _onLocaleChange(value: string): void;
23
+ _listenToFormUpdates(): void;
24
+ }
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Product Layout Control
3
+ *
4
+ * Handles product display configuration:
5
+ * - Number of products to show
6
+ * - Products per row on desktop (hidden for list layout)
7
+ * - Products per row on mobile (hidden for list layout)
8
+ * - Triggers product row regeneration on changes
9
+ *
10
+ * Desktop/mobile counters swap visibility based on editor mode
11
+ * (detected via Stripo's EditorStatePropertyType.previewDeviceMode).
12
+ *
13
+ * Configuration is stored via node config (persists with template).
14
+ */
15
+ import type { ImmutableHtmlNode } from '@stripoinc/ui-editor-extensions';
16
+ import { CommonControl } from '../../../common-control';
17
+ export declare const PRODUCT_LAYOUT_CONTROL_ID = "recommendation-product-layout-control";
18
+ /**
19
+ * Control for configuring product count and layout density
20
+ * Includes both desktop and mobile "products per row" counters
21
+ */
22
+ export declare class ProductLayoutControl extends CommonControl {
23
+ private store;
24
+ private storeUnsubscription;
25
+ getId(): string;
26
+ getTemplate(): string;
27
+ onRender(): void;
28
+ onTemplateNodeUpdated(node: ImmutableHtmlNode): void;
29
+ onDestroy(): void;
30
+ _setFormValues(): void;
31
+ /**
32
+ * Checks if the editor is currently in mobile preview mode
33
+ * using Stripo's EditorStatePropertyType API.
34
+ */
35
+ _isMobileMode(): boolean;
36
+ /**
37
+ * Updates counter visibility based on layout orientation and editor mode.
38
+ * - List layout: hide both counters (products always full-width)
39
+ * - Grid + desktop mode: show desktop counter, hide mobile counter
40
+ * - Grid + mobile mode: show mobile counter, hide desktop counter
41
+ */
42
+ _updateProductsInRowVisibility(): void;
43
+ /**
44
+ * Subscribes to editor preview mode changes via Stripo API.
45
+ * When the user switches between desktop/mobile preview, toggles
46
+ * which "Products in One Row" counter is visible.
47
+ */
48
+ _subscribeToEditorModeChanges(): void;
49
+ _onProductCountChange(value: string): void;
50
+ _onProductsInRowChange(value: number): void;
51
+ _onMobileCardsInRowChange(value: number): void;
52
+ _regenerateProductRows(): void;
53
+ _debouncedRegenerateProductRows: import("@vueuse/shared").PromisifyFn<() => void>;
54
+ _listenToFormUpdates(): void;
55
+ /**
56
+ * Subscribe to store changes to update visibility when layout changes
57
+ * This is still needed because layout changes come from LayoutControl
58
+ */
59
+ _listenStateUpdates(): void;
60
+ }
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Shuffle Products Control
3
+ *
4
+ * Handles the toggle for shuffling/randomizing recommended products.
5
+ * Configuration is stored via node config (persists with template).
6
+ */
7
+ import type { ImmutableHtmlNode } from '@stripoinc/ui-editor-extensions';
8
+ import { CommonControl } from '../../../common-control';
9
+ export declare const SHUFFLE_CONTROL_ID = "recommendation-shuffle-control";
10
+ /**
11
+ * Control for toggling product shuffle/randomization
12
+ */
13
+ export declare class ShuffleControl extends CommonControl {
14
+ private store;
15
+ getId(): string;
16
+ getTemplate(): string;
17
+ onRender(): void;
18
+ onTemplateNodeUpdated(node: ImmutableHtmlNode): void;
19
+ _setFormValues(): void;
20
+ _initializeToggle(): void;
21
+ _onShuffleChange(value: boolean): void;
22
+ _listenToFormUpdates(): void;
23
+ }
@@ -0,0 +1,234 @@
1
+ /**
2
+ * Shared utilities for Recommendation block controls
3
+ *
4
+ * Provides common functionality used across multiple controls:
5
+ * - Layout detection from DOM
6
+ * - Card composition retrieval
7
+ * - Product row regeneration
8
+ * - Spacing reapplication
9
+ * - In-place content updates (style-preserving)
10
+ */
11
+ import type { CurrencyConfig } from '../../types/nodeConfig';
12
+ import type { RecommendationProduct } from '@@/Types/recommendation';
13
+ import type { ImmutableHtmlNode } from '@stripoinc/ui-editor-extensions';
14
+ import { ModificationDescription } from '@stripoinc/ui-editor-extensions';
15
+ import { type Orientation } from '../../templates';
16
+ /**
17
+ * Type for document modifier returned by api.getDocumentModifier()
18
+ *
19
+ * Uses `any` for the modifyHtml return type because:
20
+ * 1. Stripo's actual API uses complex generics (TemplateModifier<HtmlNodeModifier, CssNodeModifier>)
21
+ * 2. Multiple files define their own DocumentModifier with different methods
22
+ * 3. The methods (setStyle, setInnerHtml, setAttribute) chain and return the same object
23
+ *
24
+ * The actual chaining like modifier.modifyHtml(node).setStyle(...).setAttribute(...).apply()
25
+ * works correctly at runtime - this is just a TypeScript compatibility issue.
26
+ */
27
+ interface DocumentModifier {
28
+ modifyHtml: (node: ImmutableHtmlNode) => any;
29
+ apply: (description: ModificationDescription) => void;
30
+ }
31
+ /**
32
+ * Gets the block element from the current node
33
+ * The currentNode could BE the block element or contain it
34
+ * @param currentNode - The current template node
35
+ * @returns The block element or null if not found
36
+ */
37
+ export declare function getBlockElement(currentNode: ImmutableHtmlNode | null | undefined): ImmutableHtmlNode | null;
38
+ /**
39
+ * Gets the current layout orientation from the block's data attribute
40
+ * Supports both old (horizontal/vertical) and new (list/grid) values for backward compatibility
41
+ * @param currentNode - The current template node
42
+ * @returns The layout value ('grid' or 'list'), defaults to 'grid'
43
+ */
44
+ export declare function getCurrentLayout(currentNode: ImmutableHtmlNode | null | undefined): Orientation;
45
+ /**
46
+ * Gets the current card composition from block data attribute or use default
47
+ * @param currentNode - The current template node
48
+ * @returns Array of card element types in order
49
+ */
50
+ export declare function getCardComposition(currentNode: ImmutableHtmlNode | null | undefined): string[];
51
+ export interface RegenerateProductRowsOptions {
52
+ currentNode: ImmutableHtmlNode | null | undefined;
53
+ documentModifier: DocumentModifier;
54
+ afterRegenerate?: () => void;
55
+ /** Optional: pass products directly instead of reading from store */
56
+ products?: RecommendationProduct[];
57
+ /** Optional: pass layout directly to avoid stale DOM reads after setAttribute */
58
+ layout?: Orientation;
59
+ }
60
+ /**
61
+ * Regenerates only the mobile product container rows.
62
+ * Used when mobile-specific settings change (mobileCardsInRow)
63
+ * or when the desktop container is regenerated (to keep both in sync).
64
+ *
65
+ * For list layout: hides the mobile row entirely (list is inherently responsive).
66
+ * For grid layout: shows the mobile row and populates it.
67
+ */
68
+ export declare function regenerateMobileProductRows(options: Omit<RegenerateProductRowsOptions, 'afterRegenerate'>): void;
69
+ /**
70
+ * Regenerates product rows in the desktop container based on current store configuration.
71
+ * Also regenerates the mobile container to keep both in sync.
72
+ * Reads products, layout, and composition from store/DOM and rebuilds the HTML.
73
+ * @param options - Configuration options for regeneration
74
+ */
75
+ export declare function regenerateProductRows(options: RegenerateProductRowsOptions): void;
76
+ export interface ReapplySpacingOptions {
77
+ currentNode: ImmutableHtmlNode | null | undefined;
78
+ documentModifier: DocumentModifier;
79
+ }
80
+ /**
81
+ * Reapplies spacing values after product regeneration.
82
+ * Desktop spacing applies only to the desktop container;
83
+ * mobile spacing applies only to the mobile container.
84
+ *
85
+ * Reads values from node config (primary) with data-attribute fallback
86
+ * for backward compatibility with pre-nodeConfig templates.
87
+ * @param options - Configuration options
88
+ */
89
+ export declare function reapplySpacing(options: ReapplySpacingOptions): void;
90
+ export interface RegenerateWithStylesOptions extends Omit<RegenerateProductRowsOptions, 'products' | 'layout'> {
91
+ /** Skip style capture/restore if styles were already handled externally */
92
+ skipStylePreservation?: boolean;
93
+ /** Optional: pass products directly instead of reading from store */
94
+ products?: RecommendationProduct[];
95
+ /** Optional: pass layout directly to avoid stale DOM reads after setAttribute */
96
+ layout?: Orientation;
97
+ }
98
+ /**
99
+ * Regenerates product rows while preserving user-applied styles
100
+ *
101
+ * This unified function handles the complete regeneration flow:
102
+ * 1. Captures existing styles (fonts, colors, button styles, etc.)
103
+ * 2. Regenerates HTML with new products/layout
104
+ * 3. Restores captured styles to new elements
105
+ * 4. Reapplies spacing from data attributes
106
+ *
107
+ * NOTE: Style restoration is temporarily disabled due to Stripo selection bug.
108
+ * Multiple apply() calls (setInnerHtml + restoreStyles + reapplySpacing) cause
109
+ * Stripo's internal cursor/selection tracking to lose node references, resulting in
110
+ * "Cannot read properties of undefined (reading 'textContent')" errors.
111
+ *
112
+ * Use this instead of `regenerateProductRows` when styles must be preserved.
113
+ * @example
114
+ * // When products change (API response, count change, layout change)
115
+ * regenerateProductRowsWithStyles({
116
+ * currentNode: this.currentNode,
117
+ * documentModifier: this.api.getDocumentModifier(),
118
+ * });
119
+ * @param options - Configuration options for regeneration
120
+ */
121
+ export declare function regenerateProductRowsWithStyles(options: RegenerateWithStylesOptions): void;
122
+ /**
123
+ * Adjusts a products array to a target size.
124
+ * Used by ProductLayoutControl to synchronously match products to the new size
125
+ * before regeneration, avoiding the race condition where the store still holds
126
+ * products from the previous (stale) fetch.
127
+ *
128
+ * - More products than target → truncate
129
+ * - Fewer products than target → pad with dummy products
130
+ * - Exact match → return as-is
131
+ */
132
+ export declare function adjustProductsToSize(products: RecommendationProduct[], targetSize: number): RecommendationProduct[];
133
+ type PriceKey = 'price' | 'original_price' | 'discount';
134
+ /**
135
+ * Formats a product price using current currency settings
136
+ * @param product - The product containing price data
137
+ * @param priceKey - Which price to use ('price', 'original_price', or 'discount')
138
+ * @returns Formatted price string
139
+ */
140
+ export declare function formatProductPrice(product: RecommendationProduct, priceKey?: PriceKey): string;
141
+ interface UpdateSingleProductContentOptions {
142
+ documentModifier: DocumentModifier;
143
+ product: RecommendationProduct;
144
+ imageEl: ImmutableHtmlNode | null;
145
+ nameEl: ImmutableHtmlNode | null;
146
+ priceEl: ImmutableHtmlNode | null;
147
+ oldPriceEl: ImmutableHtmlNode | null;
148
+ omnibusPriceEl: ImmutableHtmlNode | null;
149
+ omnibusDiscountEl: ImmutableHtmlNode | null;
150
+ buttonEl: ImmutableHtmlNode | null;
151
+ }
152
+ /**
153
+ * Updates a single product's dynamic content (image, name, prices, button URL)
154
+ * without touching the styled container elements.
155
+ *
156
+ * Uses setText() on text nodes instead of setInnerHtml() to preserve Stripo's
157
+ * internal node references and avoid cursor/selection tracking issues.
158
+ * @returns true if any modifications were made
159
+ */
160
+ export declare function updateSingleProductContent(options: UpdateSingleProductContentOptions): boolean;
161
+ export interface UpdateProductContentInPlaceOptions {
162
+ currentNode: ImmutableHtmlNode | null | undefined;
163
+ documentModifier: DocumentModifier;
164
+ products: RecommendationProduct[];
165
+ }
166
+ /**
167
+ * Updates product content in-place without regenerating HTML structure.
168
+ * Preserves all user-applied styles by only touching dynamic content.
169
+ *
170
+ * Scopes element queries to the desktop container to avoid double-counting
171
+ * mobile container elements (both containers share identical block IDs).
172
+ * After updating desktop, also updates mobile container to keep them in sync.
173
+ *
174
+ * Falls back to false when product count changed (need to add/remove elements).
175
+ * @param options - Configuration options
176
+ * @returns true if in-place update was successful, false to fall back to full regeneration
177
+ */
178
+ export declare function updateProductContentInPlace(options: UpdateProductContentInPlaceOptions): boolean;
179
+ export interface UpdatePricesInPlaceOptions {
180
+ currentNode: ImmutableHtmlNode | null | undefined;
181
+ documentModifier: DocumentModifier;
182
+ }
183
+ /**
184
+ * Updates only price displays in-place (for currency changes).
185
+ * This is a lightweight update when only formatting changes, not product data.
186
+ *
187
+ * Scopes element queries to the desktop container to avoid double-counting
188
+ * mobile container elements. After updating desktop, also updates mobile.
189
+ *
190
+ * Perfect for:
191
+ * - Currency symbol change
192
+ * - Currency alignment change
193
+ * - Decimal/thousand separator changes
194
+ * @param options - Configuration options
195
+ * @returns true if update was successful, false otherwise
196
+ */
197
+ export declare function updatePricesInPlace(options: UpdatePricesInPlaceOptions): boolean;
198
+ /**
199
+ * Gets current card background color from existing elements
200
+ * Checks both grid (.product-card-segment) and list (.product-card-wrapper) selectors
201
+ * @param currentNode - The current template node
202
+ * @returns Background color string or null if not found
203
+ */
204
+ export declare function getCurrentCardBackgroundColor(currentNode: ImmutableHtmlNode | null | undefined): string | null;
205
+ export interface ApplyCardBackgroundColorOptions {
206
+ currentNode: ImmutableHtmlNode | null | undefined;
207
+ documentModifier: DocumentModifier;
208
+ bgColor: string | null;
209
+ layout: Orientation;
210
+ }
211
+ /**
212
+ * Applies card background color to appropriate elements based on layout
213
+ * @param options - Configuration options
214
+ */
215
+ export declare function applyCardBackgroundColor(options: ApplyCardBackgroundColorOptions): void;
216
+ export interface SetCurrencyAttributesOptions {
217
+ currentNode: ImmutableHtmlNode | null | undefined;
218
+ documentModifier: DocumentModifier;
219
+ currency: CurrencyConfig;
220
+ }
221
+ /**
222
+ * Sets currency configuration as HTML attributes on the block element
223
+ * These attributes are read by the HTML compiler at runtime to format prices
224
+ * @param options - Configuration options
225
+ */
226
+ export declare function setCurrencyAttributes(options: SetCurrencyAttributesOptions): void;
227
+ /**
228
+ * Reads currency configuration from block HTML attributes
229
+ * Used to restore settings when loading a template
230
+ * @param currentNode - The current template node
231
+ * @returns CurrencyConfig or null if attributes not found
232
+ */
233
+ export declare function getCurrencyAttributesFromBlock(currentNode: ImmutableHtmlNode | null | undefined): Partial<CurrencyConfig> | null;
234
+ export {};
@@ -0,0 +1,29 @@
1
+ /**
2
+ * CSS rules for mobile grid layout visibility switching
3
+ *
4
+ * Follows the modifyCss pattern from textTrim control.
5
+ * Rules are injected into the document's stylesheet via modifyCss
6
+ * so they appear in the compiled HTML export.
7
+ */
8
+ import type { ImmutableCssNode } from '@stripoinc/ui-editor-extensions';
9
+ import { ModificationDescription } from '@stripoinc/ui-editor-extensions';
10
+ /** CSS class for desktop product container */
11
+ export declare const CSS_CLASS_DESKTOP_CONTAINER = "ins-recommendation-desktop-container";
12
+ /** CSS class for mobile product container */
13
+ export declare const CSS_CLASS_MOBILE_CONTAINER = "ins-recommendation-mobile-container";
14
+ interface CssModifierApi {
15
+ getDocumentRootCssNode: () => ImmutableCssNode | null;
16
+ getDocumentModifier: () => {
17
+ modifyCss: (node: ImmutableCssNode) => {
18
+ appendRule: (rule: string) => void;
19
+ };
20
+ apply: (desc: ModificationDescription) => void;
21
+ };
22
+ }
23
+ /**
24
+ * Ensures mobile layout CSS rules exist in the document stylesheet.
25
+ * Only adds rules if they don't already exist (prevents duplicates across multiple blocks).
26
+ * Follows the same pattern as textTrim's _ensureCssRulesExist().
27
+ */
28
+ export declare function ensureMobileCssRulesExist(api: CssModifierApi): void;
29
+ export {};
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Name Element Controls
3
+ *
4
+ * Controls for styling the product name element in recommendation cards.
5
+ */
6
+ import { NameTextTrimControl } from './textTrim';
7
+ /**
8
+ * Grouped Name Controls
9
+ * Use this object for cleaner imports in extension.ts
10
+ */
11
+ export declare const NameControls: {
12
+ readonly align: {
13
+ new (): {
14
+ getId(): string;
15
+ getTargetNodes(root: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode[];
16
+ getParentControlId(): string;
17
+ api: import("@stripoinc/ui-editor-extensions").ControlApi;
18
+ getLabels(): import("@stripoinc/ui-editor-extensions").ControlLabels | undefined;
19
+ getModificationDescription(): import("@stripoinc/ui-editor-extensions").ModificationDescription | undefined;
20
+ getAdditionalModifications(_root: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): import("@stripoinc/ui-editor-extensions").TemplateModifier<import("@stripoinc/ui-editor-extensions").HtmlNodeModifier, import("@stripoinc/ui-editor-extensions").CssNodeModifier> | undefined;
21
+ isVisible(_node: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): boolean;
22
+ };
23
+ };
24
+ readonly color: {
25
+ new (): {
26
+ getId(): string;
27
+ getTargetNodes(root: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode[];
28
+ getParentControlId(): string;
29
+ api: import("@stripoinc/ui-editor-extensions").ControlApi;
30
+ getLabels(): import("@stripoinc/ui-editor-extensions").ControlLabels | undefined;
31
+ getModificationDescription(): import("@stripoinc/ui-editor-extensions").ModificationDescription | undefined;
32
+ getAdditionalModifications(_root: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): import("@stripoinc/ui-editor-extensions").TemplateModifier<import("@stripoinc/ui-editor-extensions").HtmlNodeModifier, import("@stripoinc/ui-editor-extensions").CssNodeModifier> | undefined;
33
+ isVisible(_node: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): boolean;
34
+ };
35
+ };
36
+ readonly size: {
37
+ new (): {
38
+ getId(): string;
39
+ getTargetNodes(root: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode[];
40
+ getParentControlId(): string;
41
+ api: import("@stripoinc/ui-editor-extensions").ControlApi;
42
+ getLabels(): import("@stripoinc/ui-editor-extensions").ControlLabels | undefined;
43
+ getModificationDescription(): import("@stripoinc/ui-editor-extensions").ModificationDescription | undefined;
44
+ getAdditionalModifications(_root: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): import("@stripoinc/ui-editor-extensions").TemplateModifier<import("@stripoinc/ui-editor-extensions").HtmlNodeModifier, import("@stripoinc/ui-editor-extensions").CssNodeModifier> | undefined;
45
+ isVisible(_node: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): boolean;
46
+ };
47
+ };
48
+ readonly style: {
49
+ new (): {
50
+ getId(): string;
51
+ getTargetNodes(root: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode[];
52
+ getParentControlId(): string;
53
+ api: import("@stripoinc/ui-editor-extensions").ControlApi;
54
+ getLabels(): import("@stripoinc/ui-editor-extensions").ControlLabels | undefined;
55
+ getModificationDescription(): import("@stripoinc/ui-editor-extensions").ModificationDescription | undefined;
56
+ getAdditionalModifications(_root: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): import("@stripoinc/ui-editor-extensions").TemplateModifier<import("@stripoinc/ui-editor-extensions").HtmlNodeModifier, import("@stripoinc/ui-editor-extensions").CssNodeModifier> | undefined;
57
+ isVisible(_node: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): boolean;
58
+ };
59
+ };
60
+ readonly fontFamily: {
61
+ new (): {
62
+ getId(): string;
63
+ getTargetNodes(root: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode[];
64
+ getParentControlId(): string;
65
+ api: import("@stripoinc/ui-editor-extensions").ControlApi;
66
+ getLabels(): import("@stripoinc/ui-editor-extensions").ControlLabels | undefined;
67
+ getModificationDescription(): import("@stripoinc/ui-editor-extensions").ModificationDescription | undefined;
68
+ getAdditionalModifications(_root: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): import("@stripoinc/ui-editor-extensions").TemplateModifier<import("@stripoinc/ui-editor-extensions").HtmlNodeModifier, import("@stripoinc/ui-editor-extensions").CssNodeModifier> | undefined;
69
+ isVisible(_node: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): boolean;
70
+ };
71
+ };
72
+ readonly background: {
73
+ new (): {
74
+ getId(): string;
75
+ getTargetNodes(root: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode[];
76
+ getParentControlId(): string;
77
+ api: import("@stripoinc/ui-editor-extensions").ControlApi;
78
+ getLabels(): import("@stripoinc/ui-editor-extensions").ControlLabels | undefined;
79
+ getModificationDescription(): import("@stripoinc/ui-editor-extensions").ModificationDescription | undefined;
80
+ getAdditionalModifications(_root: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): import("@stripoinc/ui-editor-extensions").TemplateModifier<import("@stripoinc/ui-editor-extensions").HtmlNodeModifier, import("@stripoinc/ui-editor-extensions").CssNodeModifier> | undefined;
81
+ isVisible(_node: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): boolean;
82
+ };
83
+ };
84
+ readonly paddings: {
85
+ new (): {
86
+ getId(): string;
87
+ getTargetNodes(root: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode[];
88
+ getParentControlId(): string;
89
+ api: import("@stripoinc/ui-editor-extensions").ControlApi;
90
+ getLabels(): import("@stripoinc/ui-editor-extensions").ControlLabels | undefined;
91
+ getModificationDescription(): import("@stripoinc/ui-editor-extensions").ModificationDescription | undefined;
92
+ getAdditionalModifications(_root: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): import("@stripoinc/ui-editor-extensions").TemplateModifier<import("@stripoinc/ui-editor-extensions").HtmlNodeModifier, import("@stripoinc/ui-editor-extensions").CssNodeModifier> | undefined;
93
+ isVisible(_node: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): boolean;
94
+ };
95
+ };
96
+ readonly textTrim: typeof NameTextTrimControl;
97
+ };