@anker-in/campaign-ui 0.2.11-beta.2 → 0.2.11-beta.21

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 (510) hide show
  1. package/dist/cjs/components/LiveChatWidget/LiveChatWidget.d.ts +43 -0
  2. package/dist/cjs/components/LiveChatWidget/LiveChatWidget.js +2 -0
  3. package/dist/cjs/components/LiveChatWidget/LiveChatWidget.js.map +7 -0
  4. package/dist/cjs/components/LiveChatWidget/api/chat.d.ts +25 -0
  5. package/dist/cjs/components/LiveChatWidget/api/chat.js +3 -0
  6. package/dist/cjs/components/LiveChatWidget/api/chat.js.map +7 -0
  7. package/dist/cjs/components/LiveChatWidget/components/ChatBubble.d.ts +68 -0
  8. package/dist/cjs/components/LiveChatWidget/components/ChatBubble.js +2 -0
  9. package/dist/cjs/components/LiveChatWidget/components/ChatBubble.js.map +7 -0
  10. package/dist/cjs/components/LiveChatWidget/components/ChatHeader.d.ts +57 -0
  11. package/dist/cjs/components/LiveChatWidget/components/ChatHeader.js +2 -0
  12. package/dist/cjs/components/LiveChatWidget/components/ChatHeader.js.map +7 -0
  13. package/dist/cjs/components/LiveChatWidget/components/ChatInput.d.ts +70 -0
  14. package/dist/cjs/components/LiveChatWidget/components/ChatInput.js +2 -0
  15. package/dist/cjs/components/LiveChatWidget/components/ChatInput.js.map +7 -0
  16. package/dist/cjs/components/LiveChatWidget/components/ChatMessage.d.ts +59 -0
  17. package/dist/cjs/components/LiveChatWidget/components/ChatMessage.js +5 -0
  18. package/dist/cjs/components/LiveChatWidget/components/ChatMessage.js.map +7 -0
  19. package/dist/cjs/components/LiveChatWidget/components/ChatWindow.d.ts +127 -0
  20. package/dist/cjs/components/LiveChatWidget/components/ChatWindow.js +2 -0
  21. package/dist/cjs/components/LiveChatWidget/components/ChatWindow.js.map +7 -0
  22. package/dist/cjs/components/LiveChatWidget/components/MessageContent/CartCard.d.ts +54 -0
  23. package/dist/cjs/components/LiveChatWidget/components/MessageContent/CartCard.js +2 -0
  24. package/dist/cjs/components/LiveChatWidget/components/MessageContent/CartCard.js.map +7 -0
  25. package/dist/cjs/components/LiveChatWidget/components/MessageContent/ErrorBlock.d.ts +33 -0
  26. package/dist/cjs/components/LiveChatWidget/components/MessageContent/ErrorBlock.js +2 -0
  27. package/dist/cjs/components/LiveChatWidget/components/MessageContent/ErrorBlock.js.map +7 -0
  28. package/dist/cjs/components/LiveChatWidget/components/MessageContent/FAQList.d.ts +16 -0
  29. package/dist/cjs/components/LiveChatWidget/components/MessageContent/FAQList.js +2 -0
  30. package/dist/cjs/components/LiveChatWidget/components/MessageContent/FAQList.js.map +7 -0
  31. package/dist/cjs/components/LiveChatWidget/components/MessageContent/PolicyBlock.d.ts +45 -0
  32. package/dist/cjs/components/LiveChatWidget/components/MessageContent/PolicyBlock.js +5 -0
  33. package/dist/cjs/components/LiveChatWidget/components/MessageContent/PolicyBlock.js.map +7 -0
  34. package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductCard.d.ts +48 -0
  35. package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductCard.js +5 -0
  36. package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductCard.js.map +7 -0
  37. package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductComparison.d.ts +70 -0
  38. package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductComparison.js +2 -0
  39. package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductComparison.js.map +7 -0
  40. package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductList.d.ts +47 -0
  41. package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductList.js +2 -0
  42. package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductList.js.map +7 -0
  43. package/dist/cjs/components/LiveChatWidget/components/MessageContent/PromotionList.d.ts +78 -0
  44. package/dist/cjs/components/LiveChatWidget/components/MessageContent/PromotionList.js +2 -0
  45. package/dist/cjs/components/LiveChatWidget/components/MessageContent/PromotionList.js.map +7 -0
  46. package/dist/cjs/components/LiveChatWidget/components/MessageContent/QuickReplies.d.ts +54 -0
  47. package/dist/cjs/components/LiveChatWidget/components/MessageContent/QuickReplies.js +2 -0
  48. package/dist/cjs/components/LiveChatWidget/components/MessageContent/QuickReplies.js.map +7 -0
  49. package/dist/cjs/components/LiveChatWidget/components/MessageContent/TextBlock.d.ts +31 -0
  50. package/dist/cjs/components/LiveChatWidget/components/MessageContent/TextBlock.js +2 -0
  51. package/dist/cjs/components/LiveChatWidget/components/MessageContent/TextBlock.js.map +7 -0
  52. package/dist/cjs/components/LiveChatWidget/components/MessageContent/ThinkingBlock.d.ts +31 -0
  53. package/dist/cjs/components/LiveChatWidget/components/MessageContent/ThinkingBlock.js +2 -0
  54. package/dist/cjs/components/LiveChatWidget/components/MessageContent/ThinkingBlock.js.map +7 -0
  55. package/dist/cjs/components/LiveChatWidget/components/MessageContent/index.d.ts +15 -0
  56. package/dist/cjs/components/LiveChatWidget/components/MessageContent/index.js +2 -0
  57. package/dist/cjs/components/LiveChatWidget/components/MessageContent/index.js.map +7 -0
  58. package/dist/cjs/components/LiveChatWidget/components/MessageContent.d.ts +63 -0
  59. package/dist/cjs/components/LiveChatWidget/components/MessageContent.js +2 -0
  60. package/dist/cjs/components/LiveChatWidget/components/MessageContent.js.map +7 -0
  61. package/dist/cjs/components/LiveChatWidget/components/MessageList.d.ts +74 -0
  62. package/dist/cjs/components/LiveChatWidget/components/MessageList.js +5 -0
  63. package/dist/cjs/components/LiveChatWidget/components/MessageList.js.map +7 -0
  64. package/dist/cjs/components/LiveChatWidget/components/ScrollAnchor.d.ts +44 -0
  65. package/dist/cjs/components/LiveChatWidget/components/ScrollAnchor.js +2 -0
  66. package/dist/cjs/components/LiveChatWidget/components/ScrollAnchor.js.map +7 -0
  67. package/dist/cjs/components/LiveChatWidget/constants.d.ts +8 -0
  68. package/dist/cjs/components/LiveChatWidget/constants.js +2 -0
  69. package/dist/cjs/components/LiveChatWidget/constants.js.map +7 -0
  70. package/dist/cjs/components/LiveChatWidget/hooks/useChatAPI.d.ts +51 -0
  71. package/dist/cjs/components/LiveChatWidget/hooks/useChatAPI.js +2 -0
  72. package/dist/cjs/components/LiveChatWidget/hooks/useChatAPI.js.map +7 -0
  73. package/dist/cjs/components/LiveChatWidget/hooks/useChatState.d.ts +120 -0
  74. package/dist/cjs/components/LiveChatWidget/hooks/useChatState.js +2 -0
  75. package/dist/cjs/components/LiveChatWidget/hooks/useChatState.js.map +7 -0
  76. package/dist/cjs/components/LiveChatWidget/hooks/useSession.d.ts +37 -0
  77. package/dist/cjs/components/LiveChatWidget/hooks/useSession.js +2 -0
  78. package/dist/cjs/components/LiveChatWidget/hooks/useSession.js.map +7 -0
  79. package/dist/cjs/components/LiveChatWidget/index.d.ts +12 -0
  80. package/dist/cjs/components/LiveChatWidget/index.js +2 -0
  81. package/dist/cjs/components/LiveChatWidget/index.js.map +7 -0
  82. package/dist/cjs/components/LiveChatWidget/types.d.ts +609 -0
  83. package/dist/cjs/components/LiveChatWidget/types.js +2 -0
  84. package/dist/cjs/components/LiveChatWidget/types.js.map +7 -0
  85. package/dist/cjs/components/LiveChatWidget/utils/cartTransformers.d.ts +25 -0
  86. package/dist/cjs/components/LiveChatWidget/utils/cartTransformers.js +2 -0
  87. package/dist/cjs/components/LiveChatWidget/utils/cartTransformers.js.map +7 -0
  88. package/dist/cjs/components/LiveChatWidget/utils/messageRenderers.d.ts +64 -0
  89. package/dist/cjs/components/LiveChatWidget/utils/messageRenderers.js +2 -0
  90. package/dist/cjs/components/LiveChatWidget/utils/messageRenderers.js.map +7 -0
  91. package/dist/cjs/components/LiveChatWidget/utils/productTransformers.d.ts +43 -0
  92. package/dist/cjs/components/LiveChatWidget/utils/productTransformers.js +2 -0
  93. package/dist/cjs/components/LiveChatWidget/utils/productTransformers.js.map +7 -0
  94. package/dist/cjs/components/LiveChatWidget/utils/userId.d.ts +18 -0
  95. package/dist/cjs/components/LiveChatWidget/utils/userId.js +2 -0
  96. package/dist/cjs/components/LiveChatWidget/utils/userId.js.map +7 -0
  97. package/dist/cjs/components/LiveChatWidget/utils/validation.d.ts +37 -0
  98. package/dist/cjs/components/LiveChatWidget/utils/validation.js +2 -0
  99. package/dist/cjs/components/LiveChatWidget/utils/validation.js.map +7 -0
  100. package/dist/cjs/components/chat/markdown.js +1 -1
  101. package/dist/cjs/components/chat/markdown.js.map +2 -2
  102. package/dist/cjs/components/credits/context/hooks/useFunctionMemberPrice.d.ts +2 -2
  103. package/dist/cjs/components/credits/context/hooks/useFunctionMemberPrice.js +1 -1
  104. package/dist/cjs/components/credits/context/hooks/useFunctionMemberPrice.js.map +2 -2
  105. package/dist/cjs/components/credits/context/hooks/useRedeemableList.js +1 -1
  106. package/dist/cjs/components/credits/context/hooks/useRedeemableList.js.map +2 -2
  107. package/dist/cjs/components/credits/context/memberPriceConst.d.ts +0 -5
  108. package/dist/cjs/components/credits/context/memberPriceConst.js +1 -1
  109. package/dist/cjs/components/credits/context/memberPriceConst.js.map +3 -3
  110. package/dist/cjs/components/credits/context/memberPriceTypes.d.ts +1 -22
  111. package/dist/cjs/components/credits/context/memberPriceTypes.js +1 -1
  112. package/dist/cjs/components/credits/context/memberPriceTypes.js.map +1 -1
  113. package/dist/cjs/components/credits/context/provider.d.ts +16 -1
  114. package/dist/cjs/components/credits/context/provider.js +1 -1
  115. package/dist/cjs/components/credits/context/provider.js.map +3 -3
  116. package/dist/cjs/components/credits/context/utils/getFunctionMemberPrice.d.ts +2 -2
  117. package/dist/cjs/components/credits/context/utils/getFunctionMemberPrice.js +1 -1
  118. package/dist/cjs/components/credits/context/utils/getFunctionMemberPrice.js.map +1 -1
  119. package/dist/cjs/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.d.ts +2 -2
  120. package/dist/cjs/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.js +1 -1
  121. package/dist/cjs/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.js.map +1 -1
  122. package/dist/cjs/components/credits/context/utils/variantGetCoupon.d.ts +2 -2
  123. package/dist/cjs/components/credits/context/utils/variantGetCoupon.js +1 -1
  124. package/dist/cjs/components/credits/context/utils/variantGetCoupon.js.map +1 -1
  125. package/dist/cjs/components/credits/context/utils.d.ts +4 -0
  126. package/dist/cjs/components/credits/context/utils.js +1 -1
  127. package/dist/cjs/components/credits/context/utils.js.map +3 -3
  128. package/dist/cjs/components/credits/creditsAnkersolixTask/CreditsAnkersolixTask.js +1 -1
  129. package/dist/cjs/components/credits/creditsAnkersolixTask/CreditsAnkersolixTask.js.map +3 -3
  130. package/dist/cjs/components/credits/creditsBanner/index.d.ts +2 -0
  131. package/dist/cjs/components/credits/creditsBanner/index.js +12 -1
  132. package/dist/cjs/components/credits/creditsBanner/index.js.map +3 -3
  133. package/dist/cjs/components/credits/creditsBenefits/BenefitItem.js +1 -1
  134. package/dist/cjs/components/credits/creditsBenefits/BenefitItem.js.map +3 -3
  135. package/dist/cjs/components/credits/creditsBenefits/IconInfo.js +1 -1
  136. package/dist/cjs/components/credits/creditsBenefits/IconInfo.js.map +1 -1
  137. package/dist/cjs/components/credits/creditsBenefits/index.js +3 -3
  138. package/dist/cjs/components/credits/creditsBenefits/index.js.map +2 -2
  139. package/dist/cjs/components/credits/creditsCash/CreditsCash.js +1 -1
  140. package/dist/cjs/components/credits/creditsCash/CreditsCash.js.map +3 -3
  141. package/dist/cjs/components/credits/creditsCash/RedeemableItem.js +1 -1
  142. package/dist/cjs/components/credits/creditsCash/RedeemableItem.js.map +3 -3
  143. package/dist/cjs/components/credits/creditsCash/type.d.ts +1 -0
  144. package/dist/cjs/components/credits/creditsCash/type.js +1 -1
  145. package/dist/cjs/components/credits/creditsCash/type.js.map +1 -1
  146. package/dist/cjs/components/credits/creditsFaq/faqItem/FaqItem.js +1 -1
  147. package/dist/cjs/components/credits/creditsFaq/faqItem/FaqItem.js.map +3 -3
  148. package/dist/cjs/components/credits/creditsFaq/index.js +1 -1
  149. package/dist/cjs/components/credits/creditsFaq/index.js.map +3 -3
  150. package/dist/cjs/components/credits/creditsInfoCard/index.js +1 -1
  151. package/dist/cjs/components/credits/creditsInfoCard/index.js.map +3 -3
  152. package/dist/cjs/components/credits/creditsMemberPrice/CreditsMemberPrice.js +1 -1
  153. package/dist/cjs/components/credits/creditsMemberPrice/CreditsMemberPrice.js.map +3 -3
  154. package/dist/cjs/components/credits/creditsMemberPrice/MemberPriceItem.js +1 -1
  155. package/dist/cjs/components/credits/creditsMemberPrice/MemberPriceItem.js.map +3 -3
  156. package/dist/cjs/components/credits/creditsMemberPrice/Pagination.d.ts +7 -0
  157. package/dist/cjs/components/credits/creditsMemberPrice/Pagination.js +2 -0
  158. package/dist/cjs/components/credits/creditsMemberPrice/Pagination.js.map +7 -0
  159. package/dist/cjs/components/credits/creditsMemberPrice/type.d.ts +3 -5
  160. package/dist/cjs/components/credits/creditsMemberPrice/type.js +1 -1
  161. package/dist/cjs/components/credits/creditsMemberPrice/type.js.map +1 -1
  162. package/dist/cjs/components/credits/creditsNavigation/CreditsNavigation.js +1 -1
  163. package/dist/cjs/components/credits/creditsNavigation/CreditsNavigation.js.map +2 -2
  164. package/dist/cjs/components/credits/creditsRedeemList/AddressForm/CountrySelect.js +1 -1
  165. package/dist/cjs/components/credits/creditsRedeemList/AddressForm/CountrySelect.js.map +3 -3
  166. package/dist/cjs/components/credits/creditsRedeemList/AddressForm/StateSelect.js +1 -1
  167. package/dist/cjs/components/credits/creditsRedeemList/AddressForm/StateSelect.js.map +3 -3
  168. package/dist/cjs/components/credits/creditsRedeemList/AddressForm/index.js +1 -1
  169. package/dist/cjs/components/credits/creditsRedeemList/AddressForm/index.js.map +3 -3
  170. package/dist/cjs/components/credits/creditsRedeemList/CreditsRedeemList.js +1 -1
  171. package/dist/cjs/components/credits/creditsRedeemList/CreditsRedeemList.js.map +3 -3
  172. package/dist/cjs/components/credits/creditsRedeemList/RedeemProductModal/Address.js +1 -1
  173. package/dist/cjs/components/credits/creditsRedeemList/RedeemProductModal/Address.js.map +3 -3
  174. package/dist/cjs/components/credits/creditsRedeemList/RedeemProductModal/ProductInfo.js +1 -1
  175. package/dist/cjs/components/credits/creditsRedeemList/RedeemProductModal/ProductInfo.js.map +2 -2
  176. package/dist/cjs/components/credits/creditsRedeemList/RedeemProductModal/Success.js +1 -1
  177. package/dist/cjs/components/credits/creditsRedeemList/RedeemProductModal/Success.js.map +3 -3
  178. package/dist/cjs/components/credits/creditsRedeemList/RedeemableItem.js +1 -1
  179. package/dist/cjs/components/credits/creditsRedeemList/RedeemableItem.js.map +3 -3
  180. package/dist/cjs/components/credits/creditsWaysToGetCredits/CreditsWaysToGetCredits.js +1 -1
  181. package/dist/cjs/components/credits/creditsWaysToGetCredits/CreditsWaysToGetCredits.js.map +3 -3
  182. package/dist/cjs/components/credits/modal/MyRewardsModal.js +1 -1
  183. package/dist/cjs/components/credits/modal/MyRewardsModal.js.map +3 -3
  184. package/dist/cjs/components/credits/modal/activitiesModal.js +1 -1
  185. package/dist/cjs/components/credits/modal/activitiesModal.js.map +3 -3
  186. package/dist/cjs/components/credits/modal/creditsUploadReceiptModal.js +1 -1
  187. package/dist/cjs/components/credits/modal/creditsUploadReceiptModal.js.map +3 -3
  188. package/dist/cjs/components/credits/modal/modalContainer.js +1 -1
  189. package/dist/cjs/components/credits/modal/modalContainer.js.map +3 -3
  190. package/dist/cjs/components/credits/modal/subscribeModal.js +1 -1
  191. package/dist/cjs/components/credits/modal/subscribeModal.js.map +3 -3
  192. package/dist/cjs/components/credits/modal/tip.js +1 -1
  193. package/dist/cjs/components/credits/modal/tip.js.map +3 -3
  194. package/dist/cjs/components/index.d.ts +3 -1
  195. package/dist/cjs/components/index.js +1 -1
  196. package/dist/cjs/components/index.js.map +3 -3
  197. package/dist/cjs/components/registration/authCodeActivate/index.js +1 -1
  198. package/dist/cjs/components/registration/authCodeActivate/index.js.map +3 -3
  199. package/dist/cjs/components/registration/modalContainer.js +1 -1
  200. package/dist/cjs/components/registration/modalContainer.js.map +3 -3
  201. package/dist/cjs/constants.d.ts +1 -0
  202. package/dist/cjs/constants.js +2 -0
  203. package/dist/cjs/constants.js.map +7 -0
  204. package/dist/cjs/index.d.ts +3 -2
  205. package/dist/cjs/index.js +1 -1
  206. package/dist/cjs/index.js.map +2 -2
  207. package/dist/cjs/stories/CartCard.stories.d.ts +33 -0
  208. package/dist/cjs/stories/CartCard.stories.js +21 -0
  209. package/dist/cjs/stories/CartCard.stories.js.map +7 -0
  210. package/dist/cjs/stories/LiveChatWidget.stories.d.ts +92 -0
  211. package/dist/cjs/stories/LiveChatWidget.stories.js +98 -0
  212. package/dist/cjs/stories/LiveChatWidget.stories.js.map +7 -0
  213. package/dist/cjs/templates/Credits.d.ts +15 -1
  214. package/dist/cjs/templates/Credits.js +1 -1
  215. package/dist/cjs/templates/Credits.js.map +3 -3
  216. package/dist/esm/components/LiveChatWidget/LiveChatWidget.d.ts +43 -0
  217. package/dist/esm/components/LiveChatWidget/LiveChatWidget.js +2 -0
  218. package/dist/esm/components/LiveChatWidget/LiveChatWidget.js.map +7 -0
  219. package/dist/esm/components/LiveChatWidget/api/chat.d.ts +25 -0
  220. package/dist/esm/components/LiveChatWidget/api/chat.js +3 -0
  221. package/dist/esm/components/LiveChatWidget/api/chat.js.map +7 -0
  222. package/dist/esm/components/LiveChatWidget/components/ChatBubble.d.ts +68 -0
  223. package/dist/esm/components/LiveChatWidget/components/ChatBubble.js +2 -0
  224. package/dist/esm/components/LiveChatWidget/components/ChatBubble.js.map +7 -0
  225. package/dist/esm/components/LiveChatWidget/components/ChatHeader.d.ts +57 -0
  226. package/dist/esm/components/LiveChatWidget/components/ChatHeader.js +2 -0
  227. package/dist/esm/components/LiveChatWidget/components/ChatHeader.js.map +7 -0
  228. package/dist/esm/components/LiveChatWidget/components/ChatInput.d.ts +70 -0
  229. package/dist/esm/components/LiveChatWidget/components/ChatInput.js +2 -0
  230. package/dist/esm/components/LiveChatWidget/components/ChatInput.js.map +7 -0
  231. package/dist/esm/components/LiveChatWidget/components/ChatMessage.d.ts +59 -0
  232. package/dist/esm/components/LiveChatWidget/components/ChatMessage.js +5 -0
  233. package/dist/esm/components/LiveChatWidget/components/ChatMessage.js.map +7 -0
  234. package/dist/esm/components/LiveChatWidget/components/ChatWindow.d.ts +127 -0
  235. package/dist/esm/components/LiveChatWidget/components/ChatWindow.js +2 -0
  236. package/dist/esm/components/LiveChatWidget/components/ChatWindow.js.map +7 -0
  237. package/dist/esm/components/LiveChatWidget/components/MessageContent/CartCard.d.ts +54 -0
  238. package/dist/esm/components/LiveChatWidget/components/MessageContent/CartCard.js +2 -0
  239. package/dist/esm/components/LiveChatWidget/components/MessageContent/CartCard.js.map +7 -0
  240. package/dist/esm/components/LiveChatWidget/components/MessageContent/ErrorBlock.d.ts +33 -0
  241. package/dist/esm/components/LiveChatWidget/components/MessageContent/ErrorBlock.js +2 -0
  242. package/dist/esm/components/LiveChatWidget/components/MessageContent/ErrorBlock.js.map +7 -0
  243. package/dist/esm/components/LiveChatWidget/components/MessageContent/FAQList.d.ts +16 -0
  244. package/dist/esm/components/LiveChatWidget/components/MessageContent/FAQList.js +2 -0
  245. package/dist/esm/components/LiveChatWidget/components/MessageContent/FAQList.js.map +7 -0
  246. package/dist/esm/components/LiveChatWidget/components/MessageContent/PolicyBlock.d.ts +45 -0
  247. package/dist/esm/components/LiveChatWidget/components/MessageContent/PolicyBlock.js +5 -0
  248. package/dist/esm/components/LiveChatWidget/components/MessageContent/PolicyBlock.js.map +7 -0
  249. package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductCard.d.ts +48 -0
  250. package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductCard.js +5 -0
  251. package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductCard.js.map +7 -0
  252. package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductComparison.d.ts +70 -0
  253. package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductComparison.js +2 -0
  254. package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductComparison.js.map +7 -0
  255. package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductList.d.ts +47 -0
  256. package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductList.js +2 -0
  257. package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductList.js.map +7 -0
  258. package/dist/esm/components/LiveChatWidget/components/MessageContent/PromotionList.d.ts +78 -0
  259. package/dist/esm/components/LiveChatWidget/components/MessageContent/PromotionList.js +2 -0
  260. package/dist/esm/components/LiveChatWidget/components/MessageContent/PromotionList.js.map +7 -0
  261. package/dist/esm/components/LiveChatWidget/components/MessageContent/QuickReplies.d.ts +54 -0
  262. package/dist/esm/components/LiveChatWidget/components/MessageContent/QuickReplies.js +2 -0
  263. package/dist/esm/components/LiveChatWidget/components/MessageContent/QuickReplies.js.map +7 -0
  264. package/dist/esm/components/LiveChatWidget/components/MessageContent/TextBlock.d.ts +31 -0
  265. package/dist/esm/components/LiveChatWidget/components/MessageContent/TextBlock.js +2 -0
  266. package/dist/esm/components/LiveChatWidget/components/MessageContent/TextBlock.js.map +7 -0
  267. package/dist/esm/components/LiveChatWidget/components/MessageContent/ThinkingBlock.d.ts +31 -0
  268. package/dist/esm/components/LiveChatWidget/components/MessageContent/ThinkingBlock.js +2 -0
  269. package/dist/esm/components/LiveChatWidget/components/MessageContent/ThinkingBlock.js.map +7 -0
  270. package/dist/esm/components/LiveChatWidget/components/MessageContent/index.d.ts +15 -0
  271. package/dist/esm/components/LiveChatWidget/components/MessageContent/index.js +2 -0
  272. package/dist/esm/components/LiveChatWidget/components/MessageContent/index.js.map +7 -0
  273. package/dist/esm/components/LiveChatWidget/components/MessageContent.d.ts +63 -0
  274. package/dist/esm/components/LiveChatWidget/components/MessageContent.js +2 -0
  275. package/dist/esm/components/LiveChatWidget/components/MessageContent.js.map +7 -0
  276. package/dist/esm/components/LiveChatWidget/components/MessageList.d.ts +74 -0
  277. package/dist/esm/components/LiveChatWidget/components/MessageList.js +5 -0
  278. package/dist/esm/components/LiveChatWidget/components/MessageList.js.map +7 -0
  279. package/dist/esm/components/LiveChatWidget/components/ScrollAnchor.d.ts +44 -0
  280. package/dist/esm/components/LiveChatWidget/components/ScrollAnchor.js +2 -0
  281. package/dist/esm/components/LiveChatWidget/components/ScrollAnchor.js.map +7 -0
  282. package/dist/esm/components/LiveChatWidget/constants.d.ts +8 -0
  283. package/dist/esm/components/LiveChatWidget/constants.js +2 -0
  284. package/dist/esm/components/LiveChatWidget/constants.js.map +7 -0
  285. package/dist/esm/components/LiveChatWidget/hooks/useChatAPI.d.ts +51 -0
  286. package/dist/esm/components/LiveChatWidget/hooks/useChatAPI.js +2 -0
  287. package/dist/esm/components/LiveChatWidget/hooks/useChatAPI.js.map +7 -0
  288. package/dist/esm/components/LiveChatWidget/hooks/useChatState.d.ts +120 -0
  289. package/dist/esm/components/LiveChatWidget/hooks/useChatState.js +2 -0
  290. package/dist/esm/components/LiveChatWidget/hooks/useChatState.js.map +7 -0
  291. package/dist/esm/components/LiveChatWidget/hooks/useSession.d.ts +37 -0
  292. package/dist/esm/components/LiveChatWidget/hooks/useSession.js +2 -0
  293. package/dist/esm/components/LiveChatWidget/hooks/useSession.js.map +7 -0
  294. package/dist/esm/components/LiveChatWidget/index.d.ts +12 -0
  295. package/dist/esm/components/LiveChatWidget/index.js +2 -0
  296. package/dist/esm/components/LiveChatWidget/index.js.map +7 -0
  297. package/dist/esm/components/LiveChatWidget/types.d.ts +609 -0
  298. package/dist/esm/components/LiveChatWidget/types.js +1 -0
  299. package/dist/esm/components/LiveChatWidget/types.js.map +7 -0
  300. package/dist/esm/components/LiveChatWidget/utils/cartTransformers.d.ts +25 -0
  301. package/dist/esm/components/LiveChatWidget/utils/cartTransformers.js +2 -0
  302. package/dist/esm/components/LiveChatWidget/utils/cartTransformers.js.map +7 -0
  303. package/dist/esm/components/LiveChatWidget/utils/messageRenderers.d.ts +64 -0
  304. package/dist/esm/components/LiveChatWidget/utils/messageRenderers.js +2 -0
  305. package/dist/esm/components/LiveChatWidget/utils/messageRenderers.js.map +7 -0
  306. package/dist/esm/components/LiveChatWidget/utils/productTransformers.d.ts +43 -0
  307. package/dist/esm/components/LiveChatWidget/utils/productTransformers.js +2 -0
  308. package/dist/esm/components/LiveChatWidget/utils/productTransformers.js.map +7 -0
  309. package/dist/esm/components/LiveChatWidget/utils/userId.d.ts +18 -0
  310. package/dist/esm/components/LiveChatWidget/utils/userId.js +2 -0
  311. package/dist/esm/components/LiveChatWidget/utils/userId.js.map +7 -0
  312. package/dist/esm/components/LiveChatWidget/utils/validation.d.ts +37 -0
  313. package/dist/esm/components/LiveChatWidget/utils/validation.js +2 -0
  314. package/dist/esm/components/LiveChatWidget/utils/validation.js.map +7 -0
  315. package/dist/esm/components/chat/markdown.js +1 -1
  316. package/dist/esm/components/chat/markdown.js.map +2 -2
  317. package/dist/esm/components/credits/context/hooks/useFunctionMemberPrice.d.ts +2 -2
  318. package/dist/esm/components/credits/context/hooks/useFunctionMemberPrice.js +1 -1
  319. package/dist/esm/components/credits/context/hooks/useFunctionMemberPrice.js.map +2 -2
  320. package/dist/esm/components/credits/context/hooks/useRedeemableList.js +1 -1
  321. package/dist/esm/components/credits/context/hooks/useRedeemableList.js.map +2 -2
  322. package/dist/esm/components/credits/context/memberPriceConst.d.ts +0 -5
  323. package/dist/esm/components/credits/context/memberPriceConst.js +1 -1
  324. package/dist/esm/components/credits/context/memberPriceConst.js.map +3 -3
  325. package/dist/esm/components/credits/context/memberPriceTypes.d.ts +1 -22
  326. package/dist/esm/components/credits/context/provider.d.ts +16 -1
  327. package/dist/esm/components/credits/context/provider.js +1 -1
  328. package/dist/esm/components/credits/context/provider.js.map +3 -3
  329. package/dist/esm/components/credits/context/utils/getFunctionMemberPrice.d.ts +2 -2
  330. package/dist/esm/components/credits/context/utils/getFunctionMemberPrice.js +1 -1
  331. package/dist/esm/components/credits/context/utils/getFunctionMemberPrice.js.map +1 -1
  332. package/dist/esm/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.d.ts +2 -2
  333. package/dist/esm/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.js +1 -1
  334. package/dist/esm/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.js.map +1 -1
  335. package/dist/esm/components/credits/context/utils/variantGetCoupon.d.ts +2 -2
  336. package/dist/esm/components/credits/context/utils/variantGetCoupon.js +1 -1
  337. package/dist/esm/components/credits/context/utils/variantGetCoupon.js.map +1 -1
  338. package/dist/esm/components/credits/context/utils.d.ts +4 -0
  339. package/dist/esm/components/credits/context/utils.js +1 -1
  340. package/dist/esm/components/credits/context/utils.js.map +3 -3
  341. package/dist/esm/components/credits/creditsAnkersolixTask/CreditsAnkersolixTask.js +1 -1
  342. package/dist/esm/components/credits/creditsAnkersolixTask/CreditsAnkersolixTask.js.map +3 -3
  343. package/dist/esm/components/credits/creditsBanner/index.d.ts +2 -0
  344. package/dist/esm/components/credits/creditsBanner/index.js +12 -1
  345. package/dist/esm/components/credits/creditsBanner/index.js.map +3 -3
  346. package/dist/esm/components/credits/creditsBenefits/BenefitItem.js +1 -1
  347. package/dist/esm/components/credits/creditsBenefits/BenefitItem.js.map +3 -3
  348. package/dist/esm/components/credits/creditsBenefits/IconInfo.js +1 -1
  349. package/dist/esm/components/credits/creditsBenefits/IconInfo.js.map +1 -1
  350. package/dist/esm/components/credits/creditsBenefits/index.js +3 -3
  351. package/dist/esm/components/credits/creditsBenefits/index.js.map +2 -2
  352. package/dist/esm/components/credits/creditsCash/CreditsCash.js +1 -1
  353. package/dist/esm/components/credits/creditsCash/CreditsCash.js.map +3 -3
  354. package/dist/esm/components/credits/creditsCash/RedeemableItem.js +1 -1
  355. package/dist/esm/components/credits/creditsCash/RedeemableItem.js.map +3 -3
  356. package/dist/esm/components/credits/creditsCash/type.d.ts +1 -0
  357. package/dist/esm/components/credits/creditsFaq/faqItem/FaqItem.js +1 -1
  358. package/dist/esm/components/credits/creditsFaq/faqItem/FaqItem.js.map +3 -3
  359. package/dist/esm/components/credits/creditsFaq/index.js +1 -1
  360. package/dist/esm/components/credits/creditsFaq/index.js.map +3 -3
  361. package/dist/esm/components/credits/creditsInfoCard/index.js +1 -1
  362. package/dist/esm/components/credits/creditsInfoCard/index.js.map +2 -2
  363. package/dist/esm/components/credits/creditsMemberPrice/CreditsMemberPrice.js +1 -1
  364. package/dist/esm/components/credits/creditsMemberPrice/CreditsMemberPrice.js.map +3 -3
  365. package/dist/esm/components/credits/creditsMemberPrice/MemberPriceItem.js +1 -1
  366. package/dist/esm/components/credits/creditsMemberPrice/MemberPriceItem.js.map +3 -3
  367. package/dist/esm/components/credits/creditsMemberPrice/Pagination.d.ts +7 -0
  368. package/dist/esm/components/credits/creditsMemberPrice/Pagination.js +2 -0
  369. package/dist/esm/components/credits/creditsMemberPrice/Pagination.js.map +7 -0
  370. package/dist/esm/components/credits/creditsMemberPrice/type.d.ts +3 -5
  371. package/dist/esm/components/credits/creditsNavigation/CreditsNavigation.js +1 -1
  372. package/dist/esm/components/credits/creditsNavigation/CreditsNavigation.js.map +2 -2
  373. package/dist/esm/components/credits/creditsRedeemList/AddressForm/CountrySelect.js +1 -1
  374. package/dist/esm/components/credits/creditsRedeemList/AddressForm/CountrySelect.js.map +2 -2
  375. package/dist/esm/components/credits/creditsRedeemList/AddressForm/StateSelect.js +1 -1
  376. package/dist/esm/components/credits/creditsRedeemList/AddressForm/StateSelect.js.map +2 -2
  377. package/dist/esm/components/credits/creditsRedeemList/AddressForm/index.js +1 -1
  378. package/dist/esm/components/credits/creditsRedeemList/AddressForm/index.js.map +2 -2
  379. package/dist/esm/components/credits/creditsRedeemList/CreditsRedeemList.js +1 -1
  380. package/dist/esm/components/credits/creditsRedeemList/CreditsRedeemList.js.map +3 -3
  381. package/dist/esm/components/credits/creditsRedeemList/RedeemProductModal/Address.js +1 -1
  382. package/dist/esm/components/credits/creditsRedeemList/RedeemProductModal/Address.js.map +3 -3
  383. package/dist/esm/components/credits/creditsRedeemList/RedeemProductModal/ProductInfo.js +1 -1
  384. package/dist/esm/components/credits/creditsRedeemList/RedeemProductModal/ProductInfo.js.map +2 -2
  385. package/dist/esm/components/credits/creditsRedeemList/RedeemProductModal/Success.js +1 -1
  386. package/dist/esm/components/credits/creditsRedeemList/RedeemProductModal/Success.js.map +2 -2
  387. package/dist/esm/components/credits/creditsRedeemList/RedeemableItem.js +1 -1
  388. package/dist/esm/components/credits/creditsRedeemList/RedeemableItem.js.map +3 -3
  389. package/dist/esm/components/credits/creditsWaysToGetCredits/CreditsWaysToGetCredits.js +1 -1
  390. package/dist/esm/components/credits/creditsWaysToGetCredits/CreditsWaysToGetCredits.js.map +3 -3
  391. package/dist/esm/components/credits/modal/MyRewardsModal.js +1 -1
  392. package/dist/esm/components/credits/modal/MyRewardsModal.js.map +2 -2
  393. package/dist/esm/components/credits/modal/activitiesModal.js +1 -1
  394. package/dist/esm/components/credits/modal/activitiesModal.js.map +3 -3
  395. package/dist/esm/components/credits/modal/creditsUploadReceiptModal.js +1 -1
  396. package/dist/esm/components/credits/modal/creditsUploadReceiptModal.js.map +3 -3
  397. package/dist/esm/components/credits/modal/modalContainer.js +1 -1
  398. package/dist/esm/components/credits/modal/modalContainer.js.map +3 -3
  399. package/dist/esm/components/credits/modal/subscribeModal.js +1 -1
  400. package/dist/esm/components/credits/modal/subscribeModal.js.map +3 -3
  401. package/dist/esm/components/credits/modal/tip.js +1 -1
  402. package/dist/esm/components/credits/modal/tip.js.map +3 -3
  403. package/dist/esm/components/index.d.ts +3 -1
  404. package/dist/esm/components/index.js +1 -1
  405. package/dist/esm/components/index.js.map +3 -3
  406. package/dist/esm/components/registration/authCodeActivate/index.js +1 -1
  407. package/dist/esm/components/registration/authCodeActivate/index.js.map +3 -3
  408. package/dist/esm/components/registration/modalContainer.js +1 -1
  409. package/dist/esm/components/registration/modalContainer.js.map +3 -3
  410. package/dist/esm/constants.d.ts +1 -0
  411. package/dist/esm/constants.js +2 -0
  412. package/dist/esm/constants.js.map +7 -0
  413. package/dist/esm/index.d.ts +3 -2
  414. package/dist/esm/index.js +1 -1
  415. package/dist/esm/index.js.map +2 -2
  416. package/dist/esm/stories/CartCard.stories.d.ts +33 -0
  417. package/dist/esm/stories/CartCard.stories.js +21 -0
  418. package/dist/esm/stories/CartCard.stories.js.map +7 -0
  419. package/dist/esm/stories/LiveChatWidget.stories.d.ts +92 -0
  420. package/dist/esm/stories/LiveChatWidget.stories.js +98 -0
  421. package/dist/esm/stories/LiveChatWidget.stories.js.map +7 -0
  422. package/dist/esm/templates/Credits.d.ts +15 -1
  423. package/dist/esm/templates/Credits.js +1 -1
  424. package/dist/esm/templates/Credits.js.map +3 -3
  425. package/package.json +7 -3
  426. package/src/components/LiveChatWidget/LiveChatWidget.tsx +599 -0
  427. package/src/components/LiveChatWidget/api/chat.ts +136 -0
  428. package/src/components/LiveChatWidget/components/ChatBubble.tsx +152 -0
  429. package/src/components/LiveChatWidget/components/ChatHeader.tsx +151 -0
  430. package/src/components/LiveChatWidget/components/ChatInput.tsx +216 -0
  431. package/src/components/LiveChatWidget/components/ChatMessage.tsx +182 -0
  432. package/src/components/LiveChatWidget/components/ChatWindow.tsx +304 -0
  433. package/src/components/LiveChatWidget/components/MessageContent/CartCard.tsx +198 -0
  434. package/src/components/LiveChatWidget/components/MessageContent/ErrorBlock.tsx +75 -0
  435. package/src/components/LiveChatWidget/components/MessageContent/FAQList.tsx +127 -0
  436. package/src/components/LiveChatWidget/components/MessageContent/PolicyBlock.tsx +150 -0
  437. package/src/components/LiveChatWidget/components/MessageContent/ProductCard.tsx +139 -0
  438. package/src/components/LiveChatWidget/components/MessageContent/ProductComparison.tsx +348 -0
  439. package/src/components/LiveChatWidget/components/MessageContent/ProductList.tsx +275 -0
  440. package/src/components/LiveChatWidget/components/MessageContent/PromotionList.tsx +207 -0
  441. package/src/components/LiveChatWidget/components/MessageContent/QuickReplies.tsx +91 -0
  442. package/src/components/LiveChatWidget/components/MessageContent/TextBlock.tsx +89 -0
  443. package/src/components/LiveChatWidget/components/MessageContent/ThinkingBlock.tsx +53 -0
  444. package/src/components/LiveChatWidget/components/MessageContent/index.ts +16 -0
  445. package/src/components/LiveChatWidget/components/MessageContent.tsx +110 -0
  446. package/src/components/LiveChatWidget/components/MessageList.tsx +261 -0
  447. package/src/components/LiveChatWidget/components/ScrollAnchor.tsx +75 -0
  448. package/src/components/LiveChatWidget/constants.ts +15 -0
  449. package/src/components/LiveChatWidget/hooks/useChatAPI.ts +136 -0
  450. package/src/components/LiveChatWidget/hooks/useChatState.ts +542 -0
  451. package/src/components/LiveChatWidget/hooks/useSession.ts +123 -0
  452. package/src/components/LiveChatWidget/index.tsx +62 -0
  453. package/src/components/LiveChatWidget/types.ts +769 -0
  454. package/src/components/LiveChatWidget/utils/cartTransformers.ts +72 -0
  455. package/src/components/LiveChatWidget/utils/messageRenderers.ts +120 -0
  456. package/src/components/LiveChatWidget/utils/productTransformers.ts +149 -0
  457. package/src/components/LiveChatWidget/utils/userId.ts +140 -0
  458. package/src/components/LiveChatWidget/utils/validation.ts +99 -0
  459. package/src/components/chat/markdown.tsx +1 -1
  460. package/src/components/credits/context/hooks/useRedeemableList.ts +1 -1
  461. package/src/components/credits/context/memberPriceConst.ts +0 -7
  462. package/src/components/credits/context/memberPriceTypes.ts +1 -26
  463. package/src/components/credits/context/provider.tsx +16 -0
  464. package/src/components/credits/context/utils.ts +9 -0
  465. package/src/components/credits/creditsAnkersolixTask/CreditsAnkersolixTask.tsx +44 -41
  466. package/src/components/credits/creditsBanner/index.tsx +31 -3
  467. package/src/components/credits/creditsBenefits/BenefitItem.tsx +13 -5
  468. package/src/components/credits/creditsBenefits/IconInfo.tsx +1 -1
  469. package/src/components/credits/creditsBenefits/index.tsx +1 -1
  470. package/src/components/credits/creditsCash/CreditsCash.tsx +6 -3
  471. package/src/components/credits/creditsCash/RedeemableItem.tsx +29 -11
  472. package/src/components/credits/creditsCash/type.ts +1 -0
  473. package/src/components/credits/creditsFaq/faqItem/FaqItem.tsx +25 -23
  474. package/src/components/credits/creditsFaq/index.tsx +2 -1
  475. package/src/components/credits/creditsInfoCard/index.tsx +10 -3
  476. package/src/components/credits/creditsMemberPrice/CreditsMemberPrice.tsx +160 -136
  477. package/src/components/credits/creditsMemberPrice/MemberPriceItem.tsx +134 -29
  478. package/src/components/credits/creditsMemberPrice/Pagination.tsx +113 -0
  479. package/src/components/credits/creditsMemberPrice/type.ts +3 -5
  480. package/src/components/credits/creditsNavigation/CreditsNavigation.tsx +3 -3
  481. package/src/components/credits/creditsRedeemList/AddressForm/CountrySelect.tsx +2 -1
  482. package/src/components/credits/creditsRedeemList/AddressForm/StateSelect.tsx +2 -1
  483. package/src/components/credits/creditsRedeemList/AddressForm/index.tsx +2 -1
  484. package/src/components/credits/creditsRedeemList/CreditsRedeemList.tsx +32 -18
  485. package/src/components/credits/creditsRedeemList/RedeemProductModal/Address.tsx +2 -1
  486. package/src/components/credits/creditsRedeemList/RedeemProductModal/ProductInfo.tsx +6 -4
  487. package/src/components/credits/creditsRedeemList/RedeemProductModal/Success.tsx +2 -1
  488. package/src/components/credits/creditsRedeemList/RedeemableItem.tsx +21 -7
  489. package/src/components/credits/creditsWaysToGetCredits/CreditsWaysToGetCredits.tsx +34 -20
  490. package/src/components/credits/modal/MyRewardsModal.tsx +2 -1
  491. package/src/components/credits/modal/activitiesModal.tsx +2 -1
  492. package/src/components/credits/modal/creditsUploadReceiptModal.tsx +2 -1
  493. package/src/components/credits/modal/modalContainer.tsx +2 -1
  494. package/src/components/credits/modal/subscribeModal.tsx +2 -1
  495. package/src/components/credits/modal/tip.tsx +2 -1
  496. package/src/components/index.ts +23 -1
  497. package/src/components/registration/authCodeActivate/index.tsx +3 -1
  498. package/src/components/registration/modalContainer.tsx +2 -1
  499. package/src/constants.ts +1 -0
  500. package/src/index.ts +3 -2
  501. package/src/stories/CartCard.stories.tsx +459 -0
  502. package/src/stories/LiveChatWidget.stories.tsx +461 -0
  503. package/src/styles/livechat.css +263 -0
  504. package/src/templates/Credits.tsx +26 -9
  505. package/src/components/credits/context/hooks/useFunctionMemberPrice.ts +0 -33
  506. package/src/components/credits/context/utils/atobID.ts +0 -8
  507. package/src/components/credits/context/utils/functionDiscountCalculate.ts +0 -57
  508. package/src/components/credits/context/utils/getFunctionMemberPrice.ts +0 -135
  509. package/src/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.ts +0 -51
  510. package/src/components/credits/context/utils/variantGetCoupon.ts +0 -34
@@ -1,17 +1,19 @@
1
1
  import { Container, Heading, Tabs, TabsList, TabsTrigger } from '@anker-in/headless-ui'
2
- import { useMemo, useState, useEffect, useCallback } from 'react'
2
+ import { useMemo, useState, useEffect, useCallback, useRef } from 'react'
3
3
  import Decimal from 'decimal.js'
4
4
 
5
5
  import MemberPriceItem from './MemberPriceItem'
6
6
  import RedeemableItem from '../creditsCash/RedeemableItem'
7
7
  import useRedeemableList from '../context/hooks/useRedeemableList'
8
8
  import RulesModal from '../modal/rulesModal'
9
- import { useProductsByHandles } from '@anker-in/lib'
9
+ import { Pagination } from './Pagination'
10
+ import { useProductsByHandles, useHeadlessContext, gaTrack } from '@anker-in/lib'
10
11
  import { CreditsMemberPriceCopy, MemberPriceProduct } from './type'
11
12
  import { Product, classNames as cn } from '@anker-in/lib'
12
13
  import { useCreditsContext } from '../context/provider'
13
14
  import { RedeemItem } from '../creditsCash/type'
14
15
  import { FunctionDiscountType } from '../context/memberPriceConst'
16
+ import { ROUNDED_BRANDS } from '../../../constants'
15
17
 
16
18
  export const CreditsMemberPrice = ({ copy, id }: { copy: CreditsMemberPriceCopy; id?: string }) => {
17
19
  const [activeTab, setActiveTab] = useState<'memberPrice' | 'redeem'>(copy.tabs[0]?.type || 'memberPrice')
@@ -19,27 +21,38 @@ export const CreditsMemberPrice = ({ copy, id }: { copy: CreditsMemberPriceCopy;
19
21
  const [currentPage, setCurrentPage] = useState(1)
20
22
  const [itemsPerPage, setItemsPerPage] = useState(9) // 默认 1024px 以上:3列 × 3行 = 9
21
23
  const { redeemableList } = useRedeemableList()
22
- const { pageCommon, memberPriceDiscount } = useCreditsContext()
24
+ const { pageCommon, memberPriceDiscount, profile, gtm } = useCreditsContext()
25
+ const { brand } = useHeadlessContext()
26
+ const rounded = ROUNDED_BRANDS.includes(brand)
27
+ const containerRef = useRef<HTMLDivElement>(null)
23
28
 
24
- console.log('copy in CreditsMemberPrice', copy)
25
-
26
- // 定义需要获取的 metafield,包括透明图
29
+ // 定义需要获取的 metafield,包括透明图和优惠券信息
27
30
  const variantMetafieldIdentifiers: any[] = [
28
31
  {
29
32
  namespace: 'global',
30
33
  key: 'transparentImg',
31
34
  },
35
+ {
36
+ namespace: '__discountCodeApp',
37
+ key: 'data',
38
+ },
32
39
  ]
33
40
 
34
41
  // 根据屏幕尺寸动态调整每页显示的商品数量
35
42
  useEffect(() => {
36
43
  const updateItemsPerPage = () => {
37
44
  const width = window.innerWidth
38
- if (width >= 1024) {
39
- // 1024px 以上:3列 × 3行 = 9
45
+ if (width >= 1440) {
46
+ // 1920px 以上:4列 × 3行 = 12
47
+ setItemsPerPage(12)
48
+ } else if (width >= 1024) {
49
+ // 1024px - 1919px:3列 × 3行 = 9个
40
50
  setItemsPerPage(9)
51
+ } else if (width >= 768) {
52
+ // 1024px 以下:3列 × 4行 = 12个
53
+ setItemsPerPage(12)
41
54
  } else {
42
- // 1024px 以下:2列 × 4行 = 8个
55
+ // 768px 以下:2列 × 4行 = 8个
43
56
  setItemsPerPage(8)
44
57
  }
45
58
  }
@@ -57,18 +70,24 @@ export const CreditsMemberPrice = ({ copy, id }: { copy: CreditsMemberPriceCopy;
57
70
  // 根据配置的 ruleId 查找对应的会员价规则
58
71
  const targetRule = useMemo(() => {
59
72
  if (!memberPriceDiscount || !copy.memberPriceTab.memberPriceRuleId) return null
60
- return memberPriceDiscount
61
- .find(rule => String(rule.rule_id) === String(copy.memberPriceTab.memberPriceRuleId))
62
- ?.result_detail?.member_discounts?.find(discount => discount.user_identity === 1)
73
+ return memberPriceDiscount.find(rule => String(rule.rule_id) === String(copy.memberPriceTab.memberPriceRuleId))
63
74
  }, [memberPriceDiscount, copy.memberPriceTab.memberPriceRuleId])
64
75
 
65
- console.log('targetRule in CreditsMemberPrice', targetRule)
66
-
67
76
  const memberPriceHandles = useMemo(() => {
68
77
  if (!targetRule) return []
69
78
 
70
- return targetRule.main_products?.variants?.map(variant => variant.handle) || []
71
- }, [targetRule?.main_products.variants])
79
+ // 获取所有 user_identity === 1 的 discounts
80
+ const allDiscounts = targetRule.result_detail?.member_discounts?.filter(
81
+ (discount: any) => discount.user_identity === 1
82
+ ) || []
83
+
84
+ // 合并所有 discounts 的 variants 的 handles
85
+ const handles = allDiscounts.flatMap((discount: any) =>
86
+ discount.main_products?.variants?.map((variant: any) => variant.handle) || []
87
+ )
88
+
89
+ return handles
90
+ }, [targetRule])
72
91
 
73
92
  // 获取会员价产品数据(通过从 memberPriceDiscount 提取的 handles 获取产品)
74
93
  const { data: memberPriceProducts } = useProductsByHandles({
@@ -86,12 +105,45 @@ export const CreditsMemberPrice = ({ copy, id }: { copy: CreditsMemberPriceCopy;
86
105
  },
87
106
  })
88
107
 
89
- // 计算会员价的辅助函数(仅使用普通会员 user_identity = 1 的折扣)
90
- const calculateMemberPrice = useCallback(
91
- (price: number) => {
92
- if (!targetRule) return null
108
+ // variant metafields 中获取有效的 coupon 折扣金额
109
+ const getCouponDiscount = useCallback((variant: any) => {
110
+ try {
111
+ const discountData = variant?.metafields?.__discountCodeApp?.data
112
+ if (!discountData) return 0
113
+
114
+ // discountData 已经是对象,不需要 JSON.parse
115
+ const discounts = discountData
116
+ if (!Array.isArray(discounts) || discounts.length === 0) return 0
117
+
118
+ // 获取第一个有效的 coupon(检查时间范围)
119
+ const now = new Date()
120
+ const validDiscount = discounts.find((discount: any) => {
121
+ const startsAt = discount.starts_at ? new Date(discount.starts_at) : null
122
+ const endsAt = discount.ends_at ? new Date(discount.ends_at) : null
123
+
124
+ // 检查 coupon 是否在有效期内
125
+ if (startsAt && startsAt > now) return false
126
+ if (endsAt && endsAt < now) return false
127
+
128
+ return true
129
+ })
93
130
 
94
- const discountConfig = targetRule?.discount_conf
131
+ // 返回折扣金额(fixed_amount 类型)
132
+ if (validDiscount?.fixed_value) {
133
+ return parseFloat(validDiscount.fixed_value)
134
+ }
135
+
136
+ return 0
137
+ } catch (error) {
138
+ console.error('Failed to get coupon discount:', error)
139
+ return 0
140
+ }
141
+ }, [])
142
+
143
+ // 计算会员价的辅助函数(仅使用普通会员 user_identity = 1 的折扣,并叠加 coupon 折扣)
144
+ const calculateMemberPrice = useCallback(
145
+ (price: number, discount: any, variant?: any) => {
146
+ const discountConfig = discount?.discount_conf
95
147
  if (!discountConfig) return null
96
148
 
97
149
  // 根据折扣类型计算会员价
@@ -108,28 +160,58 @@ export const CreditsMemberPrice = ({ copy, id }: { copy: CreditsMemberPriceCopy;
108
160
  break
109
161
  }
110
162
 
163
+ // 叠加 coupon 折扣
164
+ if (variant) {
165
+ const couponDiscount = getCouponDiscount(variant)
166
+ if (couponDiscount > 0) {
167
+ salePrice = salePrice.sub(couponDiscount)
168
+ }
169
+ }
170
+
171
+ // 确保价格不为负数
172
+ if (salePrice.lessThan(0)) {
173
+ salePrice = new Decimal(0)
174
+ }
175
+
111
176
  return {
112
177
  memberPrice: salePrice.toNumber(),
113
178
  originalPrice: price,
114
179
  }
115
180
  },
116
- [targetRule]
181
+ [getCouponDiscount]
117
182
  )
118
183
 
119
184
  // 处理会员价产品列表(仅普通会员 user_identity = 1 的折扣)
120
185
  const memberPriceList = useMemo(() => {
121
186
  if (!targetRule || !memberPriceProducts) return []
122
187
 
188
+ // 获取所有 user_identity === 1 的 discounts
189
+ const allDiscounts = targetRule.result_detail?.member_discounts?.filter(
190
+ (discount: any) => discount.user_identity === 1
191
+ ) || []
192
+
193
+ // 合并所有 discounts 的 variants,并保存对应的 discount 信息
194
+ const allVariantsWithDiscount = allDiscounts.flatMap((discount: any) =>
195
+ (discount.main_products?.variants || []).map((variant: any) => ({
196
+ ...variant,
197
+ discount, // 将 discount 信息保存到 variant 中
198
+ }))
199
+ )
200
+
123
201
  return (
124
- (targetRule.main_products.variants
125
- .map(variant => {
126
- const product = memberPriceProducts.find(p => p.handle === variant.handle)
202
+ (allVariantsWithDiscount
203
+ .map((variantWithDiscount: any) => {
204
+ const product = memberPriceProducts.find(p => p.handle === variantWithDiscount.handle)
127
205
  if (!product) return null
128
206
 
129
- const productVariant = product.variants?.find(v => v.sku === variant.sku) || product.variants?.[0]
207
+ const productVariant = product.variants?.find(v => v.sku === variantWithDiscount.sku) || product.variants?.[0]
130
208
  if (!productVariant || !productVariant.availableForSale) return null
131
209
 
132
- const priceResult = calculateMemberPrice(productVariant.price.amount)
210
+ const priceResult = calculateMemberPrice(
211
+ productVariant.price.amount,
212
+ variantWithDiscount.discount,
213
+ productVariant
214
+ )
133
215
  if (!priceResult) return null
134
216
 
135
217
  return {
@@ -208,122 +290,56 @@ export const CreditsMemberPrice = ({ copy, id }: { copy: CreditsMemberPriceCopy;
208
290
  }
209
291
  }, [redeemList, currentPage, itemsPerPage])
210
292
 
211
- // 分页导航组件 - 按照 Figma 设计
212
- const renderPagination = (totalPages: number) => {
213
- if (totalPages <= 1) return null
214
-
215
- // 计算要显示的页码
216
- const getPageNumbers = () => {
217
- const delta = 2 // 当前页前后显示的页码数量
218
- const range = []
219
- const rangeWithDots = []
220
-
221
- for (let i = 1; i <= totalPages; i++) {
222
- if (i === 1 || i === totalPages || (i >= currentPage - delta && i <= currentPage + delta)) {
223
- range.push(i)
224
- }
225
- }
226
-
227
- let prev = 0
228
- for (const i of range) {
229
- if (prev && i - prev > 1) {
230
- rangeWithDots.push('...')
231
- }
232
- rangeWithDots.push(i)
233
- prev = i
293
+ // 处理页面切换,滚动到模块顶部
294
+ const handlePageChange = useCallback(
295
+ (page: number) => {
296
+ setCurrentPage(page)
297
+ // 滚动到模块顶部
298
+ if (containerRef.current) {
299
+ const top = containerRef.current.offsetTop
300
+ window.scrollTo({
301
+ top: top - 80, // 减去 80px 的偏移量,避免被固定头部遮挡
302
+ behavior: 'smooth',
303
+ })
234
304
  }
305
+ },
306
+ [setCurrentPage]
307
+ )
235
308
 
236
- return rangeWithDots
237
- }
238
-
239
- const pages = getPageNumbers()
240
-
241
- return (
242
- <div className="mt-[32px] flex items-center justify-center gap-[8px]">
243
- {/* 上一页按钮 */}
244
- <button
245
- onClick={() => setCurrentPage(prev => Math.max(1, prev - 1))}
246
- disabled={currentPage === 1}
247
- className={cn(
248
- 'flex size-[32px] xl:size-[24px] items-center justify-center overflow-hidden bg-white',
249
- currentPage === 1 && 'cursor-not-allowed opacity-50'
250
- )}
251
- >
252
- <svg width="16" height="16" viewBox="0 0 16 16" fill="none">
253
- <path
254
- d="M10 12L6 8L10 4"
255
- stroke={currentPage === 1 ? '#767880' : '#080A0F'}
256
- strokeWidth="1.5"
257
- strokeLinecap="round"
258
- strokeLinejoin="round"
259
- />
260
- </svg>
261
- </button>
262
-
263
- {/* 页码按钮 */}
264
- {pages.map((page, index) => {
265
- if (page === '...') {
266
- return (
267
- <div
268
- key={`ellipsis-${index}`}
269
- className="flex size-[32px] xl:size-[24px] items-center justify-center overflow-hidden bg-white"
270
- >
271
- <svg width="20" height="20" viewBox="0 0 20 20" fill="none">
272
- <circle cx="4.5" cy="10" r="1.25" fill="#2A2C32" />
273
- <circle cx="10" cy="10" r="1.25" fill="#2A2C32" />
274
- <circle cx="15.5" cy="10" r="1.25" fill="#2A2C32" />
275
- </svg>
276
- </div>
277
- )
278
- }
279
-
280
- const isActive = currentPage === page
281
- return (
282
- <button
283
- key={page}
284
- onClick={() => setCurrentPage(page as number)}
285
- className={cn(
286
- 'flex size-[32px] xl:size-[24px] pt-[4px] items-center justify-center overflow-hidden text-[16px] xl:text-[14px] font-bold leading-[1.4] tracking-[-0.28px]',
287
- isActive ? 'bg-[#080a0f] text-white' : 'bg-white text-[#080a0f]'
288
- )}
289
- >
290
- {page}
291
- </button>
292
- )
293
- })}
294
-
295
- {/* 下一页按钮 */}
296
- <button
297
- onClick={() => setCurrentPage(prev => Math.min(totalPages, prev + 1))}
298
- disabled={currentPage === totalPages}
299
- className={cn(
300
- 'flex size-[32px] xl:size-[24px] items-center justify-center overflow-hidden bg-white',
301
- currentPage === totalPages && 'cursor-not-allowed opacity-50'
302
- )}
303
- >
304
- <svg width="16" height="16" viewBox="0 0 16 16" fill="none">
305
- <path
306
- d="M6 4L10 8L6 12"
307
- stroke={currentPage === totalPages ? '#767880' : '#080A0F'}
308
- strokeWidth="1.5"
309
- strokeLinecap="round"
310
- strokeLinejoin="round"
311
- />
312
- </svg>
313
- </button>
314
- </div>
315
- )
316
- }
309
+ // 处理 tab 切换并发送埋点
310
+ const handleTabChange = useCallback(
311
+ (value: string) => {
312
+ const tabType = value as 'memberPrice' | 'redeem'
313
+ setActiveTab(tabType)
314
+
315
+ // 查找当前 tab label
316
+ const currentTab = copy.tabs.find(tab => tab.type === tabType)
317
+ const tabLabel = currentTab?.label || ''
318
+
319
+ // 发送 tab 点击埋点
320
+ gaTrack({
321
+ event: 'ga4Event',
322
+ event_name: 'lp_button',
323
+ member_active_status: profile?.activated ? 'active' : 'not active',
324
+ event_parameters: {
325
+ page_group: gtm.pageGroup,
326
+ position: copy.title,
327
+ button_name: tabLabel,
328
+ },
329
+ })
330
+ },
331
+ [copy.tabs, copy.title, profile?.activated, gtm.pageGroup]
332
+ )
317
333
 
318
334
  return (
319
- <Container id={id} className={cn('bg-[#F5F5F5]')}>
335
+ <Container id={id} className={cn('bg-[#F5F5F5]')} ref={containerRef}>
320
336
  <Heading as="h2" size="4" html={copy.title} className="mx:px-[16px]" />
321
337
 
322
338
  <Tabs
323
339
  align="left"
324
340
  className="mt-[24px]"
325
341
  value={activeTab}
326
- onValueChange={value => setActiveTab(value as 'memberPrice' | 'redeem')}
342
+ onValueChange={handleTabChange}
327
343
  >
328
344
  <TabsList>
329
345
  {copy.tabs.map((tab, index) => (
@@ -344,7 +360,11 @@ export const CreditsMemberPrice = ({ copy, id }: { copy: CreditsMemberPriceCopy;
344
360
  <MemberPriceItem key={index} itemData={item} copy={copy.memberPriceTab} />
345
361
  ))}
346
362
  </div>
347
- {renderPagination(memberPricePagination.totalPages)}
363
+ <Pagination
364
+ currentPage={currentPage}
365
+ totalPages={memberPricePagination.totalPages}
366
+ onPageChange={handlePageChange}
367
+ />
348
368
  </>
349
369
  )}
350
370
 
@@ -365,7 +385,11 @@ export const CreditsMemberPrice = ({ copy, id }: { copy: CreditsMemberPriceCopy;
365
385
  />
366
386
  ))}
367
387
  </div>
368
- {renderPagination(redeemPagination.totalPages)}
388
+ <Pagination
389
+ currentPage={currentPage}
390
+ totalPages={redeemPagination.totalPages}
391
+ onPageChange={handlePageChange}
392
+ />
369
393
  </>
370
394
  )}
371
395
  </div>
@@ -374,7 +398,7 @@ export const CreditsMemberPrice = ({ copy, id }: { copy: CreditsMemberPriceCopy;
374
398
  {rules && (
375
399
  <RulesModal
376
400
  overlayClassName="md:px-[16px] md:items-center"
377
- className="md:h-fit md:rounded-b-[16px]"
401
+ className={cn('md:h-fit md:rounded-b-[16px]', !rounded && 'md:rounded-none')}
378
402
  isOpen={rules.length > 0}
379
403
  onClose={() => setRules([])}
380
404
  titleClassName="border-b-transparent h-[56px]"
@@ -1,10 +1,11 @@
1
- import { Button, Text, Picture } from '@anker-in/headless-ui'
2
- import { useMemo } from 'react'
1
+ import { Button, Text, Picture, Badge } from '@anker-in/headless-ui'
2
+ import { useMemo, useState } from 'react'
3
3
 
4
4
  import { CreditsMemberPriceCopy, MemberPriceProduct } from './type'
5
- import { formatPrice } from '../context/utils'
6
- import { classNames as cn, ROUNDED_BRANDS, useHeadlessContext, useBuyNow } from '@anker-in/lib'
5
+ import { formatPrice, extractVariantId } from '../context/utils'
6
+ import { classNames as cn, useHeadlessContext, useBuyNow } from '@anker-in/lib'
7
7
  import { useCreditsContext } from '../context/provider'
8
+ import { ROUNDED_BRANDS } from '../../../constants'
8
9
 
9
10
  function MemberPriceItem({
10
11
  itemData,
@@ -16,23 +17,110 @@ function MemberPriceItem({
16
17
  className?: string
17
18
  }) {
18
19
  const { brand, locale } = useHeadlessContext()
19
- const { profile } = useCreditsContext()
20
+ const { profile, openSignUpPopup, cartConfig, gtm } = useCreditsContext()
20
21
  const rounded = ROUNDED_BRANDS.includes(brand)
21
22
 
22
23
  // 使用 buyNow hook 来处理结算
23
24
  const { trigger: buyNow, isMutating: isBuying } = useBuyNow({}, { throwOnError: true })
24
25
 
26
+ // 本地 loading 状态,避免全局 loading 影响所有卡片
27
+ const [isAddingToCart, setIsAddingToCart] = useState(false)
28
+
25
29
  const isAvailable = useMemo(() => {
26
30
  return itemData.productVariant?.availableForSale
27
31
  }, [itemData.productVariant?.availableForSale])
28
32
 
29
- // Learn More 按钮点击 - 跳转到产品详情页
30
- const handleLearnMore = () => {
31
- window.location.href = `/products/${itemData.product.handle}`
33
+ const isLogin = useMemo(() => {
34
+ return !!profile
35
+ }, [profile])
36
+
37
+ // 从 variant metafields 中获取 coupon code
38
+ const getCouponCode = useMemo(() => {
39
+ try {
40
+ const discountData = itemData.productVariant?.metafields?.__discountCodeApp?.data
41
+ if (!discountData) return undefined
42
+
43
+ // discountData 已经是对象,不需要 JSON.parse
44
+ const discounts = discountData
45
+ if (!Array.isArray(discounts) || discounts.length === 0) return undefined
46
+
47
+ // 获取第一个有效的 coupon(检查时间范围)
48
+ const now = new Date()
49
+ const validDiscount = discounts.find((discount: any) => {
50
+ const startsAt = discount.starts_at ? new Date(discount.starts_at) : null
51
+ const endsAt = discount.ends_at ? new Date(discount.ends_at) : null
52
+
53
+ // 检查 coupon 是否在有效期内
54
+ if (startsAt && startsAt > now) return false
55
+ if (endsAt && endsAt < now) return false
56
+
57
+ return true
58
+ })
59
+
60
+ return validDiscount?.title
61
+ } catch (error) {
62
+ console.error('Failed to get discount code:', error)
63
+ return undefined
64
+ }
65
+ }, [itemData.productVariant?.metafields])
66
+
67
+ // Add to Cart 按钮点击 - 调用加购方法
68
+ const handleAddToCart = async () => {
69
+ if (!cartConfig?.addToCart) {
70
+ console.warn('cartConfig.addToCart is required')
71
+ return
72
+ }
73
+
74
+ try {
75
+ setIsAddingToCart(true)
76
+
77
+ // 构建 lineItem attributes
78
+ const lineItemAttributes: Array<{ key: string; value: string }> = []
79
+ if (getCouponCode) {
80
+ lineItemAttributes.push({
81
+ key: '_member_price',
82
+ value: JSON.stringify({ code: getCouponCode }),
83
+ })
84
+ }
85
+
86
+ await cartConfig.addToCart({
87
+ variantList: [
88
+ {
89
+ variant: itemData.productVariant,
90
+ quantity: 1,
91
+ attributes: lineItemAttributes.length > 0 ? lineItemAttributes : undefined,
92
+ },
93
+ ],
94
+ cartAttributes: {
95
+ _member_type: String(profile?.memberType || 0),
96
+ },
97
+ discountCodes: getCouponCode ? [getCouponCode] : undefined,
98
+ })
99
+ } catch (error) {
100
+ console.error('Add to cart failed:', error)
101
+ } finally {
102
+ setIsAddingToCart(false)
103
+ }
32
104
  }
33
105
 
34
- // Shop Now 按钮点击 - 使用 buyNow 进行结算
106
+ // Shop Now 按钮点击 - 检查登录状态后使用 buyNow 进行结算
35
107
  const handleShopNow = () => {
108
+ // 如果未登录,弹出登录弹窗
109
+ if (!isLogin) {
110
+ openSignUpPopup()
111
+ return
112
+ }
113
+
114
+ // 构建 lineItem attributes
115
+ const lineItemAttributes: Array<{ key: string; value: string }> = []
116
+ if (getCouponCode) {
117
+ lineItemAttributes.push({
118
+ key: '_member_price',
119
+ value: JSON.stringify({ code: getCouponCode }),
120
+ })
121
+ }
122
+
123
+ // 已登录,执行购买
36
124
  buyNow({
37
125
  customAttributes: [
38
126
  {
@@ -44,34 +132,50 @@ function MemberPriceItem({
44
132
  {
45
133
  variant: itemData.productVariant,
46
134
  quantity: 1,
135
+ attributes: lineItemAttributes.length > 0 ? lineItemAttributes : undefined,
47
136
  },
48
137
  ],
138
+ discountCodes: getCouponCode ? [getCouponCode] : undefined,
139
+ gtmParams: {
140
+ pageGroup: gtm.pageGroup,
141
+ position: 'mmeber-price-card',
142
+ },
49
143
  })
50
144
  }
51
145
 
52
146
  return (
53
147
  <div
54
148
  className={cn(
55
- 'relative flex flex-col items-center bg-[#EAEAEC] p-[16px] md:rounded-[12px]',
149
+ 'relative flex flex-col items-center bg-[#EAEAEC] px-[24px] pb-[24px] l:px-[8px] l:pb-[8px] rounded-[16px] md-xl:px-[16px] md-xl:pb-[16px] md:rounded-[12px]',
56
150
  !rounded && 'rounded-none md:rounded-none',
151
+ copy.badgeLabel ? 'pt-[48px] l:pt-[44px]' : 'pt-[24px] md-xl:pt-[16px] l:pt-[8px]',
57
152
  className
58
153
  )}
59
154
  >
60
- {/* Member 标签图片 */}
61
- {copy.memberPriceImg && (
62
- <Picture
63
- className="absolute left-[24px] top-[16px] h-[24px] w-auto"
64
- imgClassName="!h-full object-contain"
65
- source={copy.memberPriceImg.url}
66
- alt={copy.memberPriceImg.alt || 'Member Price'}
67
- />
155
+ {/* Member 标签 Badge */}
156
+ {copy.badgeLabel && (
157
+ <Badge
158
+ className="absolute left-[24px] !bg-gradient-brand l:left-[16px] top-[16px] z-10"
159
+ size="lg"
160
+ variant="promotional"
161
+ promotionalType="regular-member"
162
+ >
163
+ {copy.badgeLabel}
164
+ </Badge>
68
165
  )}
69
166
 
70
167
  {/* 产品图片 - 优先使用产品的 metafields 透明图 */}
71
- <a href={`/products/${itemData.product.handle}`} className={cn('relative mx-auto size-[138px]')}>
168
+ <a
169
+ href={
170
+ extractVariantId(itemData.productVariant?.id)
171
+ ? `/products/${itemData.product.handle}?variant=${extractVariantId(itemData.productVariant?.id)}${gtm.pageHandle ? `&ref=${gtm.pageHandle}` : ''}`
172
+ : `/products/${itemData.product.handle}${gtm.pageHandle ? `?ref=${gtm.pageHandle}` : ''}`
173
+ }
174
+ className={cn('relative mx-auto h-[196px] w-fit md:h-[120px] md-xxl:h-[138px]')}
175
+ >
72
176
  <Picture
73
- className="mx-auto size-full"
74
- imgClassName="object-contain"
177
+ className="mx-auto h-full w-auto"
178
+ imgClassName="h-full object-contain"
75
179
  source={
76
180
  itemData?.productVariant?.metafields?.global?.transparentImg ||
77
181
  itemData?.config?.image?.url ||
@@ -81,16 +185,16 @@ function MemberPriceItem({
81
185
  </a>
82
186
 
83
187
  {/* 产品信息 */}
84
- <div className={cn('mt-[4px] w-full')}>
188
+ <div className={cn('mt-[10px] xl:mt-[8px] w-full')}>
85
189
  {/* 产品标题 - 使用产品的真实标题 */}
86
190
  <Text
87
191
  html={itemData?.product?.title}
88
192
  title={itemData?.product?.title}
89
- className="line-clamp-2 text-[24px] l-xxl:text-[20px] l:text-[16px] font-bold leading-[1.2] tracking-[-0.8px] text-[#080A0F]"
193
+ className="line-clamp-2 text-[24px] min-h-[58px] l-xxl:min-h-[48px] l:min-h-[38px] l-xxl:text-[20px] l:text-[16px] font-bold leading-[1.2] tracking-[-0.8px] text-[#080A0F]"
90
194
  />
91
195
 
92
196
  {/* 价格信息 */}
93
- <div className="mt-[16px] flex flex-col gap-[8px]">
197
+ <div className="mt-[24px] l:mt-[12px] flex flex-col gap-[8px] l:gap-0">
94
198
  {/* Member Price 标签 - 使用 text-brand-color-1 */}
95
199
  <Text
96
200
  html={copy.memberPriceLabel}
@@ -125,16 +229,17 @@ function MemberPriceItem({
125
229
  </div>
126
230
 
127
231
  {/* 按钮组 */}
128
- <div className="flex w-full gap-[8px] md:flex-col">
129
- {/* Learn More 按钮 */}
232
+ <div className="flex w-full mt-[8px] gap-[8px] l:flex-col">
233
+ {/* Add to Cart 按钮 */}
130
234
  <Button
131
235
  variant="secondary"
132
236
  className="flex-1 md:w-full"
133
237
  size="lg"
134
- onClick={handleLearnMore}
135
- disabled={!isAvailable}
238
+ onClick={handleAddToCart}
239
+ disabled={!isAvailable || !cartConfig?.addToCart || isAddingToCart}
240
+ loading={isAddingToCart}
136
241
  >
137
- {copy.learnMoreText}
242
+ {copy.addToCart}
138
243
  </Button>
139
244
 
140
245
  {/* Shop Now 按钮 */}