@anker-in/campaign-ui 0.2.11-beta.3 → 0.2.11-beta.31

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 (491) hide show
  1. package/dist/cjs/components/LiveChatWidget/LiveChatWidget.d.ts +63 -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 +46 -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 +41 -0
  35. package/dist/cjs/components/LiveChatWidget/components/MessageContent/ProductCard.js +2 -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 +75 -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 +81 -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 +13 -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 +60 -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 +151 -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 +767 -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/fetcher.d.ts +36 -0
  89. package/dist/cjs/components/LiveChatWidget/utils/fetcher.js +2 -0
  90. package/dist/cjs/components/LiveChatWidget/utils/fetcher.js.map +7 -0
  91. package/dist/cjs/components/LiveChatWidget/utils/messageRenderers.d.ts +64 -0
  92. package/dist/cjs/components/LiveChatWidget/utils/messageRenderers.js +2 -0
  93. package/dist/cjs/components/LiveChatWidget/utils/messageRenderers.js.map +7 -0
  94. package/dist/cjs/components/LiveChatWidget/utils/productTransformers.d.ts +43 -0
  95. package/dist/cjs/components/LiveChatWidget/utils/productTransformers.js +2 -0
  96. package/dist/cjs/components/LiveChatWidget/utils/productTransformers.js.map +7 -0
  97. package/dist/cjs/components/LiveChatWidget/utils/userId.d.ts +18 -0
  98. package/dist/cjs/components/LiveChatWidget/utils/userId.js +2 -0
  99. package/dist/cjs/components/LiveChatWidget/utils/userId.js.map +7 -0
  100. package/dist/cjs/components/LiveChatWidget/utils/validation.d.ts +37 -0
  101. package/dist/cjs/components/LiveChatWidget/utils/validation.js +2 -0
  102. package/dist/cjs/components/LiveChatWidget/utils/validation.js.map +7 -0
  103. package/dist/cjs/components/chat/markdown.js +1 -1
  104. package/dist/cjs/components/chat/markdown.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/creditsAnkersolixTask/CreditsAnkersolixTask.js +1 -1
  117. package/dist/cjs/components/credits/creditsAnkersolixTask/CreditsAnkersolixTask.js.map +3 -3
  118. package/dist/cjs/components/credits/creditsBanner/index.d.ts +2 -0
  119. package/dist/cjs/components/credits/creditsBanner/index.js +12 -1
  120. package/dist/cjs/components/credits/creditsBanner/index.js.map +3 -3
  121. package/dist/cjs/components/credits/creditsBenefits/BenefitItem.js +2 -0
  122. package/dist/cjs/components/credits/creditsBenefits/BenefitItem.js.map +7 -0
  123. package/dist/cjs/components/credits/creditsBenefits/{iconInfo.js → IconInfo.js} +1 -1
  124. package/dist/cjs/components/credits/creditsBenefits/{iconInfo.js.map → IconInfo.js.map} +1 -1
  125. package/dist/cjs/components/credits/creditsCash/CreditsCash.js +1 -1
  126. package/dist/cjs/components/credits/creditsCash/CreditsCash.js.map +3 -3
  127. package/dist/cjs/components/credits/creditsCash/RedeemableItem.js +1 -1
  128. package/dist/cjs/components/credits/creditsCash/RedeemableItem.js.map +3 -3
  129. package/dist/cjs/components/credits/creditsCash/type.d.ts +1 -0
  130. package/dist/cjs/components/credits/creditsCash/type.js +1 -1
  131. package/dist/cjs/components/credits/creditsCash/type.js.map +1 -1
  132. package/dist/cjs/components/credits/creditsFaq/faqItem/FaqItem.js +1 -1
  133. package/dist/cjs/components/credits/creditsFaq/faqItem/FaqItem.js.map +3 -3
  134. package/dist/cjs/components/credits/creditsInfoCard/index.js +1 -1
  135. package/dist/cjs/components/credits/creditsInfoCard/index.js.map +2 -2
  136. package/dist/cjs/components/credits/creditsMemberPrice/CreditsMemberPrice.js +1 -1
  137. package/dist/cjs/components/credits/creditsMemberPrice/CreditsMemberPrice.js.map +3 -3
  138. package/dist/cjs/components/credits/creditsMemberPrice/MemberPriceItem.js +1 -1
  139. package/dist/cjs/components/credits/creditsMemberPrice/MemberPriceItem.js.map +3 -3
  140. package/dist/cjs/components/credits/creditsMemberPrice/type.d.ts +3 -5
  141. package/dist/cjs/components/credits/creditsMemberPrice/type.js +1 -1
  142. package/dist/cjs/components/credits/creditsMemberPrice/type.js.map +1 -1
  143. package/dist/cjs/components/credits/creditsNavigation/CreditsNavigation.js +1 -1
  144. package/dist/cjs/components/credits/creditsNavigation/CreditsNavigation.js.map +2 -2
  145. package/dist/cjs/components/credits/creditsRedeemList/CreditsRedeemList.js +1 -1
  146. package/dist/cjs/components/credits/creditsRedeemList/CreditsRedeemList.js.map +3 -3
  147. package/dist/cjs/components/credits/creditsRedeemList/RedeemProductModal/ProductInfo.js +1 -1
  148. package/dist/cjs/components/credits/creditsRedeemList/RedeemProductModal/ProductInfo.js.map +2 -2
  149. package/dist/cjs/components/credits/creditsRedeemList/RedeemableItem.js +1 -1
  150. package/dist/cjs/components/credits/creditsRedeemList/RedeemableItem.js.map +3 -3
  151. package/dist/cjs/components/credits/creditsWaysToGetCredits/CreditsWaysToGetCredits.js +1 -1
  152. package/dist/cjs/components/credits/creditsWaysToGetCredits/CreditsWaysToGetCredits.js.map +3 -3
  153. package/dist/cjs/components/index.d.ts +3 -1
  154. package/dist/cjs/components/index.js +1 -1
  155. package/dist/cjs/components/index.js.map +3 -3
  156. package/dist/cjs/components/registration/authCodeActivate/index.js +1 -1
  157. package/dist/cjs/components/registration/authCodeActivate/index.js.map +2 -2
  158. package/dist/cjs/stories/CartCard.stories.d.ts +33 -0
  159. package/dist/cjs/stories/CartCard.stories.js +21 -0
  160. package/dist/cjs/stories/CartCard.stories.js.map +7 -0
  161. package/dist/cjs/stories/LiveChatWidget.stories.d.ts +108 -0
  162. package/dist/cjs/stories/LiveChatWidget.stories.js +149 -0
  163. package/dist/cjs/stories/LiveChatWidget.stories.js.map +7 -0
  164. package/dist/cjs/templates/{credits.d.ts → Credits.d.ts} +16 -1
  165. package/dist/cjs/templates/Credits.js +2 -0
  166. package/dist/cjs/templates/Credits.js.map +7 -0
  167. package/dist/esm/components/LiveChatWidget/LiveChatWidget.d.ts +63 -0
  168. package/dist/esm/components/LiveChatWidget/LiveChatWidget.js +2 -0
  169. package/dist/esm/components/LiveChatWidget/LiveChatWidget.js.map +7 -0
  170. package/dist/esm/components/LiveChatWidget/api/chat.d.ts +46 -0
  171. package/dist/esm/components/LiveChatWidget/api/chat.js +3 -0
  172. package/dist/esm/components/LiveChatWidget/api/chat.js.map +7 -0
  173. package/dist/esm/components/LiveChatWidget/components/ChatBubble.d.ts +68 -0
  174. package/dist/esm/components/LiveChatWidget/components/ChatBubble.js +2 -0
  175. package/dist/esm/components/LiveChatWidget/components/ChatBubble.js.map +7 -0
  176. package/dist/esm/components/LiveChatWidget/components/ChatHeader.d.ts +57 -0
  177. package/dist/esm/components/LiveChatWidget/components/ChatHeader.js +2 -0
  178. package/dist/esm/components/LiveChatWidget/components/ChatHeader.js.map +7 -0
  179. package/dist/esm/components/LiveChatWidget/components/ChatInput.d.ts +70 -0
  180. package/dist/esm/components/LiveChatWidget/components/ChatInput.js +2 -0
  181. package/dist/esm/components/LiveChatWidget/components/ChatInput.js.map +7 -0
  182. package/dist/esm/components/LiveChatWidget/components/ChatMessage.d.ts +59 -0
  183. package/dist/esm/components/LiveChatWidget/components/ChatMessage.js +5 -0
  184. package/dist/esm/components/LiveChatWidget/components/ChatMessage.js.map +7 -0
  185. package/dist/esm/components/LiveChatWidget/components/ChatWindow.d.ts +127 -0
  186. package/dist/esm/components/LiveChatWidget/components/ChatWindow.js +2 -0
  187. package/dist/esm/components/LiveChatWidget/components/ChatWindow.js.map +7 -0
  188. package/dist/esm/components/LiveChatWidget/components/MessageContent/CartCard.d.ts +54 -0
  189. package/dist/esm/components/LiveChatWidget/components/MessageContent/CartCard.js +2 -0
  190. package/dist/esm/components/LiveChatWidget/components/MessageContent/CartCard.js.map +7 -0
  191. package/dist/esm/components/LiveChatWidget/components/MessageContent/ErrorBlock.d.ts +33 -0
  192. package/dist/esm/components/LiveChatWidget/components/MessageContent/ErrorBlock.js +2 -0
  193. package/dist/esm/components/LiveChatWidget/components/MessageContent/ErrorBlock.js.map +7 -0
  194. package/dist/esm/components/LiveChatWidget/components/MessageContent/FAQList.d.ts +16 -0
  195. package/dist/esm/components/LiveChatWidget/components/MessageContent/FAQList.js +2 -0
  196. package/dist/esm/components/LiveChatWidget/components/MessageContent/FAQList.js.map +7 -0
  197. package/dist/esm/components/LiveChatWidget/components/MessageContent/PolicyBlock.d.ts +45 -0
  198. package/dist/esm/components/LiveChatWidget/components/MessageContent/PolicyBlock.js +5 -0
  199. package/dist/esm/components/LiveChatWidget/components/MessageContent/PolicyBlock.js.map +7 -0
  200. package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductCard.d.ts +41 -0
  201. package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductCard.js +2 -0
  202. package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductCard.js.map +7 -0
  203. package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductComparison.d.ts +75 -0
  204. package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductComparison.js +2 -0
  205. package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductComparison.js.map +7 -0
  206. package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductList.d.ts +47 -0
  207. package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductList.js +2 -0
  208. package/dist/esm/components/LiveChatWidget/components/MessageContent/ProductList.js.map +7 -0
  209. package/dist/esm/components/LiveChatWidget/components/MessageContent/PromotionList.d.ts +81 -0
  210. package/dist/esm/components/LiveChatWidget/components/MessageContent/PromotionList.js +2 -0
  211. package/dist/esm/components/LiveChatWidget/components/MessageContent/PromotionList.js.map +7 -0
  212. package/dist/esm/components/LiveChatWidget/components/MessageContent/QuickReplies.d.ts +54 -0
  213. package/dist/esm/components/LiveChatWidget/components/MessageContent/QuickReplies.js +2 -0
  214. package/dist/esm/components/LiveChatWidget/components/MessageContent/QuickReplies.js.map +7 -0
  215. package/dist/esm/components/LiveChatWidget/components/MessageContent/TextBlock.d.ts +31 -0
  216. package/dist/esm/components/LiveChatWidget/components/MessageContent/TextBlock.js +2 -0
  217. package/dist/esm/components/LiveChatWidget/components/MessageContent/TextBlock.js.map +7 -0
  218. package/dist/esm/components/LiveChatWidget/components/MessageContent/ThinkingBlock.d.ts +31 -0
  219. package/dist/esm/components/LiveChatWidget/components/MessageContent/ThinkingBlock.js +2 -0
  220. package/dist/esm/components/LiveChatWidget/components/MessageContent/ThinkingBlock.js.map +7 -0
  221. package/dist/esm/components/LiveChatWidget/components/MessageContent/index.d.ts +15 -0
  222. package/dist/esm/components/LiveChatWidget/components/MessageContent/index.js +2 -0
  223. package/dist/esm/components/LiveChatWidget/components/MessageContent/index.js.map +7 -0
  224. package/dist/esm/components/LiveChatWidget/components/MessageContent.d.ts +63 -0
  225. package/dist/esm/components/LiveChatWidget/components/MessageContent.js +2 -0
  226. package/dist/esm/components/LiveChatWidget/components/MessageContent.js.map +7 -0
  227. package/dist/esm/components/LiveChatWidget/components/MessageList.d.ts +74 -0
  228. package/dist/esm/components/LiveChatWidget/components/MessageList.js +5 -0
  229. package/dist/esm/components/LiveChatWidget/components/MessageList.js.map +7 -0
  230. package/dist/esm/components/LiveChatWidget/components/ScrollAnchor.d.ts +44 -0
  231. package/dist/esm/components/LiveChatWidget/components/ScrollAnchor.js +2 -0
  232. package/dist/esm/components/LiveChatWidget/components/ScrollAnchor.js.map +7 -0
  233. package/dist/esm/components/LiveChatWidget/constants.d.ts +13 -0
  234. package/dist/esm/components/LiveChatWidget/constants.js +2 -0
  235. package/dist/esm/components/LiveChatWidget/constants.js.map +7 -0
  236. package/dist/esm/components/LiveChatWidget/hooks/useChatAPI.d.ts +60 -0
  237. package/dist/esm/components/LiveChatWidget/hooks/useChatAPI.js +2 -0
  238. package/dist/esm/components/LiveChatWidget/hooks/useChatAPI.js.map +7 -0
  239. package/dist/esm/components/LiveChatWidget/hooks/useChatState.d.ts +151 -0
  240. package/dist/esm/components/LiveChatWidget/hooks/useChatState.js +2 -0
  241. package/dist/esm/components/LiveChatWidget/hooks/useChatState.js.map +7 -0
  242. package/dist/esm/components/LiveChatWidget/hooks/useSession.d.ts +37 -0
  243. package/dist/esm/components/LiveChatWidget/hooks/useSession.js +2 -0
  244. package/dist/esm/components/LiveChatWidget/hooks/useSession.js.map +7 -0
  245. package/dist/esm/components/LiveChatWidget/index.d.ts +12 -0
  246. package/dist/esm/components/LiveChatWidget/index.js +2 -0
  247. package/dist/esm/components/LiveChatWidget/index.js.map +7 -0
  248. package/dist/esm/components/LiveChatWidget/types.d.ts +767 -0
  249. package/dist/esm/components/LiveChatWidget/types.js +1 -0
  250. package/dist/esm/components/LiveChatWidget/types.js.map +7 -0
  251. package/dist/esm/components/LiveChatWidget/utils/cartTransformers.d.ts +25 -0
  252. package/dist/esm/components/LiveChatWidget/utils/cartTransformers.js +2 -0
  253. package/dist/esm/components/LiveChatWidget/utils/cartTransformers.js.map +7 -0
  254. package/dist/esm/components/LiveChatWidget/utils/fetcher.d.ts +36 -0
  255. package/dist/esm/components/LiveChatWidget/utils/fetcher.js +2 -0
  256. package/dist/esm/components/LiveChatWidget/utils/fetcher.js.map +7 -0
  257. package/dist/esm/components/LiveChatWidget/utils/messageRenderers.d.ts +64 -0
  258. package/dist/esm/components/LiveChatWidget/utils/messageRenderers.js +2 -0
  259. package/dist/esm/components/LiveChatWidget/utils/messageRenderers.js.map +7 -0
  260. package/dist/esm/components/LiveChatWidget/utils/productTransformers.d.ts +43 -0
  261. package/dist/esm/components/LiveChatWidget/utils/productTransformers.js +2 -0
  262. package/dist/esm/components/LiveChatWidget/utils/productTransformers.js.map +7 -0
  263. package/dist/esm/components/LiveChatWidget/utils/userId.d.ts +18 -0
  264. package/dist/esm/components/LiveChatWidget/utils/userId.js +2 -0
  265. package/dist/esm/components/LiveChatWidget/utils/userId.js.map +7 -0
  266. package/dist/esm/components/LiveChatWidget/utils/validation.d.ts +37 -0
  267. package/dist/esm/components/LiveChatWidget/utils/validation.js +2 -0
  268. package/dist/esm/components/LiveChatWidget/utils/validation.js.map +7 -0
  269. package/dist/esm/components/chat/markdown.js +1 -1
  270. package/dist/esm/components/chat/markdown.js.map +2 -2
  271. package/dist/esm/components/credits/context/hooks/useRedeemableList.js +1 -1
  272. package/dist/esm/components/credits/context/hooks/useRedeemableList.js.map +2 -2
  273. package/dist/esm/components/credits/context/memberPriceConst.d.ts +0 -5
  274. package/dist/esm/components/credits/context/memberPriceConst.js +1 -1
  275. package/dist/esm/components/credits/context/memberPriceConst.js.map +3 -3
  276. package/dist/esm/components/credits/context/memberPriceTypes.d.ts +1 -22
  277. package/dist/esm/components/credits/context/provider.d.ts +16 -1
  278. package/dist/esm/components/credits/context/provider.js +1 -1
  279. package/dist/esm/components/credits/context/provider.js.map +3 -3
  280. package/dist/esm/components/credits/creditsAnkersolixTask/CreditsAnkersolixTask.js +1 -1
  281. package/dist/esm/components/credits/creditsAnkersolixTask/CreditsAnkersolixTask.js.map +3 -3
  282. package/dist/esm/components/credits/creditsBanner/index.d.ts +2 -0
  283. package/dist/esm/components/credits/creditsBanner/index.js +12 -1
  284. package/dist/esm/components/credits/creditsBanner/index.js.map +3 -3
  285. package/dist/esm/components/credits/creditsBenefits/BenefitItem.js +2 -0
  286. package/dist/esm/components/credits/creditsBenefits/BenefitItem.js.map +7 -0
  287. package/dist/esm/components/credits/creditsBenefits/{iconInfo.js → IconInfo.js} +1 -1
  288. package/dist/esm/components/credits/creditsBenefits/{iconInfo.js.map → IconInfo.js.map} +1 -1
  289. package/dist/esm/components/credits/creditsCash/CreditsCash.js +1 -1
  290. package/dist/esm/components/credits/creditsCash/CreditsCash.js.map +3 -3
  291. package/dist/esm/components/credits/creditsCash/RedeemableItem.js +1 -1
  292. package/dist/esm/components/credits/creditsCash/RedeemableItem.js.map +3 -3
  293. package/dist/esm/components/credits/creditsCash/type.d.ts +1 -0
  294. package/dist/esm/components/credits/creditsFaq/faqItem/FaqItem.js +1 -1
  295. package/dist/esm/components/credits/creditsFaq/faqItem/FaqItem.js.map +3 -3
  296. package/dist/esm/components/credits/creditsInfoCard/index.js +1 -1
  297. package/dist/esm/components/credits/creditsInfoCard/index.js.map +2 -2
  298. package/dist/esm/components/credits/creditsMemberPrice/CreditsMemberPrice.js +1 -1
  299. package/dist/esm/components/credits/creditsMemberPrice/CreditsMemberPrice.js.map +3 -3
  300. package/dist/esm/components/credits/creditsMemberPrice/MemberPriceItem.js +1 -1
  301. package/dist/esm/components/credits/creditsMemberPrice/MemberPriceItem.js.map +3 -3
  302. package/dist/esm/components/credits/creditsMemberPrice/type.d.ts +3 -5
  303. package/dist/esm/components/credits/creditsNavigation/CreditsNavigation.js +1 -1
  304. package/dist/esm/components/credits/creditsNavigation/CreditsNavigation.js.map +2 -2
  305. package/dist/esm/components/credits/creditsRedeemList/CreditsRedeemList.js +1 -1
  306. package/dist/esm/components/credits/creditsRedeemList/CreditsRedeemList.js.map +3 -3
  307. package/dist/esm/components/credits/creditsRedeemList/RedeemProductModal/ProductInfo.js +1 -1
  308. package/dist/esm/components/credits/creditsRedeemList/RedeemProductModal/ProductInfo.js.map +2 -2
  309. package/dist/esm/components/credits/creditsRedeemList/RedeemableItem.js +1 -1
  310. package/dist/esm/components/credits/creditsRedeemList/RedeemableItem.js.map +3 -3
  311. package/dist/esm/components/credits/creditsWaysToGetCredits/CreditsWaysToGetCredits.js +1 -1
  312. package/dist/esm/components/credits/creditsWaysToGetCredits/CreditsWaysToGetCredits.js.map +3 -3
  313. package/dist/esm/components/index.d.ts +3 -1
  314. package/dist/esm/components/index.js +1 -1
  315. package/dist/esm/components/index.js.map +3 -3
  316. package/dist/esm/components/registration/authCodeActivate/index.js +1 -1
  317. package/dist/esm/components/registration/authCodeActivate/index.js.map +2 -2
  318. package/dist/esm/stories/CartCard.stories.d.ts +33 -0
  319. package/dist/esm/stories/CartCard.stories.js +21 -0
  320. package/dist/esm/stories/CartCard.stories.js.map +7 -0
  321. package/dist/esm/stories/LiveChatWidget.stories.d.ts +108 -0
  322. package/dist/esm/stories/LiveChatWidget.stories.js +149 -0
  323. package/dist/esm/stories/LiveChatWidget.stories.js.map +7 -0
  324. package/dist/esm/templates/{credits.d.ts → Credits.d.ts} +16 -1
  325. package/dist/esm/templates/Credits.js +2 -0
  326. package/dist/esm/templates/Credits.js.map +7 -0
  327. package/dist/index.d.mts +1305 -0
  328. package/dist/index.d.ts +1305 -0
  329. package/dist/index.js +26656 -0
  330. package/dist/index.js.map +1 -0
  331. package/dist/index.mjs +26641 -0
  332. package/dist/index.mjs.map +1 -0
  333. package/package.json +7 -3
  334. package/src/components/LiveChatWidget/LiveChatWidget.tsx +732 -0
  335. package/src/components/LiveChatWidget/api/chat.ts +174 -0
  336. package/src/components/LiveChatWidget/components/ChatBubble.tsx +152 -0
  337. package/src/components/LiveChatWidget/components/ChatHeader.tsx +150 -0
  338. package/src/components/LiveChatWidget/components/ChatInput.tsx +241 -0
  339. package/src/components/LiveChatWidget/components/ChatMessage.tsx +190 -0
  340. package/src/components/LiveChatWidget/components/ChatWindow.tsx +353 -0
  341. package/src/components/LiveChatWidget/components/MessageContent/CartCard.tsx +202 -0
  342. package/src/components/LiveChatWidget/components/MessageContent/ErrorBlock.tsx +75 -0
  343. package/src/components/LiveChatWidget/components/MessageContent/FAQList.tsx +127 -0
  344. package/src/components/LiveChatWidget/components/MessageContent/PolicyBlock.tsx +150 -0
  345. package/src/components/LiveChatWidget/components/MessageContent/ProductCard.tsx +218 -0
  346. package/src/components/LiveChatWidget/components/MessageContent/ProductComparison.tsx +359 -0
  347. package/src/components/LiveChatWidget/components/MessageContent/ProductList.tsx +293 -0
  348. package/src/components/LiveChatWidget/components/MessageContent/PromotionList.tsx +170 -0
  349. package/src/components/LiveChatWidget/components/MessageContent/QuickReplies.tsx +91 -0
  350. package/src/components/LiveChatWidget/components/MessageContent/TextBlock.tsx +89 -0
  351. package/src/components/LiveChatWidget/components/MessageContent/ThinkingBlock.tsx +53 -0
  352. package/src/components/LiveChatWidget/components/MessageContent/index.ts +16 -0
  353. package/src/components/LiveChatWidget/components/MessageContent.tsx +113 -0
  354. package/src/components/LiveChatWidget/components/MessageList.tsx +261 -0
  355. package/src/components/LiveChatWidget/components/ScrollAnchor.tsx +75 -0
  356. package/src/components/LiveChatWidget/constants.ts +36 -0
  357. package/src/components/LiveChatWidget/hooks/useChatAPI.ts +146 -0
  358. package/src/components/LiveChatWidget/hooks/useChatState.ts +1086 -0
  359. package/src/components/LiveChatWidget/hooks/useSession.ts +123 -0
  360. package/src/components/LiveChatWidget/index.tsx +62 -0
  361. package/src/components/LiveChatWidget/types.ts +949 -0
  362. package/src/components/LiveChatWidget/utils/cartTransformers.ts +72 -0
  363. package/src/components/LiveChatWidget/utils/fetcher.ts +126 -0
  364. package/src/components/LiveChatWidget/utils/messageRenderers.ts +120 -0
  365. package/src/components/LiveChatWidget/utils/productTransformers.ts +149 -0
  366. package/src/components/LiveChatWidget/utils/userId.ts +140 -0
  367. package/src/components/LiveChatWidget/utils/validation.ts +99 -0
  368. package/src/components/chat/markdown.tsx +1 -1
  369. package/src/components/credits/context/hooks/useRedeemableList.ts +1 -1
  370. package/src/components/credits/context/memberPriceConst.ts +0 -7
  371. package/src/components/credits/context/memberPriceTypes.ts +1 -26
  372. package/src/components/credits/context/provider.tsx +16 -0
  373. package/src/components/credits/creditsAnkersolixTask/CreditsAnkersolixTask.tsx +26 -26
  374. package/src/components/credits/creditsBanner/index.tsx +31 -3
  375. package/src/components/credits/creditsBenefits/BenefitItem.tsx +11 -4
  376. package/src/components/credits/creditsBenefits/IconInfo.tsx +1 -1
  377. package/src/components/credits/creditsCash/CreditsCash.tsx +6 -3
  378. package/src/components/credits/creditsCash/RedeemableItem.tsx +23 -10
  379. package/src/components/credits/creditsCash/type.ts +1 -0
  380. package/src/components/credits/creditsFaq/faqItem/FaqItem.tsx +25 -23
  381. package/src/components/credits/creditsInfoCard/index.tsx +8 -2
  382. package/src/components/credits/creditsMemberPrice/CreditsMemberPrice.tsx +124 -25
  383. package/src/components/credits/creditsMemberPrice/MemberPriceItem.tsx +113 -31
  384. package/src/components/credits/creditsMemberPrice/type.ts +3 -5
  385. package/src/components/credits/creditsNavigation/CreditsNavigation.tsx +3 -3
  386. package/src/components/credits/creditsRedeemList/CreditsRedeemList.tsx +31 -18
  387. package/src/components/credits/creditsRedeemList/RedeemProductModal/ProductInfo.tsx +6 -4
  388. package/src/components/credits/creditsRedeemList/RedeemableItem.tsx +19 -6
  389. package/src/components/credits/creditsWaysToGetCredits/CreditsWaysToGetCredits.tsx +20 -17
  390. package/src/components/index.ts +23 -1
  391. package/src/components/registration/authCodeActivate/index.tsx +2 -0
  392. package/src/stories/CartCard.stories.tsx +459 -0
  393. package/src/stories/LiveChatWidget.stories.tsx +754 -0
  394. package/src/styles/livechat.css +268 -0
  395. package/src/templates/Credits.tsx +27 -9
  396. package/dist/cjs/components/credits/context/hooks/useFunctionMemberPrice.d.ts +0 -7
  397. package/dist/cjs/components/credits/context/hooks/useFunctionMemberPrice.js +0 -2
  398. package/dist/cjs/components/credits/context/hooks/useFunctionMemberPrice.js.map +0 -7
  399. package/dist/cjs/components/credits/context/hooks/useSendEmailValidation.d.ts +0 -1
  400. package/dist/cjs/components/credits/context/hooks/useSendEmailValidation.js +0 -2
  401. package/dist/cjs/components/credits/context/hooks/useSendEmailValidation.js.map +0 -7
  402. package/dist/cjs/components/credits/context/hooks/useSubscriptions.d.ts +0 -9
  403. package/dist/cjs/components/credits/context/hooks/useSubscriptions.js +0 -2
  404. package/dist/cjs/components/credits/context/hooks/useSubscriptions.js.map +0 -7
  405. package/dist/cjs/components/credits/context/utils/atobID.d.ts +0 -1
  406. package/dist/cjs/components/credits/context/utils/atobID.js +0 -2
  407. package/dist/cjs/components/credits/context/utils/atobID.js.map +0 -7
  408. package/dist/cjs/components/credits/context/utils/functionDiscountCalculate.d.ts +0 -5
  409. package/dist/cjs/components/credits/context/utils/functionDiscountCalculate.js +0 -2
  410. package/dist/cjs/components/credits/context/utils/functionDiscountCalculate.js.map +0 -7
  411. package/dist/cjs/components/credits/context/utils/getFunctionMemberPrice.d.ts +0 -8
  412. package/dist/cjs/components/credits/context/utils/getFunctionMemberPrice.js +0 -2
  413. package/dist/cjs/components/credits/context/utils/getFunctionMemberPrice.js.map +0 -7
  414. package/dist/cjs/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.d.ts +0 -9
  415. package/dist/cjs/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.js +0 -2
  416. package/dist/cjs/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.js.map +0 -7
  417. package/dist/cjs/components/credits/context/utils/variantGetCoupon.d.ts +0 -6
  418. package/dist/cjs/components/credits/context/utils/variantGetCoupon.js +0 -2
  419. package/dist/cjs/components/credits/context/utils/variantGetCoupon.js.map +0 -7
  420. package/dist/cjs/components/credits/creditsBenefits/benefitItem.js +0 -2
  421. package/dist/cjs/components/credits/creditsBenefits/benefitItem.js.map +0 -7
  422. package/dist/cjs/helpers/fetchResponse.d.ts +0 -14
  423. package/dist/cjs/helpers/fetchResponse.js +0 -2
  424. package/dist/cjs/helpers/fetchResponse.js.map +0 -7
  425. package/dist/cjs/helpers/fetcher.d.ts +0 -2
  426. package/dist/cjs/helpers/fetcher.js +0 -2
  427. package/dist/cjs/helpers/fetcher.js.map +0 -7
  428. package/dist/cjs/helpers/index.d.ts +0 -2
  429. package/dist/cjs/helpers/index.js +0 -2
  430. package/dist/cjs/helpers/index.js.map +0 -7
  431. package/dist/cjs/helpers/track.d.ts +0 -19
  432. package/dist/cjs/helpers/track.js +0 -2
  433. package/dist/cjs/helpers/track.js.map +0 -7
  434. package/dist/cjs/helpers/utils.d.ts +0 -3
  435. package/dist/cjs/helpers/utils.js +0 -2
  436. package/dist/cjs/helpers/utils.js.map +0 -7
  437. package/dist/cjs/templates/credits.js +0 -2
  438. package/dist/cjs/templates/credits.js.map +0 -7
  439. package/dist/esm/components/credits/context/hooks/useFunctionMemberPrice.d.ts +0 -7
  440. package/dist/esm/components/credits/context/hooks/useFunctionMemberPrice.js +0 -2
  441. package/dist/esm/components/credits/context/hooks/useFunctionMemberPrice.js.map +0 -7
  442. package/dist/esm/components/credits/context/hooks/useSendEmailValidation.d.ts +0 -1
  443. package/dist/esm/components/credits/context/hooks/useSendEmailValidation.js +0 -2
  444. package/dist/esm/components/credits/context/hooks/useSendEmailValidation.js.map +0 -7
  445. package/dist/esm/components/credits/context/hooks/useSubscriptions.d.ts +0 -9
  446. package/dist/esm/components/credits/context/hooks/useSubscriptions.js +0 -2
  447. package/dist/esm/components/credits/context/hooks/useSubscriptions.js.map +0 -7
  448. package/dist/esm/components/credits/context/utils/atobID.d.ts +0 -1
  449. package/dist/esm/components/credits/context/utils/atobID.js +0 -2
  450. package/dist/esm/components/credits/context/utils/atobID.js.map +0 -7
  451. package/dist/esm/components/credits/context/utils/functionDiscountCalculate.d.ts +0 -5
  452. package/dist/esm/components/credits/context/utils/functionDiscountCalculate.js +0 -2
  453. package/dist/esm/components/credits/context/utils/functionDiscountCalculate.js.map +0 -7
  454. package/dist/esm/components/credits/context/utils/getFunctionMemberPrice.d.ts +0 -8
  455. package/dist/esm/components/credits/context/utils/getFunctionMemberPrice.js +0 -2
  456. package/dist/esm/components/credits/context/utils/getFunctionMemberPrice.js.map +0 -7
  457. package/dist/esm/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.d.ts +0 -9
  458. package/dist/esm/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.js +0 -2
  459. package/dist/esm/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.js.map +0 -7
  460. package/dist/esm/components/credits/context/utils/variantGetCoupon.d.ts +0 -6
  461. package/dist/esm/components/credits/context/utils/variantGetCoupon.js +0 -2
  462. package/dist/esm/components/credits/context/utils/variantGetCoupon.js.map +0 -7
  463. package/dist/esm/components/credits/creditsBenefits/benefitItem.js +0 -2
  464. package/dist/esm/components/credits/creditsBenefits/benefitItem.js.map +0 -7
  465. package/dist/esm/helpers/fetchResponse.d.ts +0 -14
  466. package/dist/esm/helpers/fetchResponse.js +0 -2
  467. package/dist/esm/helpers/fetchResponse.js.map +0 -7
  468. package/dist/esm/helpers/fetcher.d.ts +0 -2
  469. package/dist/esm/helpers/fetcher.js +0 -2
  470. package/dist/esm/helpers/fetcher.js.map +0 -7
  471. package/dist/esm/helpers/index.d.ts +0 -2
  472. package/dist/esm/helpers/index.js +0 -2
  473. package/dist/esm/helpers/index.js.map +0 -7
  474. package/dist/esm/helpers/track.d.ts +0 -19
  475. package/dist/esm/helpers/track.js +0 -2
  476. package/dist/esm/helpers/track.js.map +0 -7
  477. package/dist/esm/helpers/utils.d.ts +0 -3
  478. package/dist/esm/helpers/utils.js +0 -2
  479. package/dist/esm/helpers/utils.js.map +0 -7
  480. package/dist/esm/templates/credits.js +0 -2
  481. package/dist/esm/templates/credits.js.map +0 -7
  482. package/src/components/credits/context/hooks/useFunctionMemberPrice.ts +0 -33
  483. package/src/components/credits/context/utils/atobID.ts +0 -8
  484. package/src/components/credits/context/utils/functionDiscountCalculate.ts +0 -57
  485. package/src/components/credits/context/utils/getFunctionMemberPrice.ts +0 -135
  486. package/src/components/credits/context/utils/getFunctionMemberPriceDiscountConfig.ts +0 -51
  487. package/src/components/credits/context/utils/variantGetCoupon.ts +0 -34
  488. /package/dist/cjs/components/credits/creditsBenefits/{benefitItem.d.ts → BenefitItem.d.ts} +0 -0
  489. /package/dist/cjs/components/credits/creditsBenefits/{iconInfo.d.ts → IconInfo.d.ts} +0 -0
  490. /package/dist/esm/components/credits/creditsBenefits/{benefitItem.d.ts → BenefitItem.d.ts} +0 -0
  491. /package/dist/esm/components/credits/creditsBenefits/{iconInfo.d.ts → IconInfo.d.ts} +0 -0
@@ -0,0 +1,16 @@
1
+ /**
2
+ * 消息内容渲染器统一导出
3
+ */
4
+
5
+ export { MessageContent } from '../MessageContent'
6
+ export { TextBlock } from './TextBlock'
7
+ export { ProductCard } from './ProductCard'
8
+ export { ProductList } from './ProductList'
9
+ export { ProductComparison, ProductComparisonRenderer } from './ProductComparison'
10
+ export { PolicyBlock } from './PolicyBlock'
11
+ export { QuickReplies, createQuickRepliesRenderer } from './QuickReplies'
12
+ export { ThinkingBlock } from './ThinkingBlock'
13
+ export { ErrorBlock } from './ErrorBlock'
14
+ export { FAQList, FAQListRenderer } from './FAQList.js'
15
+ export { PromotionList, PromotionListRenderer } from './PromotionList.js'
16
+ export { CartCard } from './CartCard.js'
@@ -0,0 +1,113 @@
1
+ /**
2
+ * 消息内容容器组件
3
+ * 根据消息内容类型分发到对应的渲染器
4
+ * 基于 specs/livechat-widget/plan.md 的消息内容渲染设计
5
+ */
6
+
7
+ import React from 'react'
8
+ import type { MessageContent as MessageContentType, MessageRenderer } from '../types'
9
+ import { MessageRendererRegistry } from '../utils/messageRenderers'
10
+
11
+ export interface MessageContentProps {
12
+ /**
13
+ * 消息内容
14
+ */
15
+ content: MessageContentType
16
+
17
+ /**
18
+ * 是否为用户消息
19
+ */
20
+ isUser: boolean
21
+
22
+ /**
23
+ * 是否为系统消息
24
+ */
25
+ isSystem: boolean
26
+
27
+ /**
28
+ * 自定义渲染器注册表
29
+ */
30
+ rendererRegistry?: MessageRendererRegistry
31
+
32
+ /**
33
+ * 默认渲染器(当找不到对应渲染器时使用)
34
+ */
35
+ defaultRenderer?: MessageRenderer
36
+
37
+ /**
38
+ * 自定义样式类名
39
+ */
40
+ className?: string
41
+
42
+ /**
43
+ * 商品添加到购物车回调
44
+ */
45
+ onAddToCart?: (product: any) => void
46
+ }
47
+
48
+ /**
49
+ * 默认渲染器 - 显示未知类型提示
50
+ */
51
+ const defaultFallbackRenderer: MessageRenderer = {
52
+ render: content => <div className="text-sm italic text-gray-500">未知消息类型: {content.type}</div>,
53
+ }
54
+
55
+ /**
56
+ * 消息内容容器组件
57
+ *
58
+ * 功能:
59
+ * - 根据 content.type 分发到对应的渲染器
60
+ * - 支持自定义渲染器注册表
61
+ * - 提供默认兜底渲染器
62
+ *
63
+ * 渲染流程:
64
+ * 1. 检查自定义渲染器注册表是否有对应类型
65
+ * 2. 如果有,使用自定义渲染器
66
+ * 3. 如果没有,使用默认渲染器
67
+ * 4. 如果默认渲染器也没有,显示未知类型提示
68
+ *
69
+ * @example
70
+ * ```tsx
71
+ * <MessageContent
72
+ * content={content}
73
+ * isUser={message.role === 'user'}
74
+ * isSystem={message.role === 'system'}
75
+ * rendererRegistry={customRegistry}
76
+ * />
77
+ * ```
78
+ */
79
+ export const MessageContent: React.FC<MessageContentProps> = ({
80
+ content,
81
+ isUser,
82
+ isSystem,
83
+ rendererRegistry,
84
+ defaultRenderer,
85
+ className = '',
86
+ onAddToCart,
87
+ }) => {
88
+ // 动态注入 onAddToCart 到 product_card、product_list 和 product_comparison 类型的内容中
89
+ let processedContent = content
90
+ if (
91
+ (content.type === 'product_card' || content.type === 'product_list' || content.type === 'product_comparison') &&
92
+ onAddToCart
93
+ ) {
94
+ processedContent = {
95
+ ...content,
96
+ data: {
97
+ ...(content as any).data,
98
+ onAddToCart,
99
+ },
100
+ }
101
+ }
102
+
103
+ // 尝试从注册表获取渲染器
104
+ const customRenderer = rendererRegistry?.get(processedContent.type)
105
+
106
+ // 确定最终使用的渲染器
107
+ const renderer = customRenderer || defaultRenderer || defaultFallbackRenderer
108
+
109
+ // 渲染内容
110
+ const rendered = renderer.render(processedContent, isUser, isSystem)
111
+
112
+ return <div className={className}>{rendered}</div>
113
+ }
@@ -0,0 +1,261 @@
1
+ /**
2
+ * 消息列表组件
3
+ * 显示所有聊天消息,支持滚动
4
+ * 基于 specs/livechat-widget/plan.md 的消息列表设计
5
+ */
6
+
7
+ import React, { useRef, useEffect, useState, useCallback } from 'react'
8
+ import type { Message, MessageRenderer } from '../types'
9
+ import { ChatMessage } from './ChatMessage'
10
+ import { ScrollAnchor } from './ScrollAnchor'
11
+ import { MessageRendererRegistry } from '../utils/messageRenderers'
12
+
13
+ export interface MessageListProps {
14
+ /**
15
+ * 消息列表
16
+ */
17
+ messages: Message[]
18
+
19
+ /**
20
+ * 自定义渲染器注册表
21
+ */
22
+ rendererRegistry?: MessageRendererRegistry
23
+
24
+ /**
25
+ * 默认渲染器
26
+ */
27
+ defaultRenderer?: MessageRenderer
28
+
29
+ /**
30
+ * 是否显示时间戳
31
+ * @default true
32
+ */
33
+ showTimestamp?: boolean
34
+
35
+ /**
36
+ * 是否自动滚动到底部
37
+ * @default true
38
+ */
39
+ autoScroll?: boolean
40
+
41
+ /**
42
+ * 是否正在加载历史消息
43
+ * @default false
44
+ */
45
+ isLoadingHistory?: boolean
46
+
47
+ /**
48
+ * 空状态占位内容
49
+ */
50
+ emptyPlaceholder?: React.ReactNode
51
+
52
+ /**
53
+ * 自定义样式类名
54
+ */
55
+ className?: string
56
+
57
+ /**
58
+ * 商品添加到购物车回调
59
+ */
60
+ onAddToCart?: (product: any) => void
61
+ }
62
+
63
+ /**
64
+ * 默认空状态占位
65
+ */
66
+ const DefaultEmptyPlaceholder: React.FC = () => (
67
+ <div className="flex h-full items-center justify-center text-gray-400">
68
+ <p className="text-sm">No messages yet</p>
69
+ </div>
70
+ )
71
+
72
+ /**
73
+ * 加载指示器
74
+ */
75
+ const LoadingIndicator: React.FC = () => (
76
+ <div className="flex justify-center py-4">
77
+ <div className="flex gap-1">
78
+ <div className="size-2 animate-bounce rounded-full bg-gray-400" />
79
+ <div className="size-2 animate-bounce rounded-full bg-gray-400" style={{ animationDelay: '0.1s' }} />
80
+ <div className="size-2 animate-bounce rounded-full bg-gray-400" style={{ animationDelay: '0.2s' }} />
81
+ </div>
82
+ </div>
83
+ )
84
+
85
+ /**
86
+ * 消息列表组件
87
+ *
88
+ * 功能:
89
+ * - 显示所有消息(用户、助手、系统)
90
+ * - 自动滚动到最新消息
91
+ * - 加载历史消息时显示指示器
92
+ * - 空状态占位
93
+ *
94
+ * 样式:
95
+ * - 使用自定义滚动条样式(livechat.css)
96
+ * - 内容间距合理
97
+ * - 支持响应式布局
98
+ *
99
+ * @example
100
+ * ```tsx
101
+ * <MessageList
102
+ * messages={messages}
103
+ * rendererRegistry={customRegistry}
104
+ * autoScroll={true}
105
+ * isLoadingHistory={isLoading}
106
+ * />
107
+ * ```
108
+ */
109
+ export const MessageList: React.FC<MessageListProps> = ({
110
+ messages,
111
+ rendererRegistry,
112
+ defaultRenderer,
113
+ showTimestamp = true,
114
+ autoScroll = true,
115
+ isLoadingHistory = false,
116
+ emptyPlaceholder,
117
+ className = '',
118
+ onAddToCart,
119
+ }) => {
120
+ const listRef = useRef<HTMLDivElement>(null)
121
+ const [showScrollButton, setShowScrollButton] = useState(false)
122
+
123
+ // 检查是否接近底部
124
+ const isNearBottom = useCallback((threshold = 100) => {
125
+ const container = listRef.current
126
+ if (!container) return true
127
+
128
+ const { scrollTop, scrollHeight, clientHeight } = container
129
+ return scrollHeight - scrollTop - clientHeight < threshold
130
+ }, [])
131
+
132
+ // 平滑滚动到底部
133
+ const scrollToBottom = useCallback(() => {
134
+ const container = listRef.current
135
+ if (!container) return
136
+
137
+ container.scrollTo({
138
+ top: container.scrollHeight,
139
+ behavior: 'smooth',
140
+ })
141
+ }, [])
142
+
143
+ // 监听滚动事件,控制按钮显示
144
+ useEffect(() => {
145
+ const container = listRef.current
146
+ if (!container) return
147
+
148
+ const handleScroll = () => {
149
+ setShowScrollButton(!isNearBottom())
150
+ }
151
+
152
+ // 初始检查
153
+ handleScroll()
154
+
155
+ container.addEventListener('scroll', handleScroll, { passive: true })
156
+ return () => container.removeEventListener('scroll', handleScroll)
157
+ }, [isNearBottom])
158
+
159
+ // 当消息列表变化时,重新检查按钮状态(但不在自动滚动时)
160
+ useEffect(() => {
161
+ if (autoScroll) return // 自动滚动会在另一个 effect 中处理
162
+
163
+ const timeoutId = setTimeout(() => {
164
+ setShowScrollButton(!isNearBottom())
165
+ }, 150)
166
+
167
+ return () => clearTimeout(timeoutId)
168
+ }, [messages, autoScroll, isNearBottom])
169
+
170
+ // 监听消息列表变化,自动滚动
171
+ useEffect(() => {
172
+ if (!autoScroll || !listRef.current) return
173
+
174
+ // 延迟滚动以确保 DOM 已更新
175
+ const timeoutId = setTimeout(() => {
176
+ if (listRef.current) {
177
+ listRef.current.scrollTop = listRef.current.scrollHeight
178
+ // 自动滚动到底部后,隐藏按钮
179
+ setShowScrollButton(false)
180
+ }
181
+ }, 100)
182
+
183
+ return () => clearTimeout(timeoutId)
184
+ }, [messages, autoScroll])
185
+
186
+ // 空状态
187
+ if (messages.length === 0 && !isLoadingHistory) {
188
+ return (
189
+ <div className={`flex-1 overflow-hidden ${className}`}>{emptyPlaceholder || <DefaultEmptyPlaceholder />}</div>
190
+ )
191
+ }
192
+
193
+ return (
194
+ <div className="relative flex-1 overflow-hidden">
195
+ <div
196
+ ref={listRef}
197
+ className={`
198
+ livechat-message-list absolute inset-0 overflow-y-auto p-4
199
+ ${className}
200
+ `}
201
+ >
202
+ {/* 加载历史消息指示器 */}
203
+ {isLoadingHistory && <LoadingIndicator />}
204
+
205
+ {/* 消息列表 */}
206
+ <div className="flex flex-col gap-1">
207
+ {messages.map(message => (
208
+ <ChatMessage
209
+ key={message.id}
210
+ message={message}
211
+ rendererRegistry={rendererRegistry}
212
+ defaultRenderer={defaultRenderer}
213
+ showTimestamp={showTimestamp}
214
+ onAddToCart={onAddToCart}
215
+ />
216
+ ))}
217
+ </div>
218
+
219
+ {/* 滚动锚点 */}
220
+ {autoScroll && <ScrollAnchor dependencies={[messages]} />}
221
+ </div>
222
+
223
+ {/* 回到底部按钮 */}
224
+ <button
225
+ onClick={scrollToBottom}
226
+ className={`flex -translate-x-1/2 items-center justify-center ${showScrollButton ? '' : 'pointer-events-none'}`}
227
+ style={{
228
+ position: 'absolute',
229
+ bottom: '24px',
230
+ left: '50%',
231
+ zIndex: 10,
232
+ width: '40px',
233
+ height: '40px',
234
+ borderRadius: '50%',
235
+ backgroundColor: 'rgba(255, 255, 255, 0.95)',
236
+ boxShadow: '0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)',
237
+ transition: 'all 300ms ease-in-out',
238
+ opacity: showScrollButton ? 1 : 0,
239
+ cursor: 'pointer',
240
+ border: 'none',
241
+ }}
242
+ aria-label="Scroll to bottom"
243
+ aria-hidden={!showScrollButton}
244
+ >
245
+ <svg
246
+ width="20"
247
+ height="20"
248
+ viewBox="0 0 24 24"
249
+ fill="none"
250
+ stroke="currentColor"
251
+ strokeWidth="2"
252
+ strokeLinecap="round"
253
+ strokeLinejoin="round"
254
+ className="text-gray-700"
255
+ >
256
+ <polyline points="6 9 12 15 18 9" />
257
+ </svg>
258
+ </button>
259
+ </div>
260
+ )
261
+ }
@@ -0,0 +1,75 @@
1
+ /**
2
+ * 滚动锚点组件
3
+ * 用于自动滚动到消息列表底部
4
+ * 基于 specs/livechat-widget/plan.md 的滚动行为设计
5
+ */
6
+
7
+ import React, { useEffect, useRef } from 'react'
8
+
9
+ export interface ScrollAnchorProps {
10
+ /**
11
+ * 是否自动滚动
12
+ * @default true
13
+ */
14
+ autoScroll?: boolean
15
+
16
+ /**
17
+ * 滚动行为
18
+ * @default "smooth"
19
+ */
20
+ behavior?: ScrollBehavior
21
+
22
+ /**
23
+ * 依赖项(当依赖项变化时触发滚动)
24
+ */
25
+ dependencies?: any[]
26
+ }
27
+
28
+ /**
29
+ * 滚动锚点组件
30
+ *
31
+ * 功能:
32
+ * - 放置在消息列表底部
33
+ * - 当新消息到达时自动滚动到此位置
34
+ * - 支持平滑滚动动画
35
+ *
36
+ * 使用场景:
37
+ * - 接收新消息时自动滚动
38
+ * - 发送消息后自动滚动
39
+ * - 加载历史消息后保持位置
40
+ *
41
+ * @example
42
+ * ```tsx
43
+ * <MessageList>
44
+ * {messages.map(msg => <ChatMessage key={msg.id} message={msg} />)}
45
+ * <ScrollAnchor dependencies={[messages]} />
46
+ * </MessageList>
47
+ * ```
48
+ */
49
+ export const ScrollAnchor: React.FC<ScrollAnchorProps> = ({
50
+ autoScroll = true,
51
+ behavior = 'smooth',
52
+ dependencies = [],
53
+ }) => {
54
+ const anchorRef = useRef<HTMLDivElement>(null)
55
+
56
+ useEffect(() => {
57
+ if (!autoScroll) return
58
+
59
+ const anchor = anchorRef.current
60
+ if (!anchor) return
61
+
62
+ // 使用 setTimeout 确保 DOM 已更新
63
+ const timeoutId = setTimeout(() => {
64
+ anchor.scrollIntoView({
65
+ behavior,
66
+ block: 'end',
67
+ inline: 'nearest',
68
+ })
69
+ }, 100)
70
+
71
+ return () => clearTimeout(timeoutId)
72
+ }, [autoScroll, behavior, ...dependencies])
73
+
74
+ return <div ref={anchorRef} style={{ height: 0 }} />
75
+ }
@@ -0,0 +1,36 @@
1
+ /**
2
+ * LiveChat 组件常量定义
3
+ */
4
+
5
+ import type { CommonText } from './types'
6
+
7
+ /**
8
+ * 货币符号映射表
9
+ * 用于将货币代码转换为对应的符号
10
+ */
11
+ export const CURRENCY_SYMBOLS: Record<string, string> = {
12
+ USD: "$",
13
+ CAD: "CA$",
14
+ GBP: "£",
15
+ EUR: "€",
16
+ AUD: "$",
17
+ SGD: "$",
18
+ NZD: "NZ$",
19
+ AED: "AED ",
20
+ VND: "₫",
21
+ TWD: "NT$",
22
+ PLN: "zł",
23
+ RON: "Lei"
24
+ }
25
+
26
+ /**
27
+ * 默认文案配置
28
+ */
29
+ export const DEFAULT_COMMON_TEXT: Required<CommonText> = {
30
+ learnMore: 'Learn More',
31
+ showLess: 'Show Less',
32
+ addToCart: 'Add to Cart',
33
+ viewMore: 'View More',
34
+ off: 'OFF',
35
+ total: 'Total',
36
+ }
@@ -0,0 +1,146 @@
1
+ /**
2
+ * 聊天 API 调用 Hook
3
+ * 封装 SSE 流式消息接收、历史消息加载、新会话创建
4
+ * 基于 specs/livechat-widget/plan.md 的 API 调用策略
5
+ */
6
+
7
+ import { useCallback, useRef } from 'react'
8
+ import type { ChatStreamRequest, SSEEvent, NewSessionRequest, NewSessionResponse } from '../types'
9
+ import { sendMessage, createNewSession, type RecaptchaConfig } from '../api/chat'
10
+
11
+ export interface UseChatAPIOptions {
12
+ /**
13
+ * API 基础 URL
14
+ */
15
+ apiBaseUrl: string
16
+
17
+ /**
18
+ * 自定义请求头
19
+ */
20
+ headers?: Record<string, string>
21
+
22
+ /**
23
+ * reCAPTCHA 配置
24
+ */
25
+ recaptchaConfig?: RecaptchaConfig
26
+
27
+ /**
28
+ * 错误处理回调
29
+ */
30
+ onError?: (error: Error) => void
31
+ }
32
+
33
+ export interface UseChatAPIReturn {
34
+ /**
35
+ * 发送消息并接收 SSE 流式响应
36
+ * @param request 请求参数
37
+ * @param onEvent SSE 事件回调
38
+ * @returns Promise<void>
39
+ */
40
+ sendMessageStream: (request: ChatStreamRequest, onEvent: (event: SSEEvent) => void) => Promise<void>
41
+
42
+ /**
43
+ * 创建新会话或恢复现有会话
44
+ * @param request 请求参数
45
+ * @returns 新会话信息,可能包含历史消息
46
+ */
47
+ createSession: (request: NewSessionRequest) => Promise<NewSessionResponse>
48
+
49
+ /**
50
+ * 中断当前的 SSE 流
51
+ */
52
+ abortStream: () => void
53
+
54
+ /**
55
+ * 是否正在发送消息
56
+ */
57
+ isSending: boolean
58
+ }
59
+
60
+ /**
61
+ * 聊天 API 调用 Hook
62
+ *
63
+ * 功能:
64
+ * 1. sendMessageStream: 发送消息并接收 SSE 流式响应
65
+ * 2. createSession: 创建新会话或恢复现有会话
66
+ * 3. abortStream: 中断当前流
67
+ *
68
+ * @param options Hook 配置选项
69
+ * @returns API 调用工具对象
70
+ */
71
+ export function useChatAPI(options: UseChatAPIOptions): UseChatAPIReturn {
72
+ const { apiBaseUrl, headers, recaptchaConfig, onError } = options
73
+
74
+ // 用于中断当前请求的 AbortController
75
+ const abortControllerRef = useRef<AbortController | null>(null)
76
+
77
+ // 发送状态标记
78
+ const isSendingRef = useRef(false)
79
+
80
+ /**
81
+ * 发送消息并接收 SSE 流式响应
82
+ */
83
+ const sendMessageStream = useCallback(
84
+ async (request: ChatStreamRequest, onEvent: (event: SSEEvent) => void) => {
85
+ // 如果正在发送,先中断之前的请求
86
+ if (abortControllerRef.current) {
87
+ abortControllerRef.current.abort()
88
+ }
89
+
90
+ // 创建新的 AbortController
91
+ abortControllerRef.current = new AbortController()
92
+ isSendingRef.current = true
93
+
94
+ try {
95
+ await sendMessage(apiBaseUrl, request, onEvent, headers, recaptchaConfig)
96
+ } catch (error) {
97
+ // 忽略手动中断的错误
98
+ if (error instanceof Error && error.name === 'AbortError') {
99
+ return
100
+ }
101
+
102
+ console.error('[useChatAPI] Stream error:', error)
103
+ onError?.(error as Error)
104
+ throw error
105
+ } finally {
106
+ isSendingRef.current = false
107
+ abortControllerRef.current = null
108
+ }
109
+ },
110
+ [apiBaseUrl, headers, recaptchaConfig, onError]
111
+ )
112
+
113
+ /**
114
+ * 创建新会话或恢复现有会话
115
+ */
116
+ const createSession = useCallback(
117
+ async (request: NewSessionRequest): Promise<NewSessionResponse> => {
118
+ try {
119
+ return await createNewSession(apiBaseUrl, request, headers, recaptchaConfig)
120
+ } catch (error) {
121
+ console.error('[useChatAPI] Create session error:', error)
122
+ onError?.(error as Error)
123
+ throw error
124
+ }
125
+ },
126
+ [apiBaseUrl, headers, recaptchaConfig, onError]
127
+ )
128
+
129
+ /**
130
+ * 中断当前的 SSE 流
131
+ */
132
+ const abortStream = useCallback(() => {
133
+ if (abortControllerRef.current) {
134
+ abortControllerRef.current.abort()
135
+ abortControllerRef.current = null
136
+ isSendingRef.current = false
137
+ }
138
+ }, [])
139
+
140
+ return {
141
+ sendMessageStream,
142
+ createSession,
143
+ abortStream,
144
+ isSending: isSendingRef.current,
145
+ }
146
+ }